nginx反向代理服務器+負載均衡
用nginx做反向代理和負載均衡非常簡單,
支持兩個用法 1個proxy, 1個upstream,分別用來做反向代理,和負載均衡
以反向代理為例, nginx不自己處理php的相關請求,而是把php的相關請求轉發給apache來處理.
proxy反向代理
server {
listen80;#監聽端口
server_name localohst;#監聽域名
location /? {
root /var/www/a.com;#根目錄定位
index index.php;
}
location ~ \.php {
#將客戶IP地址傳遞給代理服務器
proxy_set_header X-Forwarded-For$remote_addr;
proxy_pass http://127.0.0.1:8080;
#如果是PHP 則轉發給apache來處理
}
}
upstream負載均衡
http{
#1. 在http節點下,添加upstream節點。
upstream imgserver{
server192.168.1.200weight=1max_fails=2fail_timeout=3;
server192.168.1.201weight=1max_fails=2fail_timeout=3;
}
server{
listen80;#監聽端口
server_name localohst;#監聽域名
location /? {
root /var/www/a.com;
#根目錄定位
indexindex.php;
}
location ~ \.php {
proxy_pass http://127.0.0.1:8080;
#如果是PHP 則轉發給apache來處理 即反向代理
}
location ~* \.(jpg|jpeg|gif|png) {
#將客戶IP地址傳遞給代理服務器proxy_set_header X-Forwarded-For $remote_addr;
#2.將server節點下的location節點中的proxy_pass配置為:http:// + upstream名稱,即“http://imgserver”.proxy_pass http://imgserver;#如果是PHP 則轉發給apache來處理
}
}
}
3.
現在負載均衡初步完成了。upstream按照輪詢(默認)方式進行負載,每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。雖然這種方式簡便、成本低廉。但缺點是:可靠性低和負載分配不均衡。適用于圖片服務器集群和純靜態頁面服務器集群。
除此之外,upstream還有其它的分配策略,分別如下:
weight(權重)
指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。如下所示,10.0.0.88的訪問比率要比10.0.0.77的訪問比率高一倍。
upstream linuxidc{
server10.0.0.77weight=5;
server10.0.0.88weight=10;
}
max_fails(允許請求失敗次數)
允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤.
upstream linuxidc{server10.0.0.77max_fails=2;server10.0.0.88max_fails=3;}
fail_timeout(失敗后,暫停的時間)
max_fails次失敗后,暫停的時間。
upstream linuxidc{
server10.0.0.77max_fails=2fail_timeout=1;
server10.0.0.88max_fails=3fail_timeout=3;}
down(不參與負載)
表示當前的server暫時不參與負載.
upstream linuxidc{
server 10.0.0.77 down;
}
backup(備用服務器)
其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
upstream linuxidc{
server10.0.0.77down;
server10.0.0.88backup;
}
ip_hash(訪問ip)
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
upstream favresin{? ? ?
ip_hash;
server10.0.0.10:8080;
server10.0.0.11:8080;
}
fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優先分配。與weight分配策略類似。
upstream favresin{
server10.0.0.10:8080;
server10.0.0.11:8080;? ? ?
fair;
}
url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
注意:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash算法。
upstream resinserver{? ? ?
server10.0.0.10:7777;? ??
server10.0.0.11:8888;
hash$request_uri;
hash_method crc32;
}
upstream還可以為每個設備設置狀態值,這些狀態值的含義分別如下:
down 表示當前的server暫時不參與負載.
weight 默認為1.weight越大,負載的權重就越大。
max_fails :允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤.
fail_timeout : max_fails次失敗后,暫停的時間。
backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
upstream bakend{
#定義負載均衡設備的Ip及設備狀態ip_hash;
server10.0.0.11:9090down;
server10.0.0.11:8080weight=2;
server10.0.0.11:6060;
server10.0.0.11:7070backup;
}