[英]Configure Nginx for routing
我在我的VM(地址xyzw
)中的端口80上使用Nginx xyzw
。 因此,当我在浏览器中尝试http://xyzw
时,它显示的是Nginx索引文件。
现在我正在配置(基本上代理传递)它为我在端口8081和8082上的相同VM上运行的两个docker镜像。我想要的:
when I type http://x.y.z.w/a it should go to http://x.y.z.w:8081
when I type http://x.y.z.w/b it should go to http://x.y.z.w:8082
为此,我在conf文件中更改了一部分:
location /a {
rewrite ^/a(.*) /$1 break;
proxy_pass http://x.y.z.w:8081 ;
}
location /b {
rewrite ^/b(.*) /$1 break;
proxy_pass http://x.y.z.w:8082 ;
}
它按预期工作。 但由于所有图像都在同一台机器上(具有相同的IP),我想使用localhost
而不是xyzw
。 但它不适用于localhost
。
基本上,我不想在链接中使用硬编码IP(xyzw),因为IP将来可能会发生变化。
有没有办法,Nginx可以知道它运行的变量IP,我可以使用该IP。 或者如何通过一些修改与localhost
一起使用?
您不能使用localhost
来寻址另一个docker容器,因为它指的是容器的loopback
而不是主机的loopback
。 正如@Tuan建议的那样,您可以link
( https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/ )容器,以便他们可以通过他们的名字进行通信。 例如:
docker run --rm -ti --name backend nginx:latest
docker run --rm -ti --name proxy --link backend:backend nginx:latest
现在proxy
知道backend
。
我刚用$host
替换了我的nginx.conf
每次出现的xyzw
,它运行正常。
例如,而不是proxy_pass http://xyzw:8081 ;
,
把它写成了proxy_pass http://$host:8081 ;
现在,如果我的IP( xyzw
)发生变化,它对我的应用程序没有影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.