目前,我有一个由LAMP堆栈(PHP,Apache,MySQL)组成的Docker容器。在http://localhost:my_specified_port上运行正常。但是,我想通过http://some_domain.dev访问它。我当前的解决方案是在本地使用NGINX作为代理并执行以下操作:
server {
listen 80;
server_name some_domain.dev
location / {
proxy_pass http://localhost:my_specified_port;
}
}
工作正常。但是,我想让我的同事更轻松,并且对NGINX服务器进行docker化,并获得相同的结果。有可能做到吗?我在网上找不到任何解决方案。非常感谢。
编辑:大修改。我忘了提一下,我想让docker中的NGINX在80以外的其他端口上工作。因此,如果某些人在本地安装了Apache,它仍然可以工作。
答案 0 :(得分:0)
解决此问题的出发点是使用jwilder/nginx-proxy-dockerized Nginx反向代理。通过根据其他容器的env vars生成Nginx配置,它可以使您在问题中描述的过程自动化。
您需要一种方法来指向您的域以通过Nginx反向代理进行解析。最常见的方法是使用/etc/hosts
。路线如下:
/etc/hosts
说,该域解析为反向代理的ip 但是,由于您希望Nginx反向代理在80以外的端口上运行,因此您仍然需要使用端口访问所需的域。因此,此解决方案并不是您想要的100%,但它仍然是了解如何使用反向代理来模拟域名的一个很好的起点:
docker run -d -p 8080:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
VIRTUAL_HOST=some_domain.dev
添加到LAMP容器中(如果容器中的应用程序在不同于80的端口上运行,则也可以使用VIRTUAL_PORT={{any port number}}
)127.0.0.1 some_domain.dev
添加到/etc/hosts
http://some_domain.dev:8080
如果以后您想添加另一个具有不同域的容器化应用,则应该:
VIRTUAL_HOST=another_domain.dev
添加到新应用程序的容器中127.0.0.1 another_domain.dev
添加到/etc/hosts
http://another_domain.dev:8080
如果您想以一种可维护的方式模拟域名,以在整个开发团队中扩展,则可以将jwilder/nginx-proxy
与mitm-nginx-proxy-companion以及浏览器代理扩展一起使用。 mitm-nginx-proxy-companion
包括mitmproxy
和一个dns服务器,该服务器允许其将“本地域请求”发送到储备代理,并将其余请求发送到“真实”互联网。
设置后,的整个路径如下:
对于mitm-nginx-proxy-companion
,您无需使用/etc/hosts
,因此,如果尝试了第一种解决方案,则应删除之前添加的条目。我正在以docker-compose格式添加解决方案,以便于编写/阅读
version: '3.3'
services:
lamp:
environment:
VIRTUAL_HOST: some_domain.dev
VIRTUAL_PORT: 9999
image: my_lamp_image
another_app:
environment:
VIRTUAL_HOST: another_domain.dev
image: my_app_image
nginx-proxy:
image: jwilder/nginx-proxy
labels:
- "mitmproxy.proxyVirtualHosts=true"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
nginx-proxy-mitm:
dns:
- 127.0.0.1
image: artemkloko/mitm-nginx-proxy-companion
ports:
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
那么您将需要
docker-compose up
127.0.0.1:8080
http://some_domain.dev
http://another_domain.dev
注意:我是mitm-nginx-proxy-companion