Nginx反向代理與動靜分離集羣

一、簡介

       代理服務器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務接受客戶機請求之後,再向主機發出,並接收目的主機返回的數據,存放在代理服務器的硬盤中,再發送給客戶機。

       正向代理,架設在客戶機與目標主機之間,只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。

       反向代理服務器架設在服務器端,通過緩衝經常被請求的頁面來緩解服務器的工作量,將客戶機請求轉發給內部網絡上的目標服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器與目標主機一起對外表現爲一個服務器。

二、集羣配置

  1. 負載均衡(ngx_http_upstream_module)

[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@lb01 conf.d]# vim www.conf

upstream backend {
    server backend1.example.com:12345 weight=5;
    server 127.0.0.1:12345    max_fails=3  fail_timeout=30s;
    server unix:/tmp/backend2;
    server backup1.example.com:12345  backup;
}
標籤參數說明
標籤 說明
server 負載均衡後面節點地址可以是IP或域名
weight 調節服務器的請求分配權重
max_fails 定義最大的失敗次數
fail_timeout 定義失敗之後重發的間隔時間
check 開啓對該服務的健康檢查
backup 熱備份參數
maxconn 指定可併發發送到該服務器的最大併發連接數
fall 指定多少次不成功的健康檢查後,即認爲服務器爲宕機狀態
inter 設置連續兩次檢查的間隔時間,單位毫秒
rise 指定多少次連續成功的檢查後,即認定該服務器處於可用狀

  2. 反向代理(ngx_http_proxy_module)

[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@lb01 conf.d]# vim www.conf

server {
    listen       80;
    server_name  www.southbay.com;
    location / {
       proxy_pass http://backend;
       proxy_set_header Host $host; 
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_next_upstream error timeout http_404 http_502 http_403;
    }
}
參數說明
參數 說明
proxy_set_header 設置反向代理向後端發送的請求頭信息
proxy_buffer_size 設置size用於讀取從代理服務器接收到的響應的第一部分的緩衝區的
proxy_connect_timeout  定義後端節點與代理服務器建立連接的超時時間
proxy_send_timeout 設置將請求傳輸到代理服務器的超時時間
proxy_read_timeout 用於從代理的後端服務器讀取響應時間
proxy_busy_buffers_size 用於設置系統很忙時可以使用proxy_buffers大小,推薦大小proxy_buffers*2
proxy_buffers 設置緩衝區的數量和大小
proxy_temp_file_write_size 指定proxy緩存臨時文件的大小

       在代理向後端服務器發送HTTP請求頭中加入host字段信息後,若後端服務器配置有多個虛擬主機,他就可以識別代理的是那個虛擬主機。這是節點服務器多虛擬主機時的關鍵配置。

proxy_set_header Host $host; 

在反向代理請求後端節點服務器的請求頭中增加獲取的客戶端ip字段信息,然後節點後端可以通過程序或者相關配置接收X-Forwarded-For傳過來的真實用戶IP信息。

proxy_set_header X-Forwarded-For $remote_addr;

  3. 根據用戶設備轉發($http_user_agent

[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@lb01 conf.d]# vim www.conf

location / {
   if ($http_user_agent ~* iphone) {
       proxy_pass http://mobile;
   }
   if ($http_user_agent ~* Chrome) {
       proxy_pass  http://web;
   }
   proxy_pass http://default;
   proxy_set_header Host $host;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_next_upstream error timeout http_404 http_502 http_403;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章