我在 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 正在重定向请求而不是代理它。