一、簡介
代理服務器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務接受客戶機請求之後,再向主機發出,並接收目的主機返回的數據,存放在代理服務器的硬盤中,再發送給客戶機。
正向代理,架設在客戶機與目標主機之間,只用於代理內部網絡對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;
}