我们可以说现在我在不同路径上的同一台服务器上运行了不同的应用程序:
我想使用nginx作为代理在不同的Docker容器上运行每个应用程序。
我尝试了jwilder/nginx-proxy并且如果我使用不同的域名(app1.domain.com,app2.domain.com等),效果很好,但是我无法使用域名,我需要使用相同的IP。
我也不能使用不同的端口,如:
所有必须在端口80上工作。
答案 0 :(得分:4)
如果有人仍在寻找答案。 通过jwilder / nginx-proxy,您可以基于代理范围或按VIRTUAL_HOST使用自定义Nginx配置。
在这里,如何通过Per-VIRTUAL_HOST位置配置来做到这一点。
./ vhost.d / whoami.local
location /app1 {
proxy_pass http://app1:8000;
}
location /app2 {
proxy_pass http://app2:8000;
}
./ docker-compose.yml
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "8080:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /path/to/vhost.d:/etc/nginx/vhost.d:ro
gateway:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=whoami.local
app1:
image: jwilder/whoami
app2:
image: jwilder/whoami
在bash中运行:
$ curl -H "Host: whoami.local" localhost:8080
I'm 1ae273bce7a4
$ curl -H "Host: whoami.local" localhost:8080/app1
I'm 52b1a7b1992a
$ curl -H "Host: whoami.local" localhost:8080/app2
I'm 4adbd3f9e7a0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a659a4d4b0a jwilder/nginx-proxy "/app/docker-entrypo…" 54 seconds ago Up 53 seconds 0.0.0.0:8080->80/tcp nginxreverseproxy_nginx-proxy_1
4adbd3f9e7a0 jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_app2_1
52b1a7b1992a jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_app1_1
1ae273bce7a4 jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_gateway_1
您还可以在/ etc / hosts文件中添加“ whoami.local”域,然后直接调用该域。
/ etc / hosts
...
127.0.0.1 whoami.local
...
结果:
$ curl whoami.local:8080
I'm 52ed6da1e86c
$ curl whoami.local:8080/app1
I'm 4116f51020da
$ curl whoami.local:8080/app2
I'm c4db24012582
答案 1 :(得分:1)
这里是完整的std::vector<Car>::iterator it;
it = std::search(carVector.begin(), carVector.end(), std::begin(carArray), std::end(carArray));
if (it != carVector.end())
{
// carArray was found in carVector, do sth here with it
std::cout << it->GetBrand();
}
它将全部重定向到root,仅将nginx.conf
重定向到其他容器。
Source and an example container using it
/api
答案 2 :(得分:0)
只需使用nginx图片创建容器,**请记住set net&#34; host&#34; **这将使您的容器与主机machine.mount nginx.conf
文件和配置代理表共享相同的地址和端口。例如:
docker命令:
docker run --name http-proxy -v /host/nginx.conf:/etc/nginx/nginx.conf --net host -itd --restart always nginx
nginx.conf:
server {
listen 80;
location /app1 {
proxy_pass YOUR_APP1_URL;
}
location /app2 {
proxy_pass YOUR_APP2_URL;
}
}
答案 3 :(得分:0)
只需将其放入/etc/nginx/nginx.conf
worker_processes 1;
error_log /var/log/nginx/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 80;
location /api {
proxy_pass http://awesome-api;
proxy_redirect off;
proxy_set_header Host $host;
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;
}
}
}
答案 4 :(得分:0)
默认网桥网络在172.17.0.1
上具有网关。您可以在nginx.conf
server {
listen 80;
server_name example.com;
location /app1 {
proxy_pass http://172.17.0.1:81;
}
location /app2 {
proxy_pass http://172.17.0.1:82;
}
}
可以从外部使用端口80
来访问它们
您可以通过运行命令docker network inspect bridge