標籤:style http 使用 os io 檔案 for art
轉 : http://www.jbxue.com/article/7923.html
介紹一個nginx、mysql、php-fpm環境下配置負載平衡的例子,有需要的朋友,可以參考下。
系統內容如下:
前端Nginx:192.168.93.137
後端web1:192.168.0.11
後端web2:192.168.0.12
1、前端nginx配置:
複製代碼程式碼範例:
http {
……
client_max_body_size 300m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
upstream www.jbxue.com {
#server 192.168.93.137:80;
server 192.168.0.11:80;
server 192.168.0.12:80;
}
upstream www.jbxue007.com {
#server 192.168.93.137:80;
server 192.168.0.11:80;
server 192.168.0.12:80;
}
server
{
listen 80;
server_name www.jbxue.com;
location / {
proxy_pass http://www.jbxue.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
log_format jbxue ‘$remote_addr - $remote_user [$time_local] $request ‘
‘"$status" $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
access_log /home/logs/www.jbxue.log jbxue;
}
server
{
listen 80;
server_name www.jbxue007.com;
location / {
proxy_pass http://www.jbxue007.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
log_format jbxue007 ‘$remote_addr - $remote_user [$time_local] $request ‘
‘"$status" $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
access_log /home/logs/www.jbxue.log jbxue007;
}
}
通過upstream 名字 {}定義後端web的負載機器,然後在虛擬機器主機中通過 proxy_pass http://名字; 來使用upstream,再自訂一下日誌格式,以擷取使用者的IP。
2、後端web配置:
複製代碼程式碼範例:
server
{
listen 80;
server_name www.jbxue.com;
index index.html index.php;
root /home/www/www.jbxue.com;
access_log /home/logs/access_www.jbxue.com.log;
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
error_page 500 502 503 504 404 403 http://www.jbxue.com;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 6h;
}
location ~ .*\.(log|txt)$
{
deny all;
}
location ~ .*\.(php)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
}
server
{
listen 80;
server_name www.jbxue007.com;
index index.html index.php;
root /home/www/www.jbxue007.com;
access_log /home/logs/access_www.jbxue007.com.log;
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
error_page 500 502 503 504 404 403 http://www.jbxue007.com;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 6h;
}
location ~ .*\.(log|txt)$
{
deny all;
}
location ~ .*\.(php)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
}
附,Nginx負載的五種模式,即upstream的模式。
1、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2、weight
指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
複製代碼程式碼範例:upstream www.jbxue.com {
server 192.168.0.11 weight=10;
server 192.168.0.12 weight=10;
}
3、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
複製代碼程式碼範例:upstream www.jbxue.com {
ip_hash;
server 192.168.0.11:80;
server 192.168.0.12:80;
}
4、fair(第三方)
按後端伺服器的回應時間來分配請求,回應時間短的優先分配。
5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為緩衝時比較有效。
複製代碼程式碼範例:upstream www.jbxue.com {
server 192.168.0.11:80;
server 192.168.0.12:80;
hash $request_uri;
hash_method crc32;
}
用得比較多得應該是第3、5這兩種。
後端的web檔案同步可以選擇nfs、rsync等。
負載平衡 之 nginx+多台php-fpm
https://code.google.com/p/sna/wiki/NginxWithPHPFPM
http://hyf.zjmp.com/article.asp?id=683