我目前正在尝试构建自己的网络服务器/服务,并希望设置如下内容:
- 主要“博客”的 Wordpress
- 用于我的 git 存储库的 Gitlab
- Owncloud 用于我的数据存储
我一直在使用 Docker 来运行一个漂亮的小 gitlab,它工作得非常好,用我的域映射到我的网络服务器上的端口 :81。
让我有点恼火的是,Docker 镜像总是绑定(bind)到一个特定的端口号,因此不太容易记住,所以我想做这样的事情:
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 @
是我太傻还是怎么回事?
最佳答案
我知道您的问题更具体地是关于您的 Nginx 代理配置,但我认为给您 this link 会很有用。其中详细介绍了如何设置 Nginx docker 容器,该容器自动部署配置以反向代理这些 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对于这个软件。
关于wordpress - Nginx 作为 Docker VHosts 的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816076/