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;
}
}
其中
的设置是为了配置php的$_Server[''path_info"]获取了全路径的问题, 具体请参考 这里set $script $uri; set $path_info ""; if ($uri ~ "^(.+.php)(/.+)") { set $script $1; set $path_info $2; }
从服务器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; } }