我目前正在尝试构建自己的网络服务器/服务,并希望设置如下内容:
我一直在使用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 @
我是不是太愚蠢或者最近怎么回事?
答案 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}}来自环境的价值。