例子:
- http://127.0.0.1:8080/api/示例返回 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;
}
}
}
答案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/;
}