通过 Jwilder 的 Nginx 代理访问虚拟主机时出现 502 Bad Gateway
502 Bad Gateway when accessing virtual host via Jwilder's Nginx proxy
我在同一台主机上有一个 Nginx 代理(Jwilder,默认配置)和 Gitlab 实例 运行。
git.myhost.com
指向主机IP。
当使用下面的 docker-compose.yml
启动 Gitlab 时,我在访问 http://git.myhost.com.
时得到 502 Bad Gateway
在 nginx-proxy 容器中生成的 /etc/nginx/conf.d/default.conf
看起来也不错:
upstream git.myhost.com {
# 2ab9168d-c69e-4725-8c20-31a194ad8d07
server 172.17.0.13 vhost;
}
server {
server_name git.myhost.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
proxy_pass http://git.myhost.com;
}
}
我做错了什么?
这是 Gitlab 的 docker-compose.yml
:
gitlab-server:
hostname: git.myhost.com
expose:
- "8100"
ports:
- 8101:22/tcp
# - 8100:8100/tcp
labels:
io.rancher.sidekicks: gitlab-data
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://git.myhost.com'
gitlab_rails['gitlab_shell_ssh_port'] = 8101
VIRTUAL_HOST: git.myhost.com
VIRTUAL_PORT: 8100
image: gitlab/gitlab-ce:latest
volumes_from:
- gitlab-data
gitlab-data:
labels:
io.rancher.container.start_once: 'true'
entrypoint:
- /bin/true
hostname: gitdata
image: gitlab/gitlab-ce:latest
volumes:
- /etc/gitlab:/etc/gitlab
- /var/log/gitlab:/var/log/gitlab
- /var/opt/gitlab:/var/opt/gitlab
您应该如下更改 nginx:
upstream gitlab {
# 2ab9168d-c69e-4725-8c20-31a194ad8d07
server 172.17.0.13:8100;
}
server {
server_name git.myhost.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
proxy_pass http://gitlab;
}
}
172.17.0.13是gitlabdocker容器的一个ip地址。
可能导致此问题的一个常见问题是 运行在 nginx-proxy
网络之外设置容器,nginx-proxy
最终无法访问该容器。
为了运行它和nginx-proxy
处于同一个网络,首先需要弄清楚nginx-proxy
是运行ning在哪个网络。只需运行以下命令即可找出:
docker network ls -f driver=bridge --format "{{.ID}}" | xargs docker network inspect | grep Name
它应该给你这样的东西:
"Name": "bridge",
"Name": "influxdb",
"Name": "mariadb",
"Name": "http_proxy",
"Name": "web-app",
"Name": "proxy",
"Name": "grafana",
现在我可以看到名为 proxy
的容器位于名为 http_proxy
的网络下。
我所要做的就是通过添加标志 --network http_proxy
(将 http_proxy
替换为您的网络名称)来 运行 该网络中的新容器:
docker run -d --name test --network http_proxy -h test.local -e VIRTUAL_HOST=test.local -v "$PWD":/usr/share/nginx/html nginx
希望这对您有所帮助。
祝你好运!
我在同一台主机上有一个 Nginx 代理(Jwilder,默认配置)和 Gitlab 实例 运行。
git.myhost.com
指向主机IP。
当使用下面的 docker-compose.yml
启动 Gitlab 时,我在访问 http://git.myhost.com.
502 Bad Gateway
在 nginx-proxy 容器中生成的 /etc/nginx/conf.d/default.conf
看起来也不错:
upstream git.myhost.com {
# 2ab9168d-c69e-4725-8c20-31a194ad8d07
server 172.17.0.13 vhost;
}
server {
server_name git.myhost.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
proxy_pass http://git.myhost.com;
}
}
我做错了什么?
这是 Gitlab 的 docker-compose.yml
:
gitlab-server:
hostname: git.myhost.com
expose:
- "8100"
ports:
- 8101:22/tcp
# - 8100:8100/tcp
labels:
io.rancher.sidekicks: gitlab-data
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://git.myhost.com'
gitlab_rails['gitlab_shell_ssh_port'] = 8101
VIRTUAL_HOST: git.myhost.com
VIRTUAL_PORT: 8100
image: gitlab/gitlab-ce:latest
volumes_from:
- gitlab-data
gitlab-data:
labels:
io.rancher.container.start_once: 'true'
entrypoint:
- /bin/true
hostname: gitdata
image: gitlab/gitlab-ce:latest
volumes:
- /etc/gitlab:/etc/gitlab
- /var/log/gitlab:/var/log/gitlab
- /var/opt/gitlab:/var/opt/gitlab
您应该如下更改 nginx:
upstream gitlab {
# 2ab9168d-c69e-4725-8c20-31a194ad8d07
server 172.17.0.13:8100;
}
server {
server_name git.myhost.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
location / {
proxy_pass http://gitlab;
}
}
172.17.0.13是gitlabdocker容器的一个ip地址。
可能导致此问题的一个常见问题是 运行在 nginx-proxy
网络之外设置容器,nginx-proxy
最终无法访问该容器。
为了运行它和nginx-proxy
处于同一个网络,首先需要弄清楚nginx-proxy
是运行ning在哪个网络。只需运行以下命令即可找出:
docker network ls -f driver=bridge --format "{{.ID}}" | xargs docker network inspect | grep Name
它应该给你这样的东西:
"Name": "bridge",
"Name": "influxdb",
"Name": "mariadb",
"Name": "http_proxy",
"Name": "web-app",
"Name": "proxy",
"Name": "grafana",
现在我可以看到名为 proxy
的容器位于名为 http_proxy
的网络下。
我所要做的就是通过添加标志 --network http_proxy
(将 http_proxy
替换为您的网络名称)来 运行 该网络中的新容器:
docker run -d --name test --network http_proxy -h test.local -e VIRTUAL_HOST=test.local -v "$PWD":/usr/share/nginx/html nginx
希望这对您有所帮助。 祝你好运!