![单击子目录 proxy_pass 内的链接会返回 404 NGINX](https://linux22.com/image/757119/%E5%8D%95%E5%87%BB%E5%AD%90%E7%9B%AE%E5%BD%95%20proxy_pass%20%E5%86%85%E7%9A%84%E9%93%BE%E6%8E%A5%E4%BC%9A%E8%BF%94%E5%9B%9E%20404%20NGINX.png)
/blog/
好的,我会尽力解释这一点。我已成功在服务器块(网站 A)上设置了一个子目录位置,example.com
该位置成功在子域服务器块(网站 B)上显示我的博客blog.example.com.au
,网址为example.com/blog/
。
然而,当我点击主页上的任何链接时example.com/blog/
,它都会显示网站 A 的 404 错误,而它应该链接到网站 B 上的文章。
期望的行为: 显示时example.com/blog/article
链接到blog.example.com/article
example.com/blog/article
实际行为: 显示404时example.com/blog/article
链接到example.com/article
example.com/article
我想确保/blog/
出现在通过位置块传递给网站 B 的每个请求上/blog/
。
这是我当前为网站 A 提供的服务器块,用于在网站 B 上提供博客服务:
server {
server_name example.com;
...
location ^~ /blog/ {
proxy_pass https://blog.example.com.au/;
proxy_set_header Host blog.example.com.au;
}
# This is needed to correctly serve static files for Website B and not have same 404 behaviour as explained above
location /assets/ {
proxy_pass https://blog.example.com.au/assets/;
}
# This is needed to correctly serve static files for Website B and not have same 404 behaviour as explained above
location /content/ {
proxy_pass http://blog.example.com.au/content/;
}
}
如果有帮助的话,网站 A 和 B 都是反向代理,并且在同一个配置文件中完美地独立运行:
upstream Website_A {
server Website_A:8000;
}
upstream Website_B {
server Website_B:2368;
}
...
答案1
使用正确的基本 URL 配置您的后端,以便它生成正确的链接。
由于您似乎在博客上使用 Ghost,该选项称为url
。
"url": "https://example.com.au/blog/"
当然,将其直接代理到 ghost 比代理两次更有意义。
server {
server_name example.com.au;
# ...
location /blog/ {
proxy_pass http://Website_B:2368;
}
}