2010年12月20日 星期一

Nginx - Reverse Proxy+Web Cache


Gateway上可以設定Reverse Proxy+Web Cache功能, Reverse Proxy功能, 使用者提出網頁需求, reverse proxy 會平均把request 送給後端的每一台web伺服器處理, 以達成Load Balance平衡負載功能 , Web Cache (類似Squid)功能可以暫存常用到的動/靜態網頁, 加速存取速度.


1. 編譯/安裝Proxy_cache
[root@ src]# tar zxvf pcre-8.10.tar.gz
[root@ pcre-8.10]# ./configure
[root@ pcre-8.10]# make && make install
[root@ pcre-8.10]# cd ../

[root@ src]# tar zxvf ngx_cache_purge-1.0.tar.gz

2. 新增www使用者及群組
[root@ src]# groupadd www
[root@ src]# useradd -g www www

3. 編譯/安裝Nginx 並加入cache module
[root@ src]# tar zxvf nginx-0.8.36.tar.gz

[root@src]# cd nginx-0.8.36
[root@ nginx-0.8.36]# ./configure --prefix=/usr/local/nginx --user=www --group=www --add-module=../ngx_cache_purge-1.0 --with-http_stub_status_module --with-http_ssl_module
[root@nginx-0.8.36]# make && make install
[root@ nginx-0.8.36]# cd ../

4. 建立暫存目錄
設定2cache目錄,proxy_temp_path proxy_cache_path指令設定用
[root@ src]# mkdir -p /data0/cache
[root@ src]# mkdir -p /data0/temp
:該目錄路徑必須在同一磁碟分區,不能誇分區

5. 編輯nginx.conf檔案
編輯nginx.conf檔案, 對副檔名為 gif 、jpgjpegpngbmpswfjs、css、html、shtml、flv 檔案開啟Web cache,其他檔案則不cache.


[root@src]# vi /usr/local/nginx/conf/nginx.conf
內容如下
user  www www;
worker_processes  4;
error_log  logs/error.log  crit;
pidlogs/nginx.pid;
worker_rlimit_nofile 51200;

events {
      use epoll;
      worker_connections  51200;
           }

http {
   includemime.types;
   default_type  application/octet-stream;
   sendfileon;
   #tcp_nopush      on;
   tcp_nodelay on;
   keepalive_timeout  60;

   gzip  on;
   gzip_min_length  1k;
   gzip_buffers     4 16k;
   gzip_http_version 1.1;
   gzip_comp_level 2;
   gzip_typestext/plain application/x-javascript text/css application/xml;
   gzip_vary on;

   server_names_hash_bucket_size  128;
   client_header_buffer_size  32k;
   large_client_header_buffers  4 32k;
   proxy_connect_timeout  60;
   proxy_read_timeout  60;
   proxy_send_timeout  60;
   proxy_buffer_size  16k;
   proxy_buffers  4  64k;
   proxy_busy_buffers_size  128k;
   proxy_temp_file_write_size    128k;

  proxy_temp_path /data0/temp;
  proxy_cache_path /data0/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=8g;


## backend web server  ###
  upstream web_server_pool{
  server  192.168.1.11:80  weight=5   max_fails=2   fail_timeout=30s;
  server  192.168.1.12:80  weight=5   max_fails=2   fail_timeout=30s;
  }


server {
  listen 10.10.10.1:80;    //設定外部IP及Port
  server_name  _*;
  location / {
  proxy_next_upstream http_502 http_504 error timeout invalid_header;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_pass   http://web_server_pool/;
   }

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|flv|html|shtml)$    //cache gif,jpg,...檔案
 {
   proxy_cache cache_one;
   proxy_cache_valid 200 304 12h;
   proxy_cache_valid 301 302 5m;
   proxy_cache_valid any 5m;
   proxy_cache_key $host$uri$is_args$args;


   proxy_next_upstream http_502 http_504 error timeout invalid_header;
   proxy_set_header Host $host;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_pass   http://web_server_pool/;
  }

location ~ /purge(/.*)
  {
    allow   127.0.0.1;
    allow   192.168.1.0/24;
    deny    all;
    proxy_cache_purge  cache_one$host$1$is_args$args;
  }
    access_log      off;

# redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }

   error_page  404  /404.html;
   location = /404.html {
   internal;
      }
  }
}

6. 檢查Nginx語法
[root@src]# /usr/local/nginx/sbin/nginx -t
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

7. 啟動Nginx
[root@src]# /usr/local/nginx/sbin/nginx

8. 開機自動執行Nginx
#vi /etc/rc.local
內容如下
 ulimit -SHn 65535
/usr/local/nginx/sbin/nginx

OK! 大功告成

沒有留言:

張貼留言