Nginx 作為反向Proxy 的優化要點


原文地址:http://my.oschina.net/hyperichq/blog/405421

 

常用優化要點

當nginx用於反向代理時,每個客戶端將使用兩個連接:

一個用於響應客戶端的請求,另一個用於到后端的訪問;

如果機器是兩核CPU,例如:

?
1
2
grep  ^proces  /proc/cpuinfo  wc  -l
2

那么,可以從如下配置起步:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# One worker per CPU-core.
worker_processes  2;
events {
     worker_connections  8096;
     multi_accept        on;
     use                 epoll;
}
worker_rlimit_nofile 40000;
http {
     sendfile           on;
     tcp_nopush         on;
     tcp_nodelay        on;
     keepalive_timeout  15;
}

標准的代理配置

下面是一個基本的反向代理配置模板,將所有請求都轉發給指定的后端應用。

例如,到http://your.ip:80/的請求都將重定向到 http://127.0.0.1:4433/ 私有服務器:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# One process for each CPU-Core
worker_processes  2;
# Event handler.
events {
     worker_connections  8096;
     multi_accept        on;
     use                 epoll;
}
http {
      # Basic reverse proxy server
      upstream backend  {
            server 127.0.0.1:4433;
      }
      # *:80 -> 127.0.0.1:4433
      server {
             listen       80;
             server_name  example.com;
             ## send all traffic to the back-end
             location / {
                  proxy_pass        http: //backend ;
                  proxy_redirect    off;
                  proxy_set_header  X-Forwarded-For $remote_addr;
             }
      }
}

下面,我們將在此基礎上進行優化。

緩沖控制

如果禁止緩沖,那么當Nginx一收到后端的反饋就同時傳給客戶端。

nginx 不會從被代理的服務器讀取整個反饋信息。

nginx可從服務器一次接收的最大數據大小由  proxy_buffer_size 控制。

?
1
2
3
proxy_buffering    off;
proxy_buffer_size  128k;
proxy_buffers 100  128k;

緩存和過期控制

上面的配置是將所有請求都轉發給后端應用。為避免靜態請求給后端應用帶來的過大負載,我們可以將nginx配置為緩存那些不變的響應數據。

這就意味着nginx不會向后端轉發那些請求。

下面示例,將 *.html*.gif, 等文件緩存30分鍾。:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
http {
      #
      # The path we'll cache to.
      #
      proxy_cache_path  /tmp/cache  levels=1:2 keys_zone=cache:60m max_size=1G;
}
             ## send all traffic to the back-end
             location / {
                  proxy_pass  http: //backend ;
                  proxy_redirect off;
                  proxy_set_header        X-Forwarded-For $remote_addr;
                  location ~* \.(html|css|jpg|gif|ico|js)$ {
                         proxy_cache          cache;
                         proxy_cache_key      $host$uri$is_args$args;
                         proxy_cache_valid    200 301 302 30m;
                         expires              30m;
                         proxy_pass  http: //backend ;
                  }
             }

這里,我們將請求緩存到 /tmp/cache,並定義了其大小限制為1G。同時只允許緩存有效的返回數據,例如:

?
1
proxy_cache_valid  200 301 302 30m;

所有響應信息的返回代碼不是 "HTTP (200|301|302) OK" 的都不會被緩存。

對於例如workpress的應用,需要處理cookies 和緩存的過期時間,通過只緩存靜態資源來避免其帶來的問題。

驗證

優化配置的效果需要實踐檢驗,建議部署一個監控工具,監控的內容應包括:

Nginx:開源版提供的監控指標,僅有如下7個指標:

Connections,Accepts,Handled,Requests,Reading,Writing,Waiting,

為便於分析統計,在Hyperic中可擴展為10個指標,增加了三個派生指標,每分鍾的接收,請求和處理的數量:

Accepts per Minute,Handled per Minute,Requests per Minute

從操作系統的角度:應包括Nginx進程的CPU使用率,內存占用,整體CPU使用率,交換區使用率等指標。

如果是在虛擬機上運行,還應關注 操作系統的 ST( Steal Time)指標,判斷是否有超賣,過載等現象;

超賣:超賣是指主機商在一台服務器上放了太多的VPS賬戶,如果遇到所有的VPS賬戶同時使用所有的資源,就會出現服務器無法訪問的情況,嚴重時硬件癱瘓 、數據丟失。但超賣很難察覺。有時通過 ST 指標可以看到。

參考資源:

http://tweaked.io/guide/nginx-proxying/

網絡管理軟件hyperic hq監控和管理Nginx

Hyperic 監控 Nginx1.6 配置過程

下載免費開源Hyperic


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM