我想使用一个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网站。我还希望有一个使用ASP.NET Core创建的Admin部分,该部分在第二个Docker容器中运行。我希望这两个网站共享并利用在第三个Docker容器中运行的单个ASP.NET Core Web Api项目。因此,一个NodeJS项目和两个ASP.NET Core项目都生活在一个子域中:
到目前为止,我已经设置了NGinX反向代理和用于NodeJS应用程序的单个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容器,并且不要由“全部捕获”位置处理。我正在想象我将拥有一个“全部捕获”位置,该位置捕获所有不以/ admin或/ api开始的流量。
谢谢!
答案 0 :(得分:1)
在您的nginx配置中,您要添加位置规则,例如
Log.i(Tag, "Response code: "+response.code()); и Log.i(getClass().getSimpleName(), "Error: "+t)
这会将I/: Error: java.net.UnknownServiceException: CLEARTEXT communication to www.omdbapi.com not permitted by network security policy
重定向到 location /admin {
proxy_pass http://admin_container:6000/;
}
location /api {
proxy_pass http://api_container:5500/;
}
端口/admin
,并将admin_container
重定向到6000
和端口/api
。
docker-compose在所有容器之间创建一个网络。这就是api_container
指向名为5500
的容器和端口http://api_container:5500/
的原因。这可以用于容器之间的通信。您可以在这里https://docs.docker.com/compose/networking/