今天在研究利用Ngxin转发多域名的时候,发现了一个Nginx-proxy的项目,原理也是利用反向代理转递流量,但是这至少是个项目,而且一次配置方便使用,比较方便。
什么是nginx-proxy?
nginx-proxy 启动一个容器来运行 nginx 和 [docker-gen](https://github.com/jwilder/docker-gen)。 在主机上的容器启动和停止时 docker-gen 会生成 nginx 反向代理配置并且重新加载 nginx。
可以参考 Automated Nginx Reverse Proxy for Docker 了解用 nginx-proxy 的原因。
使用方法
启动 nginx-proxy 容器:
$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy 然后,任何你希望代理的容器,在启动时都设置一个环境变量 VIRTUAL_HOST=subdomain.youdomain.com
$ docker run -e VIRTUAL_HOST=foo.bar.com ...
一个具体的例子:
docker run -d -e VIRTUAL_HOST=2048.anysun.win alexwhen/docker-2048:latest
Nginx-proxy在任何容器启动的时候,会检查是否存在VIRTUAL_HOST变量,如果有这个变量则把对应域名的流量转到这类去。这样ngxin的反向代理一次配置可以永久使用。
被代理的容器必须 expose 被代理的端口,可以通过在 Dockerfile 里面使用 EXPOSE 指令或者在 docker run 时使用 –expose 参数。
与Forsaken-mail的冲突
但是我初衷是想解决Forsaken的问题,但是我不论怎么处理,就是存在问题。具体的原因我就无法说明了。
看着这个503真是仇人啊。
备注几条命令:
lsof -i :80 查看80端口被什么程序占用
netstat -an | grep :80 查看80端口的是否已在使用中,可验证使用该端口的服务是否已正常运行
netstat -tunlp | grep :80 查看80端口是被哪个服务使用着
[root@www.linuxidc.com log]# netstat -tunlp | grep 80
tcp 0 0 :::80 :::* LISTEN 1013/httpd
netstat -tunlp | grep : 所有端口占用情况
目前来看,Docker对我来说适用于在小鸡上搞各种东西,避免破环主机环境,长期保证项目的稳定。
但是对于做站来说,需要设置的东西太多,目前成型的项目也比较少。比如现在HTTPS啥的没法进一步解决。