使用Nginx Proxy Manager反向代理Docker部署的WordPress后静态资源加载异常及配置异常求助
嘿,我来帮你捋捋这个问题——你刚好踩了反向代理WordPress的两个常见坑:混合内容错误,以及自定义Nginx配置时不小心覆盖了默认代理规则。咱们一步步来解决:
为什么加了location /配置后会显示OpenResty欢迎页?
你之前在NPM的高级选项里写了整个location /块,这直接覆盖了Nginx Proxy Manager自动生成的、指向WordPress容器的代理规则。没有了正确的代理目标,Nginx就会返回默认的OpenResty欢迎页面,这就是为啥你看不到WordPress的原因。
正确解决混合内容问题的步骤
混合内容的根源是:WordPress容器本身只提供HTTP服务,它不知道外部用户是通过HTTPS访问的,所以生成的静态资源(JS/CSS/图片)链接都是HTTP,浏览器就会拦截这些不安全的请求。咱们需要做两件事:
1. 修正NPM的自定义配置
不要重写整个location块,只需要在高级选项里添加额外的请求头,让WordPress识别外部的访问协议。把之前的配置删掉,替换成:
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr;
这两行的作用是告诉WordPress:用户是通过$scheme(也就是HTTPS)访问的,同时传递真实的客户端IP。NPM的默认代理规则会保留,不会再出现欢迎页的问题。
2. 让WordPress强制使用HTTPS
光靠NPM的头还不够,咱们需要在WordPress的配置里确认它识别到HTTPS。进入WordPress容器,找到wp-config.php文件(通常在/var/www/html目录下),添加以下代码:
define('FORCE_SSL_ADMIN', true); // 识别反向代理的HTTPS协议 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }
这段代码会强制后台使用HTTPS,同时让WordPress根据NPM传递的X-Forwarded-Proto头,生成HTTPS的静态资源链接,彻底解决混合内容问题。
最后检查一下
- 确认NPM的代理主机设置里,Forward Hostname是开启状态
- 目标地址要正确指向WordPress容器的IP或容器名(比如用Docker容器名
wordpress加上端口80) - 重启Nginx Proxy Manager和WordPress容器,让配置生效
这样操作后,应该就能正常访问WordPress,静态资源也不会再出现混合内容的错误了。
备注:内容来源于stack exchange,提问作者Otaku

