Nginx常見(jiàn)的幾種回源方式實(shí)現(xiàn)
簡(jiǎn)介
為了解決辦公網(wǎng)軟件版本更新,導(dǎo)致辦公網(wǎng)公網(wǎng)帶寬緊張。通過(guò)Nginx回源文件至本地機(jī)房,域名解析采用內(nèi)外網(wǎng)單獨(dú)解析,外地辦公同事可以通過(guò)CDN進(jìn)行更新,公司辦公網(wǎng)同事通過(guò)內(nèi)網(wǎng)DNS解析獲取本地資源更新。
如果不是辦公網(wǎng)公網(wǎng)帶寬緊張,又沒(méi)有類似SCCM管理工具,是很少用到nginx來(lái)解決辦公網(wǎng)軟件更新的問(wèn)題,有點(diǎn)偏冷門。作為運(yùn)維向來(lái)是遇到問(wèn)題橫刀策馬,果斷解決各種疑難雜癥。
nginx常見(jiàn)的回源方式nginx proxy_store或proxy_cache模塊
nginx中的proxy_store模塊和proxy_cache模塊是兩種不同的回源方式,它們各自有優(yōu)缺點(diǎn),適用于不同的場(chǎng)景。以下是對(duì)這兩種方式的簡(jiǎn)要說(shuō)明:
proxy_store模塊:
優(yōu)點(diǎn):
- 靈活性:proxy_store模塊允許你根據(jù)需要保存特定的響應(yīng)內(nèi)容,你可以選擇性地將某些響應(yīng)存儲(chǔ)到指定的路徑。
- 定制性:可以按照自己的規(guī)則和需求來(lái)配置存儲(chǔ)的位置和文件名,從而實(shí)現(xiàn)更高度的定制。
缺點(diǎn):
- 不適合大規(guī)模緩存:proxy_store主要用于在本地磁盤上存儲(chǔ)響應(yīng)內(nèi)容,不適合大規(guī)模緩存,因?yàn)樗赡軐?dǎo)致本地磁盤空間迅速耗盡。
- 性能:當(dāng)需要頻繁地讀取和寫入磁盤時(shí),可能對(duì)性能產(chǎn)生影響。
proxy_cache模塊:
優(yōu)點(diǎn):
性能:proxy_cache通過(guò)使用內(nèi)存緩存,可以顯著提高性能,因?yàn)閮?nèi)存的讀寫速度遠(yuǎn)遠(yuǎn)快于磁盤。
自動(dòng)過(guò)期:支持設(shè)置緩存的過(guò)期時(shí)間,避免緩存內(nèi)容過(guò)時(shí)。
緩存共享:如果有多個(gè)Nginx服務(wù)器,proxy_cache模塊還支持緩存的共享,可以在多個(gè)服務(wù)器之間共享緩存。
缺點(diǎn):
占用內(nèi)存:由于緩存在內(nèi)存中,可能導(dǎo)致占用較大的內(nèi)存空間,尤其在大規(guī)模緩存的情況下。
配置復(fù)雜性:對(duì)于一些特定的配置,可能需要更多的配置工作,相對(duì)于proxy_store而言,可能配置較為復(fù)雜。
選擇建議:
小規(guī)模場(chǎng)景:如果你的應(yīng)用是小規(guī)模的,并且對(duì)性能要求不是非常高,可以考慮使用proxy_store模塊,因?yàn)樗鄬?duì)簡(jiǎn)單,且靈活性較高。
大規(guī)模場(chǎng)景:如果你的應(yīng)用需要高性能和大規(guī)模緩存,proxy_cache模塊是更好的選擇,因?yàn)樗趦?nèi)存中管理緩存,提高了讀取速度,并且支持更多的高級(jí)緩存控制選項(xiàng)。
最終選擇取決于你的具體需求和應(yīng)用場(chǎng)景。
proxy_store方式實(shí)現(xiàn)回源
以下是nginx回源配置
server { listen 80; server_name 內(nèi)網(wǎng)訪問(wèn)域名; 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 云對(duì)象存儲(chǔ)地址; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location /ngx_stat { stub_status on; access_log off; } }
為什么使用對(duì)象存儲(chǔ)地址而不是CDN地址,是由于上傳至對(duì)象存儲(chǔ)的文件還不能及時(shí)同步到各個(gè)CDN節(jié)點(diǎn),導(dǎo)致CDN上有很多請(qǐng)求報(bào)錯(cuò)日志
proxy_cache方式實(shí)現(xiàn)回源
以下是nginx回源配置,重點(diǎn)關(guān)注proxy_cache配置
vim nginx.conf #定義nginx運(yùn)行的用戶和用戶組 user app; #啟動(dòng)進(jìn)程,通常設(shè)置成和CPU的數(shù)量相等 worker_processes auto; #改指令是當(dāng)義工nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開(kāi)文件數(shù)(ulimit -n) #與nginx進(jìn)程數(shù)相除,但是nginx分配請(qǐng)求并不是那么均勻,所以最好與ulimit -n的值保持一致 worker_rlimit_nofile 65535; events { #單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)連接數(shù)(最大連接數(shù)=連接數(shù)*進(jìn)程數(shù)) worker_connections 16383; } http { include mime.types; default_type application/octet-stream; #訪問(wèn)日志格式,其中X-B3-TraceId參數(shù)是鏈路跟蹤參數(shù) 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}'; #全局訪問(wèn)日志,采用json日志格式 access_log /data/logs/nginx/access.log json; #全局錯(cuò)誤日志 #錯(cuò)誤日志定義等級(jí),默認(rèn)error級(jí)別,[ debug | info | notice | warn | error | crit ] error_log /data/logs/nginx/error.log; #sendfile指令制定nginx是否調(diào)用sendfile函數(shù)(zero copy方式)來(lái)輸出文件 #對(duì)于普通應(yīng)用必須設(shè)為on #如果用來(lái)進(jìn)行下載等應(yīng)用磁盤I/O重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度 #降低系統(tǒng)的uptime sendfile on; #防止網(wǎng)絡(luò)阻塞 tcp_nopush on; #提高數(shù)據(jù)的實(shí)時(shí)響應(yīng)性 tcp_nodelay on; #隱藏nginx版本號(hào) server_tokens off; #keepalive超時(shí)時(shí)間,客戶端到服務(wù)器端的連接持續(xù)有效時(shí)間,當(dāng)出現(xiàn)對(duì)服務(wù)器的后端請(qǐng)求時(shí), #keepalive-timeout功能可避免建立或重新建立連接 keepalive_timeout 65; #定義讀取客戶端請(qǐng)求標(biāo)頭的超時(shí)。如果客戶端在此時(shí)間內(nèi)未傳輸整個(gè)標(biāo)頭, #則請(qǐng)求將以408(請(qǐng)求超時(shí))錯(cuò)誤終止 client_header_timeout 15; #定義讀取客戶端請(qǐng)求正文的超時(shí)。如果客戶端在此時(shí)間內(nèi)未傳輸任何內(nèi)容, #則請(qǐng)求會(huì)因408(請(qǐng)求超時(shí))錯(cuò)誤終止 client_body_timeout 15; #后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí)) send_timeout 25; client_header_buffer_size 4096K; #允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù) 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; #開(kāi)啟gzip壓縮 #gzip on; #gzip_min_length 1k; #gzip_buffers 4 16k; #壓縮級(jí)別大小,最大為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; } #虛擬主機(jī)配置文件 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; } }
到此這篇關(guān)于Nginx常見(jiàn)的幾種回源方式實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx 回源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Nginx之Location配置(Location匹配順序)
這篇文章主要介紹了詳解Nginx之Location配置(Location匹配順序),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Nginx配置缺少導(dǎo)致CSS不起作用的問(wèn)題及解決方法
在Web開(kāi)發(fā)中,確保樣式表正確加載是前端顯示正常工作的關(guān)鍵,然而,有時(shí)候即使CSS文件的路徑和代碼本身沒(méi)有問(wèn)題,CSS樣式也可能無(wú)法正確應(yīng)用,本文將分享一個(gè)常見(jiàn)的問(wèn)題——Nginx配置缺少導(dǎo)致的CSS不起作用,以及如何解決這個(gè)問(wèn)題,感興趣的朋友一起看看吧2024-07-07Nginx應(yīng)用之Location路由反向代理及重寫策略示例
本篇文章主要介紹了Nginx應(yīng)用之Location路由反向代理及重寫策略示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02Nginx服務(wù)器做負(fù)載均衡反向代理的超級(jí)攻略
這篇文章主要介紹了Nginx服務(wù)器做負(fù)載均衡反向代理的超級(jí)攻略,包括緩存的相關(guān)設(shè)定以及負(fù)載均衡的一些常見(jiàn)問(wèn)題的解決,極力推薦!需要的朋友可以參考下2015-08-08nginx結(jié)合keepalived實(shí)現(xiàn)高可用的完整步驟
這篇文章主要給大家介紹了關(guān)于nginx結(jié)合keepalived實(shí)現(xiàn)高可用的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12nginx禁止訪問(wèn).git文件的設(shè)置教程
這篇文章主要介紹了nginx禁止訪問(wèn).git文件的設(shè)置教程,.git文件會(huì)包含一份文件列表,如果你的網(wǎng)站是基于git協(xié)作開(kāi)發(fā)的,則必須要注意這個(gè)問(wèn)題,需要的朋友可以參考下2014-08-08Nginx Rewrite使用場(chǎng)景及配置方法解析
這篇文章主要介紹了Nginx Rewrite使用場(chǎng)景及配置方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09詳解nginx中l(wèi)ocation、rewrite用法總結(jié)
這篇文章主要介紹了詳解nginx中l(wèi)ocation、rewrite用法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09部署Nginx+Apache動(dòng)靜分離的實(shí)例詳解
Nginx不僅能作為Web服務(wù)器,還具有反向代理、負(fù)載均衡和緩存的功能,這篇文章主要介紹了部署Nginx+Apache動(dòng)靜分離的實(shí)例代碼,需要的朋友可以參考下2019-12-12