发现我们设置了反向代理没有起作用,最后发现原来是伪静态惹得祸
解决nginx添加反向代理代码不生效-与原rewrite伪静态规则冲突了
以thinkphp官方给的伪静态为例
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
仔细研究发现发现问题原因是rewrite伪静态规则优先级高于反向代理并且某些网站程序的伪静态规则,直接拦截了所有匹配导致。如 typecho,thinkphp,zblog,wordpress 等主流建站程序!
解决办法就是,给伪静态规则加上一个判断条件,把反向代理目录排除。
正确的解决方法是
加入我想过滤掉msg
这个文件目录,可以这样写。
注意^(.)部分,把 ^(.) 改成 ^/(?!msg)(.*) ,其中 bz改成自己的反代目录,如有多个用|分开: ^/(?!msg|app)(.)
修改后的代码就变成以下:
if (!-e $request_filename) {
rewrite ^/(?!msg)(.*)$ /index.php$1 last;
}
或者在伪静态的时候把反向代理也加上去
location ~* (runtime|application)/{
return 403;
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
location /notice {
proxy_pass http://127.0.0.1:20002/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /msg {
proxy_pass http://127.0.0.1:20003/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}