我想使用一个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网站。我还想要一个Admin部分,使用在第二个docker容器中运行的ASP.NET Core创建。我希望这两个网站能够共享和使用在第三个docker容器中运行的单个ASP.NET Core Web Api项目。所以,一个NodeJS项目和两个ASP.NET核心项目都存在于一个子域中:
到目前为止,我已经为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”位置处理。我想象的是,我将拥有一个“全部捕获”的位置,捕获所有未启动的流量/管理员或/ 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/