单击子目录 proxy_pass 内的链接会返回 404 NGINX

单击子目录 proxy_pass 内的链接会返回 404 NGINX

/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/articleexample.com/blog/article

实际行为: 显示404时example.com/blog/article链接到example.com/articleexample.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;
    }

}

相关内容