負荷分散にLVSを使用しており、 http://example.com から https://example.com への301リダイレクトを実行したいと考えています。
LVSは問題なくhttpsを有効にしていますが、http実サーバーがプールに追加されていません(重み0)。
LVSは301リダイレクトに従わないのですか?そうでない場合、すべてのHTTPトラフィックをHTTPSに送信するようにldirectordを構成するにはどうすればよいですか?
これが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に正しくリダイレクトします。