Nginx作为Docker VHost的反向代理

时间:2014-11-08 10:25:17

标签: wordpress nginx dns docker reverse-proxy

我目前正在尝试构建自己的网络服务器/服务,并希望设置如下内容:

  • Wordpress for the main" blog"
  • 我的git存储库的Gitlab
  • Owncloud用于我的数据存储

我一直在使用Docker来获得一个漂亮的小gitlab运行,它运行得非常好,映射到我的网络服务器上的端口:81。

令我恼火的是,Docker图像总是绑定到特定的端口号,因此不容易记住,所以我喜欢这样做:

git.mydomain.com for gitlab
mydomain.com (no subdomain) for my blog
owncloud.mydomain.com for owncloud

据我所知,我需要一个反向代理,我决定使用nginx。所以我这样设置:

http {
include       mime.types;
default_type  application/octet-stream;

sendfile        on;

keepalive_timeout  65;

server {
    listen       80;
    server_name  mydomain.com;
    location / {
            proxy_pass http://localhost:84;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
server {
    listen 80;
    server_name git.mydomain.com;

    location / {
        proxy_pass http://localhost:81;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这样,我有git.mydomain.com运行完美无缺,但我的wordpress只显示了一个空白的网页。我的DNS设置如下:

Host   Type   MX Destination
*      A      IP
@      A      IP
www    CNAME   @

我是不是太愚蠢或者最近怎么回事?

2 个答案:

答案 0 :(得分:6)

我知道你的问题更具体地说明了你的Nginx代理配置,但我认为给你this link详细介绍如何设置一个Nginx docker容器自动部署反向代理的配置是有用的。码头工人集装箱。换句话说,您运行反向代理,然后运行其他容器,Nginx容器将根据主机名将流量路由到其他容器。

基本上,您拉动代理容器并使用docker run命令中设置的一些参数运行它,然后启动您想要代理的其他容器。一旦你安装了docker并拉出了nginx-proxy映像,我用来启动代理的特定命令:

docker run -d --name="nginx-proxy" --restart="always" -p 80:80 \ -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy

现在代理正在运行。您可以通过将浏览器指向您的地址进行验证,该地址应返回Nginx 502或503错误。你会得到错误,因为还没有人在听。要启动其他容器,这非常简单,如下所示:

docker run -d --name="example.com" --restart="always" \ -e "VIRTUAL_HOST=example.com" w3b1x/mywebcontainer

只需-e "VIRTUAL_HOST=example.com"即可让您的Nginx代理路由流量到您正在启动的容器中。

自从我开始使用Docker以来,我一直在使用这种特殊的方法,这对于这种情况来说非常方便。我链接的文章为您提供了逐步说明以及您需要的所有信息。如果您需要更多信息(特别是关于在此设置中实施SSL),您可以查看the git repository此软件。

答案 1 :(得分:1)

你的nginx配置看起来很健全,然而,你正在点击localhost:xx,这是错误的。它应该是gatewayip:xx或更好target_private_ip:80

解决这个问题的一个简单方法是使用--link启动容器并通过shell脚本“注入”ip:使用占位符而不是ip来创建“原始”nginx配置,然后{ {1}}来自环境的价值。