Nginx

Nginx 代理通行證 - 從上游站點返回狀態程式碼

  • January 18, 2019

如何從http://127.0.0.1:8080/返回 HTTP 狀態碼

例子:

等等任何其他狀態碼,請幫忙???用這個花了幾個小時……

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/;
}

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