NGINX proxy_pass直接传递到定义的上游而不是https url

stszievb  于 2022-11-28  发布在  Nginx
关注(0)|答案(1)|浏览(142)

我有一个nginx配置,看起来类似于(简化):

http {
    server {
        listen 80 default_server;

        location /api {
            proxy_pass https://my-bff.azurewebsites.net;
            proxy_ssl_server_name on;
        }
    }
}

本质上,我有一个到使用https的API端点的反向代理。
现在,我想将其转换为一个上游组,以访问keepalive和其他特性。

http {
    upstream bff-app {
        server my-bff.azurewebsites.net:443;
    }

    server {
        listen 80 default_server;

        location /api {
            proxy_pass https:/bff-app;
            proxy_ssl_server_name on;
        }
    }
}

但它不起作用。显然我错过了什么。
总之,我如何正确地进行这种“转换”,即从url到定义的上游?
我尝试在proxy_pass指令中在http和https之间切换,但也不起作用。
我真的希望这是一个简单的替代品。一个上游的另一个,但我做错了什么,它似乎。

umuewwlo

umuewwlo1#

Richard Smith为我指明了正确的方向。
实际上,问题是主机标头被设置为“bff-app”而不是“my-bff.azurewebsites.net“,这导致远程服务器关闭连接。
通过手动指定标题修复,如下所示:

http {
    upstream bff-app {
        server my-bff.azurewebsites.net:443;
    }

    server {
        listen 80 default_server;

        location /api {
            proxy_pass https:/bff-app;
            proxy_ssl_server_name on;
            # Manually set Host header to "my-bff.azurewebsites.net",
            # otherwise it will default to "bff-app".
            proxy_set_header Host my-bff.azurewebsites.net; 
        }
    }
}

相关问题