web-dev-qa-db-ja.com

ldirectord / LVSを使用してHTTPをHTTPSにリダイレクトする

負荷分散に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に送信されましたポート」エラー。

1
Brian

私はこれを必要以上に難しくしていました。

私は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に正しくリダイレ​​クトします。

1
Brian