You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理调用API时意外返回307重定向的问题求助

Nginx反向代理调用API时意外返回307重定向的问题求助

我正在给自己开发的应用配置Nginx反向代理,这个应用拆成了两个Docker镜像:

  • 一个是Web UI,通过https://example.com/访问,目前一切正常
  • 另一个是后端服务,需要通过https://example.com/swagger和https://example.com/api访问。其中Swagger页面(比如https://example.com/swagger/index.html)能正常打开,但调用API接口(比如POST请求https://example.com/api/Authentication/login)时,服务器返回307重定向,把请求转到http://actualserver.local:7066/api/Authentication/login,这完全不符合预期——毕竟Swagger能正常工作,搞不懂为啥API会出问题。

下面是我最初使用的nginx.conf配置:

worker_processes 1;

events { worker_connections 1024; }

http {

client_max_body_size 0;

sendfile on;

proxy_set_header   Host $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-Host $server_name;

server {

listen 80 default_server;

server_name example.com;

#        location /.well-known/acme-challenge/ {

#            root /var/www/certbot;

#        }

return 301 https://$host$request_uri;

}

server {

listen 443 ssl http2;

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

server_name     example.com;

location /api {

proxy_pass         http://actualserver.local:7066/api;

proxy_set_header   Upgrade $http_upgrade;

proxy_set_header   Connection "Upgrade";

proxy_set_header   X-Forwarded-Proto https;

proxy_redirect     off;

}

location /swagger {

proxy_pass         http://actualserver.local:7066/swagger;

proxy_set_header   Upgrade $http_upgrade;

proxy_set_header   Connection "Upgrade";

proxy_set_header   X-Forwarded-Proto https;

proxy_redirect     off;

}

location / {

proxy_pass         http://actualserver.local:3000;

proxy_set_header   Upgrade $http_upgrade;

proxy_set_header   Connection "Upgrade";

proxy_set_header   X-Forwarded-Proto https;

proxy_redirect     off;

}

location /.well-known/acme-challenge/ {

root /var/www/certbot;

}

}

}

我希望反向代理能直接把请求转发到actualserver.local,而不是返回307,这方面我不太熟悉,求各位大佬帮忙看看问题出在哪。


更新:
我尝试修改了Nginx配置,用upstream来定义后端服务,但问题还是存在,甚至重定向地址变成了https://web-api:7066/api/Authentication/login——整个代码库只有Nginx配置里有web-api这个名称,肯定不是后端应用返回的,应该是Nginx这边的问题。

更新后的配置如下:

worker_processes 1;

events { worker_connections 1024; }

http {

client_max_body_size 0;

sendfile on;

proxy_set_header   Host $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-Host $server_name;

upstream web-ui {

server actualserver.local:3000;

}

upstream web-api {

server actualserver.local:7066;

}

server {

listen 80 default_server;

server_name example.com;

return 301 https://$host$request_uri;

}

server {

listen 443 ssl http2;

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

server_name     example.com;

location /api {

proxy_pass         http://web-api/api;

proxy_set_header   Upgrade $http_upgrade;

proxy_set_header   Connection "Upgrade";

proxy_set_header   X-Forwarded-Proto https;

proxy_redirect     off;

}

location /swagger {

proxy_pass         http://web-api/swagger;

proxy_set_header   Upgrade $http_upgrade;

proxy_set_header   Connection "Upgrade";

proxy_set_header   X-Forwarded-Proto https;

proxy_redirect     off;

}

location / {

proxy_pass         http://web-ui;

proxy_set_header   Upgrade $http_upgrade;

proxy_set_header   Connection "Upgrade";

proxy_set_header   X-Forwarded-Proto https;

proxy_redirect     off;

}

location /.well-known/acme-challenge/ {

root /var/www/certbot;

}

}

}

备注:内容来源于stack exchange,提问作者Colin Dawson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:08:07