Nginx proxy_pass配置后WordPress后台URL缺失/blog报404求助
解决WordPress反向代理后URL丢失/blog路径的问题
这个问题的核心是WordPress不知道它对外的访问路径是example.com/blog,所以生成的后台链接、菜单链接都会跳过/blog前缀,直接指向后端地址,导致404错误。我们需要从WordPress内部配置和Nginx代理规则两方面调整:
1. 修正WordPress的站点URL配置
首先要让WordPress明确它的对外访问地址,推荐通过wp-config.php设置(避免后续被后台设置覆盖):
打开你的WordPress站点根目录下的wp-config.php文件,在/* That's all, stop editing! Happy publishing. */之前添加以下代码:
define('WP_HOME', 'https://example.com/blog'); define('WP_SITEURL', 'http://wp.lunato');
WP_HOME:用户实际访问的博客前端地址(带/blog前缀)WP_SITEURL:WordPress核心文件所在的后端真实地址(对应你Nginx配置里的proxy_pass目标)
如果能临时直接访问后端后台(比如wp-example.site.cloud/wp-admin),也可以通过后台设置:进入设置 -> 常规,修改:
- 站点地址(URL):
https://example.com/blog - WordPress地址(URL):
http://wp.lunato
设置完成后,一定要进入设置 -> 固定链接,直接点击「保存更改」(无需修改规则),这会刷新WordPress的重写规则,确保生成的URL自动带上/blog前缀。
2. 优化Nginx代理配置
你的现有配置能处理首页,但需要补充请求头和重定向修正,让WordPress识别真实请求信息。修改后的配置如下:
location ^~ /blog { rewrite /blog/(.*) /$1 break; proxy_http_version 1.1; # 传递真实的请求信息给后端WordPress proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Prefix /blog; proxy_request_buffering off; proxy_pass http://wp.lunato; server_name_in_redirect off; # 修正后端返回的重定向链接,强制带上/blog前缀 proxy_redirect http://wp.lunato/ https://example.com/blog/; }
关键优化点:
- 添加
X-Forwarded-*系列请求头,让WordPress获取到前端的真实协议、主机和路径前缀 - 新增
proxy_redirect规则,把后端WordPress返回的重定向(比如登录跳转)从后端地址修正为带/blog的前端地址
3. 验证效果
完成设置后:
- 重启Nginx服务:
sudo systemctl restart nginx - 访问
https://example.com/blog/wp-admin,检查后台所有链接是否都带/blog前缀 - 点击博客菜单的页面,确认URL包含
/blog且能正常加载
内容的提问来源于stack exchange,提问作者Vahid Marali
相关产品推荐
相关产品推荐

