Hi琦森 2024-01-06 13:28 采纳率: 80%
浏览 40
已结题

nginx配置转发请求无效


        # 站点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
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-06 16:02
    关注

    【以下回答由 GPT 生成】

    问题中提到,在nginx配置中将站点A的请求转发到站点B时,如果站点B配置了listen 80 default_server,则请求可以正常转发;但是当取消了站点B的default_server配置后,请求就无法到达站点B,而是到达其他配置了default_server的站点。这个问题可能是由于nginx在匹配请求时会按照一定的顺序进行匹配,当没有匹配到具体的location时,会将请求转发给default_server。通过以下方式可以解决这个问题:

    1. 确保站点A和站点B的配置文件都加载到了nginx中,可以通过include指令将站点的配置文件引入到主配置文件中。
    2. 确认nginx的配置文件中是否存在其他监听80端口的server块,并且这些server块的default_server配置是否位于站点B的前面,如果是的话,可以将这些server块的default_server配置移动到站点A的前面。
    3. 使用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。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月28日
  • 创建了问题 1月6日