Nginx
使用 ldirectord/LVS 將 HTTP 重定向到 HTTPS
我們正在使用 LVS 進行負載平衡,並希望將http://example.com的 301 重定向到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 埠”錯誤。
我讓這變得比它需要的更難。
我修改了我的 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。