Nginx 代理传递 - 返回上游站点的状态代码

Nginx 代理传递 - 返回上游站点的状态代码

如何从http://127.0.0.1:8080/

例子:

等等,对于任何其他状态代码,请帮忙???花了几个小时在这个上......

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

}

答案1

看来这里有 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/示例返回 500,那么当访问 ttp://127.0.0.1/api/example 时它也应该返回 500,

我不太清楚你在这里的意思。

如果您访问的是前一个 URL,那么您将直接连接到第二个应用服务器,并收到 500 响应。

如果您访问的是后一个 URL,那么您就连接到了 nginx,它会将请求代理到第二个应用服务器并返回相同的响应。

当请求击中 api 调用时,将各种 STATUS_CODE 传递给浏览器,我返回一个 json 对象,例如,如果我想说请求需要通过 cookies 提供的身份验证令牌,那么我会发送一个带有消息和 403 的 json 对象,等等...

这听起来像是应该在应用服务器上实现的功能(无论是 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/;
}

相关内容