Docker、nginx、nginx 代理未重定向到正确的容器

Docker, nginx, nginx proxy not redirecting to the right container

我正在 Ubuntu 服务器中设置一些容器。我用这种方式创建了两个简单的图像:

Docker 文件:static-site

FROM nginx:alpine
COPY ./site/ /usr/share/nginx/html

Docker 文件:static-content

FROM nginx:alpine
COPY ./assets/ /usr/share/nginx/html

Dockerfile 位于不同的位置

到这里完全没有问题。我已经安装了 nginx-proxy 并使用 VIRTUAL_HOST 到 运行 它们:

 docker run -d -p 80 -e VIRTUAL_HOST=mysite.com static-site
 docker run -d -p 80 -e VIRTUAL_HOST=static.mysite.com static-content

结果是无论我在浏览器中输入什么地址,它总是将我重定向到 mysite.com

我做错了什么?

此外,我有这样的 DNS 记录:

*.mysite.com    86400   A   0   xxx.xxx.xx.xx (the ip of mysite.com)

会不会是问题所在?

您不能将两个容器绑定到同一个端口(“80”)。很可能第二个容器已经死了(你可以通过 运行 docker ps 来验证这一点)。或者是 运行 自动分配的端口

docker ps --format " {{.Image}} ==> {{.Ports}}"
nginx ==> 0.0.0.0:32769->80/tcp
nginx ==> 0.0.0.0:32768->80/tcp

要解决此问题,您可以为容器使用不同的端口并将您的 DNS 配置为链接到负载均衡器(以便您可以配置目标端口),或者您切换为使用具有多个服务器定义的单个 Nginx。

Docker 文件:

FROM nginx:alpine
COPY ./site/ /usr/share/nginx/site_html
COPY ./assets/ /usr/share/nginx/assets_html
COPY ./site.conf /etc/nginx/conf.d/default.conf

Nginx 配置:

server {
    listen 80;
    server_name  mysite.com;

    root /usr/share/nginx/site_html;
}

server {
    listen 80;
    server_name  static.mysite.com;

    root /usr/share/nginx/static_html;
}