Nginx常见的几种回源方式实现

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

简介

为了解决办公网软件版本更新,导致办公网公网带宽紧张。通过Nginx回源文件至本地机房,域名解析采用内外网单独解析,外地办公同事可以通过CDN进行更新,公司办公网同事通过内网DNS解析获取本地资源更新。

如果不是办公网公网带宽紧张,又没有类似SCCM管理工具,是很少用到nginx来解决办公网软件更新的问题,有点偏冷门。作为运维向来是遇到问题横刀策马,果断解决各种疑难杂症。

nginx常见的回源方式nginx proxy_store或proxy_cache模块

nginx中的proxy_store模块和proxy_cache模块是两种不同的回源方式,它们各自有优缺点,适用于不同的场景。以下是对这两种方式的简要说明:

proxy_store模块:

优点:

灵活性:proxy_store模块允许你根据需要保存特定的响应内容,你可以选择性地将某些响应存储到指定的路径。定制性:可以按照自己的规则和需求来配置存储的位置和文件名,从而实现更高度的定制。

缺点:

不适合大规模缓存:proxy_store主要用于在本地磁盘上存储响应内容,不适合大规模缓存,因为它可能导致本地磁盘空间迅速耗尽。性能:当需要频繁地读取和写入磁盘时,可能对性能产生影响。

proxy_cache模块:

优点:

性能:proxy_cache通过使用内存缓存,可以显著提高性能,因为内存的读写速度远远快于磁盘。

自动过期:支持设置缓存的过期时间,避免缓存内容过时。

缓存共享:如果有多个Nginx服务器,proxy_cache模块还支持缓存的共享,可以在多个服务器之间共享缓存。

缺点:

占用内存:由于缓存在内存中,可能导致占用较大的内存空间,尤其在大规模缓存的情况下。

配置复杂性:对于一些特定的配置,可能需要更多的配置工作,相对于proxy_store而言,可能配置较为复杂。

选择建议:

小规模场景:如果你的应用是小规模的,并且对性能要求不是非常高,可以考虑使用proxy_store模块,因为它相对简单,且灵活性较高。

大规模场景:如果你的应用需要高性能和大规模缓存,proxy_cache模块是更好的选择,因为它在内存中管理缓存,提高了读取速度,并且支持更多的高级缓存控制选项。

最终选择取决于你的具体需求和应用场景。

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上有很多请求报错日志

proxy_cache方式实现回源

以下是nginx回源配置,重点关注proxy_cache配置

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; } }


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容