Nginx
Nginx 代理通行證 - 從上游站點返回狀態程式碼
如何從http://127.0.0.1:8080/返回 HTTP 狀態碼
例子:
- http://127.0.0.1:8080/api/example返回 500 然後在訪問 ttp://127.0.0.1/api/example 時它也應該返回 500,
等等任何其他狀態碼,請幫忙???用這個花了幾個小時……
pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; server { listen 80; server_name 127.0.0.1; location / { proxy_pass http://127.0.0.1:8888; proxy_http_version 1.1; proxy_pass_request_headers on; gzip_static on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; proxy_set_header Host $host; proxy_set_header Status $status; } location /api/ { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_pass_request_headers on; gzip_static on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; proxy_set_header Host $host; proxy_set_header Status $status; } } }
看來您在這裡有 3 個主機:埠組合:
127.0.0.1:80
或者簡單地說127.0.0.1
- 哪個 nginx 正在服務127.0.0.1:8888
- 第一個帶有端點的應用伺服器/
127.0.0.1:8080
- 帶有端點的第二個應用伺服器/api/
http://127.0.0.1:8080/api/example返回 500 然後在訪問 ttp://127.0.0.1/api/example 時它也應該返回 500,
我不太確定你在這裡的意思。
如果您訪問的是前一個 URL,那麼您將直接連接到第二個應用伺服器,並收到 500 響應。
如果您點擊後一個 URL,那麼您將連接到 nginx,它將請求代理到第二個應用伺服器,並且應該返回相同的響應。
當請求命中 api 呼叫時,將各種 STATUS_CODE 傳遞給瀏覽器我返回一個 json 對象,例如,如果我想說該請求需要通過 cookie 提供的身份驗證令牌,然後我將發送一個帶有消息的 json 對象和403,等等……
這聽起來像是應該在應用伺服器(無論是 Flask、Node.JS 還是其他)上而不是在 nginx 級別上實現的功能。nginx 確實具有返回狀態程式碼的能力,但這將在靜態位置塊中完成(例如,在未找到靜態文件的情況下返回 404)。
如果您的應用伺服器返回狀態程式碼,則應將其傳遞回瀏覽器。 除非你說那是沒有發生的事情。
也許稍微編輯位置塊。這是我正在使用的,它也適用於 cookie。請注意行尾的斜杠,
proxy_pass
因為這在過去讓我感到困惑:location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://localhost:8888/; }