WordPress位于代理后的问题及解决办法
一些特殊情形下,例如部署了 V2ray流量伪装 和 trojan 的服务器上,WordPress网站无法直接监听443端口,只能通过代理转发。这是WordPress位于代理后的情形,通常会遇到资源不能加载、循环重定向的问题。经过一番研究,本文给出几种解决办法。
WordPress通过Nginx反代
假设WordPress以http方式监听服务器上的8080端口,Nginx监听443端口,WordPress网站要求以 https://域名 的形式访问,Nginx配置里直接 proxy_pass
会遇到两个问题:
- WordPress网站的css、js、图片等资源无法加载,浏览器控制台报“mixed content”的错误。这是因为网站以https形式访问,而WordPress页面的资源是http形式,因此浏览器拒绝加载;
- 登录WordPress管理后台,出现循环重定向,导致登录页和管理后台都无法打开。
经过分析,问题出现的原因分别为:
- WordPress不知道网站通过https访问,因此页面中输出的链接是http形式;
- WordPress获取到的信息是端口为8080,而站点设置的端口是443,因此循环重定向。
知道了原因,解决办法就有了。具体操作是:Nginx转发时,告诉后端通信协议是https;告诉后端访问端口是443。
下面给出Nginx反向代理的关键配置:
location / {
# 一些其他设置
# 关键设置
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
# 转发到后端
proxy_pass http://localhost:8080;
}
WordPress位于trojan后面
如果参考 trojan伪装建站 的操作,会遇到与上述情形不同的问题:trojan转发基于tcp实现,不能设置头部,甚至不能告诉后端用户的真实ip。
前端给不了后端想要的东西,只能自己解决。分析上面的问题和原理,其实只要让WordPress知道用https和443端口就可以了。所以一个可行、简单的办法是在WordPress中直接设置这两个值。操作为:编辑WordPress的 index.php
或 wp-config.php
文件,在文件开头放入如下两句话:
$_SERVER["HTTPS"] = "on"; $_SERVER["SERVER_PORT"] = 443;
index.php
可能在升级时被覆盖,因此建议放在 wp-config.php
文件里。
如果8080端口的WordPress用的Nginx,也可以在Nginx里设置。即转发到后端php-fpm时设置fastcgi变量:
fastcgi_param HTTPS "on"; fastcgi_param SERVER_PORT 443;
修改好后重新加载Nginx:systemctl reload nginx
。
参考
- The trick to get your wordpress behind a reverse proxy
原文链接:https://www.qiquanji.com/post/5023.html
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。