Nginx搭建反向代理負載均衡和web快取伺服器

luckie_li發表於2018-07-25

       網際網路中當web伺服器無法承受大量使用者訪問時,可以採用負載均衡加快取技術來降低單臺伺服器和資料庫的壓力,常用的開源軟體有nginx、varnish、squid等。而相對來說nginx具有輕量級、多核cpu利用、安裝配置簡單等優點,個人更喜歡用nginx。centos環境下的安裝配置。

1、安裝環境

安裝nginx需要的環境,pcre(作用rewrite)、zlib(作用壓縮)、ssl(支援https等),這個可以yum安裝,也可以自己下載原始碼編譯安裝。

yum -y install zlib;

yum -y install pcre  pcre-devel;

yum -y install openssl openssl-devel;

 

  1. 安裝ngx cache purge快取外掛

下載ngx_cache_purge-2.3版本為例

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

解壓到某個目錄tar zxvf ngx_cache_purge-2.3.tar.gz

 

  1. 下載安裝nginx

下載nginx1.13.12版本為例

wget http://nginx.org/download/nginx-1.13.12.tar.gz

tar -zxvf nginx-1.13.12.tar.gz

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/步驟二中解壓的路徑/ngx_cache_purge-2.3 --with-http_proxy_module

解釋: --prefix 為安裝路徑,--with-為需要安裝的模組,具體可以執行 ./configure --help 檢視有效模組,--add-module=/步驟二中解壓的路徑/ngx_cache_purge-2.3

make && make install;

 

4、執行nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

 

5、配置nginx.conf

vim /usr/local/nginx/conf/nginx.conf

示例:

http {

    include       mime.types;

    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

    #                  '$status $body_bytes_sent "$http_referer" '

    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    #keepalive_timeout  0;

    keepalive_timeout  65;

    #gzip  on;

    ##cache begin##

    proxy_buffering on;

    proxy_cache_valid any 1m;

    proxy_cache_path /var/nginxcache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=10m;

    proxy_temp_path /var/nginxcache;

    proxy_buffer_size 4k;

    proxy_buffers 100 8k;

    ##cache end##

    ## Apache backend servers ##

    upstream backendserver{

      server 192.168.0.101:80;

  server 192.168.0.102:8080;

}

    ##nginx local server begin##

      listen 80;

      server_name myserver;

      index index.html index.htm;

      root /var/www/html;

      location /

      {

          proxy_next_upstream http_502 http_504 error timeout invalid_header;

          proxy_cache my-cache;

          proxy_cache_valid 200 304 1m;

          proxy_cache_valid any 2m ;

          proxy_cache_key $host$uri$is_args$args;

          proxy_set_header Host $host;

          proxy_set_header X-Forwarded-For $remote_addr;

          proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;

          proxy_pass http://backendserver1;

          expires 1m;

      }

      location ~ /purge(/.*)

      {

          auth_basic "TDT  Center  CACHE  Center";

          auth_basic_user_file /tmp/htpasswd;

          allow 127.0.0.1;

          deny all;

      }

##nginx local server end##

}

 

快取相關配置說明:

proxy_cache my-cache;指定使用哪個共享快取空間,my-cache與proxy_cache_path中name對應。

proxy_cache_key:設定快取使用的key,預設為完整的訪問URL,根據實際情況設定快取key。

proxy_cache_valid 200 304 1m:為不同的響應狀態碼設定快取時間。如果是any為全部。

max_size指的是快取檔案可以佔用的最大空間。

Inactive:快取時間,優先順序大於proxy_cache_valid,為避免proxy_cache_valid不起作用,應將Inactive設定大於proxy_cache_valid。

expires 1m;用在發給客戶端的響應中,新增"Expires"頭,可重定義後端html的head頭"Expires"。

反向代理負載均衡相關配置說明:

proxy_pass http://backendserver;指定反向代理到後端伺服器。

upstream backendserver{

      server 192.168.0.101:80;

  server 192.168.0.102:8080;

}

nginx 提供輪詢(round robin)、使用者 IP 雜湊(client IP)和指定權重 3 種方式預設為輪詢作為負載均衡策略雜湊方式如下:

upstream backendserver{

ip_hash;

      server 192.168.0.101:80;

  server 192.168.0.102:8080;

}

權重方式如下:

upstream backendserver{

      server 192.168.0.101:80 weight=1;

  server 192.168.0.102:8080 weight=9;

}

proxy_set_header Host $host;重新定義或者新增發往後端伺服器的請求頭

proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;避免後端伺服器head頭設定了no-cache、no-store,造成無法快取。

其他引數設定,諸如快取buffer等可以根據實際情況設定

proxy_connect_timeout 90;

proxy_send_timeout 90;

proxy_read_timeout 90;

proxy_buffer_size 4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

       採用nginx架設一臺快取加反向代理到後臺多臺伺服器可以滿足很多情況下的併發訪問壓力問題,特別是web應用中有資料庫訪問的,如果對資料訪問時效性要求不高時,應用快取後對資料庫壓力可以大大降低。

相關文章