# 站点A nginx配置转发请求到另外一个站点https://b.cn/
location /api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://b.cn/;
}
# 站点https://b.cn/配置 listen 80 default_server;时A站点转发请求正常,但是取消站点B的default_server后请求转发就不到站点https://b.cn/,而是到其他配置了default_server的站点
站点A和https://b.cn/和其他站点都在同一个服务器上部署,且都过nginx

nginx配置转发请求无效
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注
【以下回答由 GPT 生成】
问题中提到,在nginx配置中将站点A的请求转发到站点B时,如果站点B配置了
listen 80 default_server
,则请求可以正常转发;但是当取消了站点B的default_server
配置后,请求就无法到达站点B,而是到达其他配置了default_server
的站点。这个问题可能是由于nginx在匹配请求时会按照一定的顺序进行匹配,当没有匹配到具体的location时,会将请求转发给default_server
。通过以下方式可以解决这个问题:- 确保站点A和站点B的配置文件都加载到了nginx中,可以通过
include
指令将站点的配置文件引入到主配置文件中。 - 确认nginx的配置文件中是否存在其他监听80端口的server块,并且这些server块的
default_server
配置是否位于站点B的前面,如果是的话,可以将这些server块的default_server
配置移动到站点A的前面。 - 使用
location /
匹配所有请求,将请求转发到站点B。
请注意,如果nginx中存在多个server块的监听端口配置为
listen 80 default_server
,则只有第一个server块会作为默认服务处理请求。下面是优化后的nginx配置示例:
server { listen 80; server_name a.cn; location /api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://b.cn/; } # 将站点B的default_server配置移动到这里 } server { listen 80 default_server; server_name b.cn; # 站点B的其他配置 } # 其他server块的配置
这样配置后,当请求转发无法到达站点B时,nginx会优先匹配到站点A的server块,并将请求转发到站点B。
【相关推荐】
- 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7452326
- 这篇博客也不错, 你可以看下nginx 配置请求频率限制
- 您还可以看一下 姜威老师的Nginx从入门到应用课程中的 跨域请求配置小节, 巩固相关知识点
- 除此之外, 这篇博客: nginx配置跨域访问中的 其他 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1- 确保站点A和站点B的配置文件都加载到了nginx中,可以通过