宝塔面板反向代理二级目录失败的问题
0 前言
这两天弄网站后端服务,需要使用nginx反向代理。我将后端服务放在了二级目录/api/,本地测试一切正常,部署到服务器却始终返回404页面。查了很多博客,问了好几种AI,都没有解决这个问题。今天上午终于找到了问题所在,在此记录一下。
1 反向代理
- 基本设置:使用nginx反向代理
/api/
时,一般代码设置成如下即可
location ^~ /api/ {
proxy_pass http://localhost:8000/;
proxy_set_header Host localhost;
}
基本每个AI都能够给出类似或者更加复杂合理的代码。这段代码的含义是监听地址下的/api/xxx
转发到http://localhost:8000/xxx
。需要注意每一个/
都不可以省略;第二行代码Host
后面的部分与proxy_pass
中地址一致即可。
- 宝塔面板:提供了可视化设置选项,点击【网站】-【设置】-【反向代理】便可找到。勾选高级功能,设置根目录为
/api/
,目标网址为http://localhost:8000
,发送地址为localhost
即可
2 问题所在
- 正常来说,按照上面的设置,反向代理就已经成功了。但倘若在宝塔面板中启用了伪静态设置,对于typecho来说是下面这个样子
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
- 那么你就会发现,无论你怎么设置二级目录的反向代理,都无法正常访问,只会返回404
- 可能的原因:
rewrite
部分没有支持二级目录,但我不懂PHP
,不会修改;有能力的人可以自行尝试
3 解决问题
- 关闭宝塔面板提供的伪静态设置,即删除第2节中的那段代码即可
- 但伪静态设置对网站的SEO等方面具有很重要的价值,一种替代方案为在配置文件
root index.php xxx
下面添加下面这一行代码
try_files $uri $uri/ /index.php?$args;
后记
这个问题,花费了我将近十个小时,服务器都重装了两次。网上找了很久都没有找到真正说到这个问题的点。倒是提到了很多其他可能引起这个问题的原因:1)nginx配置错误,主要是/
的问题;2)后端服务未启动。
版权属于:Washy
发表时间:2025-06-17 16:58:00
评论区