web-dev-qa-db-ja.com

複数のApacheサーバーへのnginxsslプロキシ

HTTP経由で複数のnodejsWebアプリケーションサーバーがあり、それらのサーバーに送信されたリクエストを認証する必要があります。 nginxをリクエストのプロキシとして使用し、SSL証明書でnginxサーバーのみを認証して、クライアントに返送されるデータ/画像がHTTPS経由で提供されるようにすることを考えていました。

これは私が考えた構造です:

                                   +--- app1 ---> node.js on ip:10001
                                   |
client --> https --> nginx --> http --- app2 ---> node.js on ip:10002
                                   |
                                   +--- app3 ---> node.js on ip:10003

私の懸念は、プロキシされたリクエストからの応答オブジェクトについてです。 WebkitベースのブラウザとSafariは、アプリケーションがHTTPSであるが、HTTP経由でコンテンツを提供していることを警告しています(混合コンテンツ警告)。

プロキシサーバーを認証することにより、クライアントへの応答はHTTPSまたはHTTPとして検証されますか?

私のnginxプロキシにはproxy.domain.comのような認定されたサブドメインがあるため、例として「 https ://proxy.domain.com:10001 "。要求はHTTPSを介してプロキシに対して実行されますが、返されるサーバーコンテンツはHTTPを介して行われます。プロキシはそのような返されたコンテンツをどのように制定しますか?

SSL暗号化を適用するので、次のようにリソースを送り返します: " https://proxy.domain.com:10001/resource.png "

みなさん、よろしくお願いします

1
mnemosdev

あなたが試みているものはSSLターミネーションと呼ばれています。リバースプロキシがSSLを処理し、HTTPプロトコルを使用してプロキシサーバーに要求を転送するときです。したがって、クライアントにはHTTPS接続がありますが、リバースプロキシ(nginx)からプロキシサーバー(Apache)へのHTTP接続があります。 nginxでは次のようにします:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;

    location /{
        proxy_pass http://upstream_name:80;
        proxy_set_header Host $Host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Scheme $scheme;
    }
}

さらに詳しく知りたい場合は、Nginxのこの公式ドキュメントを使用できます https://www.nginx.com/resources/admin-guide/nginx-ssl-termination/ 。混合コンテンツについては、@ Bertと同じだと思います。 HTMLでまだhttpプロトコルを提供していることが原因かもしれません。

1
Ilham Sulaksono