Nginx

點擊子目錄 proxy_pass 中的連結返回 404 NGINX

  • September 8, 2020

好的,我會盡力解釋這一點。我已成功設置到伺服器塊(網站 A)/blog/上的子目錄位置,該位置成功在子域伺服器塊(網站 B)example.com上顯示我的部落格,網址為.blog.example.com.au``example.com/blog/

但是,當我點擊首頁上的任何連結example.com/blog/時,當它應該連結到網站 B 上的文章時,它會顯示網站 A 的 404。

期望的行為: 顯示時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 都被反向代理並在同一個 conf 文件中完美地工作:

upstream Website_A {
 server Website_A:8000;
}

upstream Website_B {
   server Website_B:2368;
}

...

使用正確的基本 URL 配置您的後端,以便生成正確的連結。

由於您似乎將 Ghost 用於您的部落格,因此該選項稱為url.

"url": "https://example.com.au/blog/"

當然,將它直接代理給ghost而不是兩次代理它會更有意義。

server {
   server_name example.com.au;

   # ...

   location /blog/ {
       proxy_pass http://Website_B:2368;
   }

}

引用自:https://serverfault.com/questions/1032807