Nginx常見的幾種回源方式實現
簡介
為了解決辦公網軟件版本更新,導致辦公網公網帶寬緊張。通過Nginx回源文件至本地機房,域名解析采用內外網單獨解析,外地辦公同事可以通過CDN進行更新,公司辦公網同事通過內網DNS解析獲取本地資源更新。
如果不是辦公網公網帶寬緊張,又沒有類似SCCM管理工具,是很少用到nginx來解決辦公網軟件更新的問題,有點偏冷門。作為運維向來是遇到問題橫刀策馬,果斷解決各種疑難雜癥。
nginx常見的回源方式nginx proxy_store或proxy_cache模塊
nginx中的proxy_store模塊和proxy_cache模塊是兩種不同的回源方式,它們各自有優(yōu)缺點,適用于不同的場景。以下是對這兩種方式的簡要說明:
proxy_store模塊:
優(yōu)點:
- 靈活性:proxy_store模塊允許你根據需要保存特定的響應內容,你可以選擇性地將某些響應存儲到指定的路徑。
- 定制性:可以按照自己的規(guī)則和需求來配置存儲的位置和文件名,從而實現更高度的定制。
缺點:
- 不適合大規(guī)模緩存:proxy_store主要用于在本地磁盤上存儲響應內容,不適合大規(guī)模緩存,因為它可能導致本地磁盤空間迅速耗盡。
- 性能:當需要頻繁地讀取和寫入磁盤時,可能對性能產生影響。
proxy_cache模塊:
優(yōu)點:
性能:proxy_cache通過使用內存緩存,可以顯著提高性能,因為內存的讀寫速度遠遠快于磁盤。
自動過期:支持設置緩存的過期時間,避免緩存內容過時。
緩存共享:如果有多個Nginx服務器,proxy_cache模塊還支持緩存的共享,可以在多個服務器之間共享緩存。
缺點:
占用內存:由于緩存在內存中,可能導致占用較大的內存空間,尤其在大規(guī)模緩存的情況下。
配置復雜性:對于一些特定的配置,可能需要更多的配置工作,相對于proxy_store而言,可能配置較為復雜。
選擇建議:
小規(guī)模場景:如果你的應用是小規(guī)模的,并且對性能要求不是非常高,可以考慮使用proxy_store模塊,因為它相對簡單,且靈活性較高。
大規(guī)模場景:如果你的應用需要高性能和大規(guī)模緩存,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節(jié)點,導致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進程的最大并發(fā)連接數(最大連接數=連接數*進程數)
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超時時間,客戶端到服務器端的連接持續(xù)有效時間,當出現對服務器的后端請求時,
#keepalive-timeout功能可避免建立或重新建立連接
keepalive_timeout 65;
#定義讀取客戶端請求標頭的超時。如果客戶端在此時間內未傳輸整個標頭,
#則請求將以408(請求超時)錯誤終止
client_header_timeout 15;
#定義讀取客戶端請求正文的超時。如果客戶端在此時間內未傳輸任何內容,
#則請求會因408(請求超時)錯誤終止
client_body_timeout 15;
#后端服務器數據回傳時間(代理發(fā)送超時)
send_timeout 25;
client_header_buffer_size 4096K;
#允許客戶端請求的最大單文件字節(jié)數
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;
}
}到此這篇關于Nginx常見的幾種回源方式實現的文章就介紹到這了,更多相關Nginx 回源內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
網站如何通過nginx設置黑/白名單IP限制及國家城市IP訪問限制
如果你的服務器被攻擊很厲害,而且服務器是自己練手的,不需要其他用戶訪問的,那么就可以配置一下nginx的白名單,下面這篇文章主要給大家介紹了關于網站如何通過nginx設置黑/白名單IP限制及國家城市IP訪問限制的相關資料,需要的朋友可以參考下2022-07-07
nginx 部署 vue 項目找不到js css文件的解決方法
這篇文章主要介紹了nginx 部署 vue 項目找不到js css文件的解決方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07

