假设现在我有不同的应用程序在不同的路径上运行在同一服务器上:
- 10.200.200.210/app1
- 10.200.200.210/app2
- 10.200.200.210/app3
我想使用nginx作为代理在不同的Docker容器上运行每个应用程序。
我试过jwilder/nginx-proxy,如果我使用不同的域名(app1.domain.com,app2.domain.com等),效果很好,但我不能使用域,我需要使用相同的IP。
我也不能使用不同的端口,如:
- 10.200.200.210:81/app1
- 10.200.200.210:82/app2
- 10.200.200.210:83/app3
都必须在端口80上工作。
1.有没有办法配置jwilder/nginx-proxy来做到这一点?
1.是否有另一个Docker镜像,如jwilder/nginx-proxy,使它。
1.或者你能给予我一些提示,让我自己构建一个nginx docker容器吗?
7条答案
按热度按时间bgtovc5b1#
以防有人还在寻找答案。jwilder/nginx-proxy允许您使用自定义Nginx配置,无论是代理范围还是每个VIRTUAL_HOST。
下面是如何使用Per-VIRTUAL_HOST位置配置来实现这一点。
1.在您的项目文件夹中创建另一个文件夹-“vhost.d”。
1.在“vhost.d”文件夹中创建自定义nginx配置文件“whoami.local”。此文件必须与VIRTUAL_HOST同名!
./vhost.d/whoami.local
字符串
1.创建docker-compose.yml文件。
./docker-compose.yml
型
1.运行docker-compose up
1.检查配置
在bash run中:
型
您也可以将“whoami.local”域添加到/etc/hosts文件中,并直接调用此域。
/etc/host
型
测试结果:
型
rekjcdws2#
只需使用nginx镜像创建容器,请记住设置net“host”,这将使您的容器与主机共享相同的地址和端口。挂载
nginx.conf
文件和配置代理表。例如:docker命令:
字符串
nginx.conf:
型
ecbunoof3#
这是一个完整的
nginx.conf
它会将所有内容重定向到root,只有
/api
重定向到不同的容器。Source and an example container using it
字符串
jgwigjjp4#
只要把它放在/etc/nginx/nginx.conf中
字符串
6uxekuva5#
默认网桥网络在
172.17.0.1
上具有网关。您可以在nginx.conf
中使用此IP地址字符串
可以从外部使用端口
80
访问它们您可以通过运行命令
docker network inspect bridge
来检查网桥网关IP地址um6iljoc6#
我的情况有点不同。我正在做一个项目,Django和其他几个应用程序位于nginx后面(充当反向代理)
接受的解决方案对我不起作用,我认为这是因为各种应用程序不提供文件(iidoEe.
/app1-uri/bla/blo/bli/
和/app1-uri/bla/blo/bli
完全相等)。所有的静态文件都被收集到nginx中。“有问题的”行为在这里的文档中解释。本质上,nginx会拾取不带斜杠的uri,并尝试将其解析为资源,如果不能,则重定向到**
/bla/blo/bli/
* 而不是 */app1-uri/bla/blo/bli/
**这是我最后的工作。在这个例子中,
app1-uri
是repairapp
。字符串
注意
rewrite ^/repairapp/([^static].*[^/])$ /repairapp/$1/ permanent;
这一行,它重写并添加了一个尾随的正斜杠到任何(我的应用程序的)uri中,错过了它;除了那些以/repairapp/static
开头的。这些uriMap到nginx将服务的资源。要进行调试,请在nginx容器中打开一个shell并运行
curl -IL http://[server-name]/repairapp/[string-of-uris-without-trailing-slash]
以查看究竟发生了什么。epfja78i7#
字符串
感谢https://stackoverflow.com/a/52726896/1643061