我是nginx的新手,我不确定这是正常行为......
这是我正在使用的lib:https://github.com/jwilder/nginx-proxy
我将在这里解释我想要完成的事情......
我有2个额外服务service1
和service2
这些服务是带有API端点的简单node.js图像
service1 have routes:
- service1/api/first
- service1/api/second
`
`
service2 have routes:
- service2/api/third
- service2/api/fourth
`
So is possible to be able to access this services from same host, like this:
localhost/service1/api/first
localhost/service2/api/third
?
I tried like this:
My `docker-compose.yml` file:
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
whoami:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=whoami.local
service1:
image: mynode:1.1
volumes:
- .:/app
restart: always
environment:
- VIRTUAL_HOST=service1.local
- VIRTUAL_PORT=8080
service2:
image: mynodeother:1.2
volumes:
- .:/app
restart: always
environment:
- VIRTUAL_HOST=service2.local
- VIRTUAL_PORT=8081
这是从命令docker exec nginx-proxy cat /etc/nginx/conf.d/default.conf
生成的配置文件:
http://pushsc.com/show/code/58f739790a58d602a0b99d22
当我在浏览器中访问localhost时,我得到:
欢迎来到nginx!
如果您看到此页面,则表示已成功安装nginx Web服务器 和工作。需要进一步配置。
有关在线文档和支持,请参阅nginx.org。 nginx.com提供商业支持。
感谢您使用nginx。
答案 0 :(得分:1)
尽量不要在nginx
配置文件中使用IP地址。
此外,您应该为两个服务使用相同的端口号:8080(如果这是nodejs应用程序正在侦听的端口)。
然后,您应该在每个location
上下文中使用server
正确定义到每项服务的路由。
因此,您应该修改/etc/nginx/conf.d/default.conf
容器内的nginx
,如下所示:
# service1.local
upstream service1.local {
## Can be connect with "nginxproxy_default" network
# nginxproxy_service1_1
server service1:8080;
}
server {
server_name service1.local;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location /service1 { #note this line
proxy_pass http://service1.local;
}
}
# service2.local
upstream service2.local {
## Can be connect with "nginxproxy_default" network
# nginxproxy_service2_1
server service2:8080; #same port
}
server {
server_name service2.local;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location /service2 { #note this line
proxy_pass http://service2.local;
}
}