1.背景
为了解决每次软件版本更新,导致办公网公网带宽紧张,通过Nginx回源至本地机房,域名解析采用内外网单独解析,外地办公同事可以通过CDN进行更新,公司内部同事通过内网DNS解析获取本地资源更新
nginx常见的回源方式nginx proxy_store或proxy_cache模块
2.proxy_store方式回源
以下是Nginx回源配置:
server {
listen 80;
server_name 内网访问域名;
location / {
expires -1;
proxy_set_header Accept-Encoding '';
root /data/www;
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /data/tmp;
if ( !-e $request_filename) {
proxy_pass 云对象存储地址;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /ngx_stat {
stub_status on;
access_log off;
}
}
备注:为什么使用对象存储地址而不是CDN地址,是由于上传至对象存储的文件还不能及时同步到各个CDN节点,导致CDN上有很多请求报错日志
3.proxy_cache方式回源
参考链接:http://www.osyum.com/article/show/176/
以下是Nginx回源配置:
重点关注proxy_cache配置
#nginx 主配置文件
vim nginx.conf
#定义nginx运行的用户和用户组
user app;
#启动进程,通常设置成和CPU的数量相等
worker_processes auto;
#改指令是当义工nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)
#与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致
worker_rlimit_nofile 65535;
events {
#单个后台worker process进程的最大并发连接数(最大连接数=连接数*进程数)
worker_connections 16383;
}
http {
include mime.types;
default_type application/octet-stream;
#访问日志格式,其中X-B3-TraceId参数是链路跟踪参数
log_format json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"X-B3-TraceId":"$http_X_B3_TraceId",'
'"Content-Length":"$http_Content_Length",'
'"appkey":"$http_appkey",'
'"method":"$http_method",'
'"status":"$status",'
'"ups_status":$upstream_status}';
#全局访问日志,采用json日志格式
access_log /data/logs/nginx/access.log json;
#全局错误日志
#错误日志定义等级,默认error级别,[ debug | info | notice | warn | error | crit ]
error_log /data/logs/nginx/error.log;
#sendfile指令制定nginx是否调用sendfile函数(zero copy方式)来输出文件
#对于普通应用必须设为on
#如果用来进行下载等应用磁盘I/O重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度
#降低系统的uptime
sendfile on;
#防止网络阻塞
tcp_nopush on;
#提高数据的实时响应性
tcp_nodelay on;
#隐藏nginx版本号
server_tokens off;
#keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后端请求时,
#keepalive-timeout功能可避免建立或重新建立连接
keepalive_timeout 65;
#定义读取客户端请求标头的超时。如果客户端在此时间内未传输整个标头,
#则请求将以408(请求超时)错误终止
client_header_timeout 15;
#定义读取客户端请求正文的超时。如果客户端在此时间内未传输任何内容,
#则请求会因408(请求超时)错误终止
client_body_timeout 15;
#后端服务器数据回传时间(代理发送超时)
send_timeout 25;
client_header_buffer_size 4096K;
#允许客户端请求的最大单文件字节数
client_max_body_size 10m;
proxy_cache_path /data/nginx/proxy_cache/cache levels=1:2 keys_zone=downloadcache:600m max_size=400g inactive=48h use_temp_path=on;
proxy_temp_path /data/nginx/proxy_cache/temp;
proxy_cache_key $host$request_uri;
#开启gzip压缩
#gzip on;
#gzip_min_length 1k;
#gzip_buffers 4 16k;
#压缩级别大小,最大为9,值越小,压缩后比例越小,CPU处理更快,值越大,消耗CPU比较高
#gzip_comp_level 2;
#gzip_types text/plain application/javascript text/css application/xml text/javascript application/json;
#gzip_vary off;
include /usr/local/nginx/conf/vhost/*.conf;
}
虚拟主机配置文件
vim default.conf
server {
listen 443 ssl;
server_name 域名;
ssl_certificate /usr/local/nginx/conf/ssl/域名.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/域名.key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $http_x_forward_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header Host $host;
proxy_cache downloadcache;
proxy_cache_valid 200 600s;
proxy_cache_valid 304 600s;
proxy_cache_use_stale invalid_header http_403 http_404 http_500 http_502;
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
proxy_pass https://域名;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /ngx_stat {
stub_status on;
access_log off;
}
}
4.大文件回源方法
针对大文件回源可以采用360开源的ngx_http_subrange_module模块
https://www.cnblogs.com/bugutian/p/4528661.html
作者:Jeebiz 创建时间:2023-01-24 21:44
最后编辑:Jeebiz 更新时间:2024-01-25 09:10
最后编辑:Jeebiz 更新时间:2024-01-25 09:10