web-dev-qa-db-ja.com

nginxはポート80でリッスンできますが、443でSSLを使用してアップストリームをバックエンドに送信できますか?

PCIに準拠するために、私のアプリケーションはリバースプロキシサーバーとバックエンドアプリサーバーの間で安全な/暗号化された接続を使用するように強制されますが、リバースプロキシに入る接続はポート80にあります。つまり、リバースプロキシはhttp-toとして機能する必要があります。 -httpsコンバータ。

簡単な図:

IIS7 <---ポート443 --- nginx <----ポート80 ----インターネット

私はこれのためにイカよりもnginxを使用して評価しています、そしてこれは私がこれまでに私のnginx.confに持っているものです:

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream backend {
        server mybackendserver:443;
    }

    server {
        server_name www.mysite.com
        listen       80;
        ssl on;
        ssl_certificate /etc/nginx/server.crt;
        ssl_certificate_key /etc/nginx/server.key;
        ssl_verify_client off;
        location = / {
                    proxy_pass  https://backend;
                proxy_set_header Host $http_Host;
            proxy_set_header X_FORWARDED_PROTO https;
        }

    }

}

上記のように、www.mysite.comにアクセスすると、「400 BadRequestプレーンHTTPリクエストがHTTPSポートに送信されました」と表示されます。

どこがいけないの?これも実行可能ですか?この目的のためにnginxはイカよりも優れていますか?

よろしくお願いします、G

6
G Chuk

proxy_passはHTTPSにプロキシできますが、これは問題ではありません。

構成にエラーがあります。行を削除します

ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_verify_client off;

これらはNginx側でSSLサーバーをオンにしています。つまり、Nginxはポート80でSSL接続を期待しています。ブラウザは通常のHTTPをポート80に送信するため、Nginxは「400 Bad RequestプレーンHTTPリクエストがHTTPSポートに送信されました」と文句を言います。

13