Nginx
從 Nginx 中的遠端伺服器返回帶有狀態碼的文件
我正在嘗試通過讓 nginx 在響應之前對資源進行回查,將我的 SPA 設置為針對無效資源返回 404。所有這些都是為了避免帶有 200 的無效頁面,從而讓蜘蛛爬取軟 404 頁面。
我想要的行為
Browser Nginx API | -- GET myapp.com/users/12 --> | | | | -- GET myapi:8000/users/12 | | | <----------- 404 -------- | | <-- 404 index.html ------------ | | |
我希望我的配置如下所示
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; location /users/ { # 1. Fetch from myapi:8000 # 2. Return index.html with status from fetched URI } }
我已經研究了一段時間,但我對如何實現這一點有點迷茫。我已經看到了很多簡單的例子
try_files
等等,但似乎沒有什麼適合我的情況,因為似乎大多數例子都是非常簡單的轉發。我怎樣才能實現上述行為?
我設法通過讓我的後端 API 始終響應 index.html 來解決這個問題
Accept: text/html
。我確實嘗試過使用 OpenResty 的 Lua 方式,但它感覺太 hacky 和古怪,而且維護起來太複雜。然後我的配置如下所示:
location / { try_files $uri $uri/ @forward_to_api; } location @forward_to_api { rewrite ^(.*) /api$1 break; proxy_set_header "Accept" "text/html"; proxy_pass http://localhost:8000; # Follow any redirects proxy_intercept_errors on; error_page 301 302 307 = @follow_redirect; } location @follow_redirect { set $moved_location $upstream_http_location; proxy_pass http://localhost:8000$moved_location; }
這會將所有 $uri 重定向到
localhost:8000/api/$uri
並遵循重定向。