![使用 ldirectord/LVS 将 HTTP 重定向到 HTTPS](https://linux22.com/image/803097/%E4%BD%BF%E7%94%A8%20ldirectord%2FLVS%20%E5%B0%86%20HTTP%20%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20HTTPS.png)
我们正在使用 LVS 进行负载平衡,并希望进行 301 重定向http://example.com到https://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。