- 分布式系統架構:技術棧詳解與快速進階
- 張程
- 1212字
- 2020-08-13 13:45:35
4.3 Nginx配置
nginx.conf配置文件如代碼清單4-5所示。
代碼清單4-5 nginx.conf配置文件
# 啟動進程 worker_processes 2; # 全局錯誤日志及PID文件 error_log /var/log/nginx/error.log; pid /var/nginx.pid; # 工作模式及連接數上限 events { use epoll; #epoll是多路復用I/O中的一種方式, 可以大大提高nginx的性能 worker_connections 1024; #單個后臺worker process進程的最大并發連接數 # multi_accept on; } #設定HTTP服務器,利用它的反向代理功能提供負載均衡支持 http { #設定mime類型, 類型由mime.type文件定義 include /etc/nginx/mime.types; default_type application/octet-stream; #設定日志格式 access_log /var/log/nginx/access.log; #sendfile 指令指定Nginx是否調用sendfile函數(zero copy方式)來輸出文件,對于普通應用, #必須設為on, 如果用來進行下載等應用磁盤I/O重負載應用,可設置為off,以平衡磁盤與網絡I/O#處理速度,降低系統的uptime sendfile on; #將tcp_nopush和tcp_nodelay兩個指令設置為on以防止網絡阻塞 tcp_nopush on; tcp_nodelay on; #連接超時時間 keepalive_timeout 65; #開啟Gzip壓縮 gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #設定請求緩沖 client_header_buffer_size 1k; large_client_header_buffers 4k; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; #設定負載均衡的服務器列表 upstream zachary.sh.cn { #ip_hash # weigth參數表示權值,權值越高被分配到的概率越大 # 默認weight=1,不推薦使用ip_hash,客戶端IP會變化,如動態IP、翻墻、代理 server 192.168.10.1:3128 weight=5; server 192.168.10.2:80 weight=1; server 192.168.10.3:80 weight=6; } server { #偵聽80端口 listen 80; #默認請求 location / { root /root; #定義服務器的默認網站根目錄位置 index index.html index.htm; #定義首頁索引文件的名稱 } # 定義錯誤提示頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; } #靜態文件,Nginx自己處理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /zachary/shop; #這里設置為30天過期,若靜態文件不經常更新,過期時間可以設大一點,若文件頻繁更新,則可 #以設置得小一點 expires 30d; } } server { listen 8081; server_name zachary.sh.cn; #對http:// zachary.sh.cn:8081/shop 進行負載均衡請求 location ~* ^/shop { #定義服務器的默認網站根目錄位置 root /root; #定義首頁索引文件的名稱 index index.html index.htm; #zachary 定義的服務器列表 proxy_pass http:// zachary.sh.cn; #失敗的請求被發送到下一臺服務器重試;只有在沒有向客戶端發送任何數據以前,將請求轉給下一臺后#端服務器才是可行的 proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header; #以下是一些反向代理的配置,可刪除 proxy_redirect off; #Web服務器可以通過X-Forwarded-For獲取用戶真實IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩沖區代理緩沖用戶端請求的最大字節數 proxy_connect_timeout 90; # Nginx跟后端服務器連接超時時間(代理連接超時) proxy_send_timeout 90; #后端服務器數據回傳時間(代理發送超時) proxy_read_timeout 90; #連接成功后,后端服務器響應時間(代理接收超時) proxy_buffer_size 4k; #設置代理服務器(Nginx)保存用戶頭信息的緩沖區大小 proxy_buffers 32k; # proxy_buffers緩沖區,這里設置為32KB以下 proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大于這個值,將從upstream服 } #務器傳 } }
代碼清單4-5所示的處理過程如下:
1)Worker接收到請求后會監控80/8081端口,在請求反向代理到后臺服務器(如tomcat)的過程中,可自定義多種負載均衡算法,默認為輪詢方式。
2)靜態資源不代理到后臺服務器,直接可以到專有靜態資源服務器、分布式共享存儲獲取,如NFS/MFS。
3)Nginx單點的HA高可用:proxy_next_upstream可配置,如果指向服務器1,此時服務器1處于異常,它會重新把請求指向下一臺服務器,依次類推。
注意,關于worker_processes進程數設置,通常是CPU個數的2倍,對于http://zachary.sh.cn:8081/shop進行負載均衡請求,其中會根據服務器的權重分配請求次數,以求達到負載均衡效果。在其中一臺服務器在沒有向客戶端發送任何數據之前就處理失敗的情況下,系統會重新把當前請求分配給下一臺服務器消費,以保證請求不丟失。