検索

ホームページ  >  に質問  >  本文

Docker ホスト上では、いくつかの異なる Web サイト コンテナが実行されています。80 ポートと 443 ポートのトラフィックを対応するコンテナに正しく転送するにはどうすればよいでしょうか?

###ヘルプ。 。 Dalao によって書かれたチュートリアルがある場合は、その記事へのリンクを投稿することもできます。 。 Baidu を一周した後、私は昏睡状態に陥りました。 。

PHP中文网PHP中文网2746日前1387

全員に返信(2)返信します

  • 習慣沉默

    習慣沉默2017-06-20 10:07:52

    折り畳まれ、docker の解決策に到達しました
    github:https://github.com/JrCs/docke...

    重要な注目部分抜粋

    容器を分ける(推奨方法)

    nginx プロキシは、jwilder/docker-gen
    イメージと公式 nginx イメージを使用して 2 つの別個のコンテナーとして実行することもできます。

    これを行うと、Docker ソケットが公開コンテナー サービスにバインドされるのを防ぐことができます (nginx 公開コンテナーに Docker ソケットをマウントしないようにします)。セキュリティの観点からはその方が優れています

    nginx プロキシを別のコンテナとして実行するには、次のものが必要です:

    1) テンプレート ファイル nginx.tmpl を docker-gen コンテナにマウントします。次のようなコマンドで最新の公式 nginx.tmpl を取得できます:

    リーリー

    2) NGINX_DOCKER_GEN_CONTAINER 環境変数を docker-gen コンテナーの名前または ID に設定します。

    例:

    • まず、ボリュームを指定して nginx (公式イメージ) を起動します:

    リーリー
    • 次に、共有ボリュームとテンプレート ファイルを使用して docker-gen コンテナを起動します:

    リーリー
    • 次に、このコンテナを開始します (NGINX_DOCKER_GEN_CONTAINER 変数には docker-gen コンテナ名または ID が含まれている必要があります):

    リーリー

    その後、前述のようにプロキシされるコンテナを起動します。

    • 何らかの理由で docker --volumes-from オプションを使用できない場合は、NGINX_PROXY_CONTAINER 変数を使用して nginx コンテナの名前または ID を指定できます。

    暗号化しましょう

    Let's Encrypt サービスを使用して仮想ホストの有効な証明書を自動的に作成するには。

    プロキシされるコンテナに対する Let's Encrypt のサポートを有効にするには、次の環境変数を設定します。この環境変数は、プロキシされる各アプリケーション コンテナーで宣言する必要があります。

    • LETSENCRYPT_HOST

    • LETSENCRYPT_EMAIL

    LETSENCRYPT_HOST variable most likely needs to be the same as the VIRTUAL_HOST 変数は、VIRTUAL_HOST 変数と同じである必要があり、パブリックにアクセス可能なドメインである必要があります。複数のホストをカンマ区切りで指定します。

    次の環境変数はオプションであり、Let's Encrypt クライアントの動作方法をパラメータ化します。

    • LETSENCRYPT_KEYSIZE

    LETSENCRYPT_KEYSIZE 変数は、要求されたキーのサイズを決定します (ビット単位、デフォルトは 4096)。

    マルチドメイン (SAN) 証明書
    マルチドメイン (SAN) 証明書を作成する場合は、

    環境変数の最初のドメインとしてベース ドメインを追加します。LETSENCRYPT_HOST

    テスト証明書

    5 証明書/週/ドメイン制限を持たないテスト証明書を作成する場合は、LETSENCRYPT_TEST environment variable with a value of true (LETSENCRYPT_HOST で証明書を要求するコンテナ内) を定義します。これをすべてのコンテナに対してグローバルに実行する場合は、以下で説明するように ACME_CA_URI を設定します。

    証明書の自動更新
    1 時間 (3600 秒) ごとに証明書がチェックされ、今後 30 日 (90 日 / 3) 以内に期限切れになるすべての証明書が更新されます。

    例:
    リーリー
    オプションのコンテナ環境変数

    カスタム構成用のオプションの letsencrypt-nginx-proxy-companion コンテナ環境変数。

    • letsencrypt は、5 証明書/週/ドメインの制限がないテスト サーバーを使用します。コンテナごとにテスト証明書を作成することもできます (「テスト証明書を暗号化しましょう」を参照)ACME_CA_URI - Directory URI for the CA ACME API endpoint (default: https://acme-v01.api.letsencrypt.org/directory). If you set it's value to https://acme-staging.api.letsencrypt.org/directory

    例えば

    リーリー

    • エントリポイント スクリプトのデバッグと LetsEncrypt 証明書の生成を有効にし、構成の問題を正確に特定するのに役立ちます。DEBUG - Set it to true

    • 「com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true」ラベル - このラベルを nginx-proxy コンテナに設定して、docker-letsencrypt-nginx-proxy-companion コンテナにプロキシとして使用するように指示します。

    • - 他の CA の ACME 実装をサポートするために、代替 TOS ハッシュを simp_le に渡しましょう。ACME_TOS_HASH

    例:

    このコンテナの使用方法の他の例が必要な場合は、以下を参照してください:

    • カール・ファティの例

    • Karl のその他の例

    • George Ilyes の例

    • Dmitry の簡単な docker-compose 例

    注意、ここにはピットがあり、怪我もしないことは明らかです、画像がすでに公開されている場合は、VIRTUAL_HOST、LETSENCRYPT_HOST、LETSENCRYPT_EMAIL を設定して実行します。コンテナがそのような会話である場合、app.yml 内で適切な環境変数を設定した後、ポート 映り込みの 80:80 が非占有ポート 80 に変更され、再構築が維持されます。

    返事
    0
  • 大家讲道理

    大家讲道理2017-06-20 10:07:52

    コンテナはホストのポートに直接バインドすることしかできないため、たとえば、Webコンテナが10個ある場合、これらのコンテナはすべて80または443を必要とするため、-pパラメータは現実的ではないため、コンテナをゲートウェイリバースとして使用しますプロキシ コンテナ、nginx を使用、-p に nginx コンテナ、および php-fpm やノードなどの他の Web コンテナからリバース プロキシとして nginx 経由でアクセスすることもでき、証明書は nginx サーバーに直接渡され、443 転送が実現されます。

    実はこれらは基本的なものですが、docker とは何の関係もありません

    この記事は lnmp 環境、
    /a/11...

    複数のphp-fpm、node、またはpythonバックエンドサービスがある場合、nginxは次のようになります

    リーリー

    返事
    0
  • キャンセル返事