服务器配置是前端用Nginx,后端用">Apache解析PHP。
从老版本的Nginx升级到新版本(>1.0)以后,发现Wordpress建立的站点都出现无限循环重定向问题。Google搜索,发现很多人遇到这个问题,并不是单纯Wordpress,Drupal, PHPCake等框架也都遇到同样的问题。
wordpress的解决方案是 安装禁止重定向的插件就可以了,但是缺陷是,这样会不利于SEO。并且这个解决方案不是对各个框架的通用解决方案,如果不搞清楚问题的原因,其他网站遇到同样的问题怎么办?可惜经过搜索,遇到这个问题的讨论都没有揭露最终的原因。还是决定自己跟踪Wordpress的源代码,看看问题究竟出在哪里。 为什么老版本的Nginx没有问题,新版本的就出现了这个问题?
跟踪wp-includes/canonical.php的代码,会发现,当使用新版本Nginx的时候,访问网站主页http://www.ithov.com/的时候,在Apache这端收到的请求是 http://www.ithov.com/index.php。而当使用老版本Nginx的时候,Apache端收到的请求是 http://www.ithov.com/。也就是说,新版本的Nginx在收到 http://www.ithov.com/请求以后,发送给后台的Apache之前,在后面自动追加了 index.php,导致与原来的请求URL不同,所以造成很多web框架重定向。
解决方案是:
在配置Nginx服务器的时候,注意单独配置location = / 这一项。
server {
listen 80;
server_name ithov.com, www.ithov.com;
//!!! 注意这里,重点配置这里的代理规则
location = / {
proxy_pass http://127.0.0.1:81/; // !!! 这一这里,最后面有个/不能省略
include /etc/nginx/proxy.conf;
}
location ~ \.php$ {
proxy_pass http://127.0.0.1:81; //!!! 这里,最后面没有/
include /etc/nginx/proxy.conf;
}
…..
}