Nginx

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

  • July 31, 2013

我們正在使用 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。

引用自:https://serverfault.com/questions/525624