nginx: https を有効にして Docker コンテナにリダイレクトする

nginx: https を有効にして Docker コンテナにリダイレクトする

EC2 インスタンスで 2 つのコンテナが実行されています。1 つ目はポート 4200 を使用し、2 つ目は 8188 を使用します。また、EC2 インスタンスに接続されたドメイン名「my-domaine.com」もあります。ドメインと安全な接続を介してこれらのコンテナにアクセスすることを目指しているため、次の手順を実行しました。

  • 各コンテナに「app1.my-domaine.com」と「app2.my-domaine.com」という 2 つの異なるドメインを追加します (各ドメインは異なるコンテナに移動します)
  • インストールされたLet's Encrypt証明書
  • EC2インスタンスにnginxサーバーをインストールしました
  • https を有効にし、ドメイン名からのリクエストを次のようにコンテナーに転送するために、次の構成を追加しました。
server {
    listen 80;
    server_name my-domaine.com;
    return 301 https://$host$request_uri;
}

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  app1.my-domaine.com;
    port_in_redirect on;

    ssl_certificate "/etc/letsencrypt/live/my-domaine.com/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/my-domaine.com/privkey.pem";

    location / {
        proxy_pass http://127.0.0.1:4200;
    }

    # added this to redirect any path to the container as well
    location ~ ^/([^/]+)(/.*)?$ {
        proxy_pass http://127.0.0.1:4200$1$2;
    }
}

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  app2.my-domaine.com;
    port_in_redirect on;

    ssl_certificate "/etc/letsencrypt/live/my-domaine.com/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/my-domaine.com/privkey.pem";

    location / {
        proxy_pass http://127.0.0.1:8188;
    }

    location ~ ^/([^/]+)(/.*)?$ {
        proxy_pass http://127.0.0.1:8188$1$2;
    }
}

私が遭遇している問題は、次のブロックを含めたにもかかわらず、.js、.css、.json ファイルなどのファイルを読み込むときにエラー メッセージが表示されることです。

location ~ ^/([^/]+)(/.*)?$ {
        proxy_pass http://127.0.0.1:8188$1$2;
}

また、たとえば「app1.my-domaine.com/admin」などのパスをドメインに追加すると、nginx からデフォルトの 404 エラー ページが表示されます。パスやファイルを含むすべてのリクエストが適切なコンテナーにルーティングされるようにする方法について、何かアドバイスはありますか?

アップデート 私はこれを変えました

location ~ ^/([^/]+)(/.*)?$ {
        proxy_pass http://127.0.0.1:8188$1$2;
}

これに

location ~ ^/([^/]+)(/.*)?$ {
        proxy_pass http://127.0.0.1:8188/$1$2;
}

CSSとJSファイルは正しく読み込まれていますが、まだ問題が1つあります。https://app1.my-domain.com/adminブラウザでは、127.0.0.1:4200/admin にリダイレクトされます。これは、nginx がリクエストをプロキシするのではなくリダイレ​​クトしていることを意味します。

関連情報