监听上游负载均衡器时,Nginx http 到 https 重定向不起作用

监听上游负载均衡器时,Nginx http 到 https 重定向不起作用

我目前有一个 HAProxy 负载均衡器,没有 SSL 终止,它将流量路由到几个 Web 服务器。在 Web 服务器上,nginx 终止 SSL,理论上提供 http 到 https 的重定向。但是,当在浏览器中请求 http 时,它不会重定向,而是抛出“400 错误请求”错误,表示普通的 http 请求已发送到 https 端口。知道我在这里做错了什么吗?

nginx 配置文件示例:

server {
    listen private.ip:80;
    allow lb.ip;
    allow secondary_lb.ip;
    deny all;

    server_name qa.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen private.ip:443 ssl;
    allow lb.ip;
    allow secondary_lb.ip;
    deny all;

    server_name qa.example.com;

    # rest of config
}

我相信 HAProxy 配置的相关部分是这样的(存在一些 ansible 变量,但你明白了)...

frontend http
    bind    my_ip:80
    bind    my_ip:443
    option tcplog
    mode tcp
    default_backend app_pool

backend app_pool
    mode tcp
    balance roundrobin
    option ssl-hello-chk
    {% for server in backend_webservers %}
    server {{ server.name }} {{ server.ip }}:443 check
    {% endfor %}

答案1

根据您的配置,即使请求是在端口 80 上接收的 HTTP 流量,HAProxy 也会将请求路由到 443 端口。
处理此问题的最佳方法是在 HAProxy 上配置 http 到 https 的重定向,而不是在后端。因此,您必须将以下内容添加到 HAProxy 前端:

重定向方案 https 代码 301 if !{ ssl_fc }

相关内容