使用 ldirectord/LVS 将 HTTP 重定向到 HTTPS

使用 ldirectord/LVS 将 HTTP 重定向到 HTTPS

我们正在使用 LVS 进行负载平衡,并希望进行 301 重定向http://example.comhttps://example.com

LVS 正在启用 https 并且没有问题,但是 http 真实服务器没有被添加到池中(权重为 0)。

LVS 不遵循 301 重定向吗?如果不遵循,如何配置 ldirectord 将所有 HTTP 流量发送到 HTTPS?

这是 nginx 配置:

server {
    listen      80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}

server {
        listen       443;
        ssl on;
        ssl_certificate         server.crt;
        ssl_certificate_key     server.key;
        server_name  example.com;

# more here

}

ldirectord.cf 如下所示:

virtual=VIP:80
        fallback=127.0.0.1:80
        real=10.0.0.7:80 masq 5
        real=10.0.0.8:80 masq 5
        service=http
        request="lvs.htm"
        receive="lvs"
        virtualhost=example.com
        scheduler=wlc
        protocol=tcp
        checktype=negotiate

virtual=VIP:443
        fallback=127.0.0.1:443
        real=10.0.0.7:443 masq 5
        real=10.0.0.8:443 masq 5
        service=https
        request="lvs.htm"
        receive="lvs"
        virtualhost=example.com
        scheduler=wlc
        protocol=tcp
        checktype=negotiate

我还尝试将我的 VIP 设置为端口 80,并将我的 RIP 端口设置为 443,这会导致服务器被添加到池中,但 nginx 随后返回 400“纯 HTTP 请求已发送到 HTTPS 端口”错误。

答案1

我把这件事弄得比本来的要难。

我修改了我的 nginx.conf 如下:

server {
    listen      80;
    server_name example.com;

    root    /var/www;

    location = /lvs.htm {
        #do nothing
    }

    location / {
        return 301 https://example.com$request_uri;
    }
}

lvs.htm 位于 /var/www 中,因此位置匹配,搜索停止,lvs.htm 收到 200 响应代码。LVS 将服务器添加到池中,当命中时,nginx 会使用 301 正确重定向到 https。

相关内容