疑难杂症:nginx反向代理中无限重定向的解决办法

感觉碰到这个问题好几次了,原因都一定相同。
造成无限重定向这一问题的诱因有挺多种,就再记录下一种。

运行环境 Runtime environment

1
2
3
操作系统 : Ubuntu18.04  
Python: 3.6.9
nginx:1.16.1

症状

我的这个网站使用了多个域名:

yiwuwuyi.net(主域名)
yiwuwuyi.cn(主域名)
yiwuwuyi.uk
yiwuwuyi.org
还有一个旧域名:proj.org.cn

两个主域名中,yiwuwuyi.net主要服务国外用户、yiwuwuyi.cn主要服务国内用户。而yiwuwuyi.cn是通过反向代理yiwuwuyi.net来提供服务的,再在前面使用腾讯CDN进行加速,减少带宽压力。

在配置完成后我发现一个问题,我网站中有一些诸如留言框、搜索表单等交互性的功能,在输入内容并提交后可以到达后端服务器,但后端返还的内容却显示为空白页。通过浏览器控制台检查,发现腾讯CDN返还了一个他们自定义的响应码。

在经过一系列测试后,我可以肯定我的主站(yiwuwuyi.net)是正常的,所以问题出现在国内主站(yiwuwuyi.cn)中。再次使用浏览器的控制台检查,发现提交表单后,后端服务器返还的“Location”值不正确而导致无限重定向。

原因

我的站点是强制使用HTTPS的,DNS根据来源IP区分国内然后分别返还设定的IP。

当用户通过yiwuwuyi.cn给我留言时,留言通过:

https://yiwuwuyi.cn/wp-comments-post.php

传送到我的后端,然后后端跳转到:

http://yiwuwuyi.net/wp-comments-post.php

并附带响应头:

Location: http://yiwuwuyi.net/2017/01/... …

就是因为这个响应头,导致了无限重定向。因为我的网站强制使用HTTPS,那么当后端跳转到http://yiwuwuyi.net时,服务器会将其重定向到https://yiwuwuyi.cn。然而到这里并没有完结,因为链接变成了:

http://yiwuwuyi.cn/wp-comments-post.php

当用户被重定向到上面这个连接时,因为时.php的动态文件,所以要请求后端,然而后端响应的内容和第一次响应的一样。因此再一次地进行上面的重定向过程。由此陷入无限循环。

解决

问题复杂,但也需要花点时间才能理解,但解决办法却很简单。

我只需要在我的反向代理服务器中添加一下两行即可:

proxy_redirect http://yiwuwuyi.net https://yiwuwuyi.cn;

proxy_redirect https://yiwuwuyi.net https://yiwuwuyi.cn;

以上两行内容的意思是将后端的响应头中Location字段进行替换:

http://yiwuwuyi.net 替换为 https://yiwuwuyi.cn;

https://yiwuwuyi.net 替换为 https://yiwuwuyi.cn;

总结

一切又再次恢复正常,跳转和链接都工作正常,这样还能减少不必要的跳转。

这是在服务器上解决问题,如果依然出现,那就要检查一下是否是在NS上出了问题。

×

也就放着玩的

扫码支持
扫码打赏,其实感觉也没人会给的。。

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 运行环境 Runtime environment
  • 症状
  • 原因
  • 解决
  • 总结
  • ,