192.168.55.115為主伺服器
192.168.55.185為從伺服器
先需要將發送到伺服器端的請求進行分流,具體要求如下
要求/index.php/*的請求訪問主伺服器
/api.php/1/files/*的請求訪問主伺服器
/api.php/1/files_put/*的請求訪問主伺服器
/api.php/1/thumbnails/*的請求訪問主伺服器
/statics/thumbnails/*的請求訪問主伺服器
其它的都訪問從伺服器
主伺服器192.168.55.115的server配置
upstream follower { server 192.168.55.185:80 max_fails=5 fail_timeout=360s;}server { listen 80; server_name 192.168.55.115; index index.html index.htm index.php; root /www/web/sign_name; client_max_body_size 10240m; location ~ ^/index\.php\w*|/api\.php/\d+/(\bfiles\b|\bfiles_put\b|\bthumbnails\b)/\w* { set $script $uri; set $path_info ""; if ($uri ~ "^(.+.php)(/.+)") { set $script $1; set $path_info $2; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/web/sign_name$fastcgi_script_name; include fastcgi_params; fastcgi_param SCRIPT_NAME $script; fastcgi_param PATH_INFO $path_info; } location ~ ^/statics/thumbnails/\w* { } location / { proxy_pass http://follower; proxy_set_header Host $http_host; proxy_next_upstream error timeout invalid_header http_500; proxy_connect_timeout 360s; #rewrite ^(.*?)api.php/(.*)$ $1api.php?$2; #rewrite ^(.*?)index.php/(.*)$ $1index.php?$2; }}
其中
set $script $uri; set $path_info ""; if ($uri ~ "^(.+.php)(/.+)") { set $script $1; set $path_info $2; }
的設定是為了配置php的$_Server[''path_info"]擷取了全路徑的問題, 具體請參考 這裡
從伺服器192.168.55.185的server配置
server { listen 80; server_name 192.168.55.185; index index.html index.htm index.php; root /www/web/sign_name; client_max_body_size 10240m; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/web/sign_name$fastcgi_script_name; include fastcgi_params; } location / { rewrite ^(.*?)api.php/(.*)$ $1api.php?$2; rewrite ^(.*?)index.php/(.*)$ $1index.php?$2; }}