做者:diegehtml
日期:2012-04-17前端
設置方法簡述:在http{}塊定義負載均衡服務器列表,在server{}塊的location下使用nginx
1、反向代理配置web
(一)單個反向代理使用vim
1、設置反向代理配置後端
#ee usr/local/etc/nginx/proxy.conf服務器
server {session
listen 80; app
server_name www.example.com;負載均衡
location / {
proxy_pass http://192.168.1.200:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
2、加載反向代理配置
在http{}塊中的第1個server{}塊
include /usr/local/etc/nginx/proxy.conf;
加載反向代理配置
這裏先在server{}塊中
# vim /usr/local/etc/nginx/nginx.conf
(二)多個反向代理使用
在虛擬站點中使用,不一樣功能指向不一樣後端服務器
http{}塊中的第1個server{}塊加載虛擬站點配置
include vhosts/*.conf;
# vim /usr/local/etc/nginx/vhosts/www.example.com.conf
…
location /static {
proxy_pass http://192.168.1.200:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
…
location /news {
proxy_pass http://192.168.1.220:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
測試好像沒法訪問http://www.example.com/static/
使用rewrite ^(.*) http://192.168.1.200:8080; 則能夠
LOG
192.168.1.1 - - [16/Apr/2012:21:50:44 +0800] "GET /static/ HTTP/1.1" 404 205 "-" "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0"
在http://192.168.1.200:8080下有文件目錄static/index.html後能夠訪問。緣由是前端訪問路徑和後端同樣。
若是代理到http://192.168.1.200:8080根目錄下 如何設置
正確設置:將全部/static的請求rewite到/,而後再使用代理
location /static {
rewrite ^/static/(.*)$ /$1 break;
proxy_pass http://192.168.1.200:8080;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header Host $host;
#proxy_redirect default;
}
朋友介紹在後端也用於和前端同樣的目錄結構,這樣簡單,配置文件也簡單,方便維護,同時節省了rewrite的開銷
例如
location /bbs/ {
proxy_pass http://192.168.1.200:8099/bbs/;
proxy_redirect default ;
}
(三)記錄真實的ip地址
代理補充
若是要後端記錄來源地址的真實IP而不是前端代理的IP.若是後端使用nginx作web能夠在nginx配置中
http {
set_real_ip_from 192.168.1.200;
real_ip_header X-Real-IP;
}
對應代理的配置
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
2、負載均衡配置
負載均衡就是多個站點作一組反向代理
一、 http {}塊中配置
# vim /usr/local/etc/nginx/nginx.conf
http {
…
upstream cluster_server_com {
server 172.17.2.192:80 max_fails=2 fail_timeout=30s;
server 172.17.2.190:80 max_fails=2 fail_timeout=30s;
}
….
}
二、 server{}塊使用前面配置的cluster_server_com,虛擬站點中
# vim /usr/local/etc/nginx/vhosts/www.example.com.conf
server {
…
location / {
proxy_pass http://cluster_server_com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
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;
}
...
}
三、 訪問測試
能夠看到是以此輪詢到後端兩臺服務器
4、nginx的upstream目前支持4種方式的分配
1)、輪詢(默認)
每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。
2)、weight
指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。
2)、ip_hash
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題。
3)、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
4)、url_hash(第三方
upstream cluster_server_com {#定義負載均衡設備的Ip及設備狀態
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
每一個設備的狀態設置爲:
a)
down 表示單前的server暫時不參與負載
b)
weight 默認爲1.weight越大,負載的權重就越大。
c)
max_fails :容許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
d)
fail_timeout:max_fails次失敗後,暫停的時間。
e)
backup: 其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。