gpt4 book ai didi

docker - NGinx 和多个 docker 容器但一个子域

转载 作者:行者123 更新时间:2023-12-02 19:27:00 25 4
gpt4 key购买 nike

我的目标

我想使用单个 NGinx docker 容器作为代理。

我希望它响应我域上的流量:“sub.domain.com”并监听端口 80 和 443。

当流量进入 /admin 时,我希望它能将所有流量定向到一个 docker 容器(比如...admin_container:6000)。

当流量进入 /api 时,我希望它将所有流量定向到另一个 docker 容器(比如...api_container:5500)。

当流量通过任何其他路径 (/anything_else) 进入时,我希望它将所有流量引导至另一个 docker 容器(例如...website_container: 5000).

一些有用的上下文

非常快,让我提供一些背景信息以防有帮助。我有一个在 docker 容器中运行的 NodeJS 网站。我还想有一个管理部分,它是使用在第二个 docker 容器中运行的 ASP.NET Core 创建的。我希望这两个网站共享并使用在第三个 docker 容器中运行的单个 ASP.NET Core Web Api 项目。因此,一个 NodeJS 项目和两个 ASP.NET Core 项目都位于一个子域中:

  • sub.domain.com/
    • 为主要网站提供服务
  • sub.domain.com/admin
    • 为管理网站提供服务
  • sub.domain.com/api
    • 为 API 端点提供服务并处理数据库连接

到目前为止我有什么

到目前为止,我已经为 NodeJS 应用程序设置了 NGinX 反向代理和一个 docker 容器。目前 :80 上的所有流量都重定向到 443。443 上的所有流量都定向到 NodeJS docker 容器,在 :5000 上私下运行。我承认我对 NGinx 不是很好,也不完全理解它是如何工作的。

NGinx.conf 文件

worker_processes 2;

events { worker_connections 1024; }

http {
sendfile on;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;

upstream docker-nodejs {
server nodejs_prod:5000;
}

server {
listen 80;
server_name sub.domain.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
server_name sub.domain.com;
ssl_certificate /etc/nginx/ssl/combined.crt;
ssl_certificate_key /etc/nginx/ssl/mysecretkeyfile.key;

location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_pass http://docker-nodejs;
}
}

}

快速说明:在上面的代码中,“nodejs_prod:5000”指的是名为“nodejs_prod”的容器,并在端口 5000 上监听。我不明白它是如何工作的,但它正在工作。 docker 以某种方式在专用网络中创建 DNS 条目,每个容器名称一个。我实际上正在使用 docker-compose。

我的实际问题:当我有 2 个以上的网站(每个都是一个 docker 容器)时,这个 NGinx.conf 文件会是什么样子。重要的是/admin 和/api 被发送到正确的 docker 容器,而不是由“catch all”位置处理。我想象我会有一个“捕获所有”位置,它捕获所有不以/admin 或/api 开头的流量。

谢谢!

最佳答案

在您的 nginx 配置中,您要添加位置规则,例如

  location /admin {
proxy_pass http://admin_container:6000/;
}

location /api {
proxy_pass http://api_container:5500/;
}

这会将 /admin 重定向到 admin_container 端口 6000,并将 /api 重定向到 api_container 和端口 5500

docker-compose 在它的所有容器之间创建一个网络。这就是为什么 http://api_container:5500/ 指向名为 api_container 的容器和端口 5500。这可以用于容器之间的通信。您可以在这里阅读更多相关信息 https://docs.docker.com/compose/networking/

关于docker - NGinx 和多个 docker 容器但一个子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com