nginx:重定向到启用 https 的 docker 容器

nginx:重定向到启用 https 的 docker 容器

我在 EC2 实例中运行两个容器,第一个使用端口 4200,第二个使用端口 8188。我还有一个域名“my-domaine.com”连接到我的 EC2 实例。我的目标是通过域和安全连接访问这些容器,因此我采取了以下步骤。

  • 向每个容器添加两个不同的域名,分别名为“app1.my-domaine.com”和“app2.my-domaine.com”(每个域名将被带到不同的容器)
  • 安装了 lets 加密证书
  • 在 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 文件已正确加载,但仍有一个问题。当我转到https://app1.my-domain.com/admin在浏览器中,它将我重定向到 127.0.0.1:4200/admin。这意味着 nginx 正在重定向请求而不是代理它。

相关内容