Nginx 作為反向Proxy 的優化要點

jopen 9年前發布 | 13K 次閱讀 Nginx Web服務器

常用優化要點

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

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

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

    $ grep ^proces /proc/cpuinfo | wc -l
    2

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

    # 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/ 私有服務器:

    # 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 控制。

    proxy_buffering    off;
    proxy_buffer_size  128k;
    proxy_buffers 100  128k;

    緩存和過期控制

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

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

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

    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。同時只允許緩存有效的返回數據,例如:

    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 作為反向Proxy 的優化要點

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

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

    參考資源:

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

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

    Hyperic 監控 Nginx1.6 配置過程

    下載免費開源Hyperic

    來自:http://my.oschina.net/hyperichq/blog/405421

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!