【问题标题】:How do I set up a container without a subdomain using nginx-proxy?如何使用 nginx-proxy 设置没有子域的容器?
【发布时间】:2022-11-28 05:08:39
【问题描述】:

我有几个在 Docker 容器中运行的服务,都在 Nginx 反向代理之后(使用nginx-proxy/nginx-proxy)。所有服务都在不同的子域上运行,并且它们都可以使用 HTTPS 等正常工作。

我现在正在尝试托管另一个容器,该容器使用 Nginx 在域本身上为静态网站提供服务,没有子域,但我正在努力让它工作。

这是我的最小docker-compose.yml

version: "3"

services:
  example:
     image: nginx 
     expose:
       - 80
       - 443
     restart: unless-stopped
     environment:
       VIRTUAL_HOST: domain.tld
       LETSENCRYPT_HOST: domain.tld
     container_name: example
     volumes:
       - ./content:/usr/share/nginx/html

networks:
  default:
    external:
      name: nginx-proxy

这不起作用:无论我尝试通过 HTTP 还是 HTTPS 访问它,它都会显示 500 Internal Server Error。如果我做完全相同的事情,但将 subdomain.domain.tld 用于 VIRTUAL_HOSTLETSENCRYPT_HOST 环境变量,则两者都可以正常工作。

如果我将以下内容添加到 docker-compose.yml 文件中:

    ports:
      - "8003:80"
      - "8443:443"

...然后我可以访问位于http://domain.tld:8003 的站点,但是https://domain.tld:8443 显示连接失败并且https://domain.tld 仍然显示 500 错误。 http://domain.tld 重定向到 https://domain.tld

【问题讨论】:

    标签: nginx docker-compose nginx-reverse-proxy jwilder-nginx-proxy


    【解决方案1】:

    问题是我有根域的 AAAA 记录,但没有子域,我使用 nginx-proxy/acme-companion 自动生成我的 SSL 证书。

    nginx-proxy/acme-companion 文档在 ‘Requirements’ 标题下说明如下:

    如果您的(子)域设置了 AAAA 记录,主机必须可以通过 IPv6 端口 80 和 443 公开访问。

    因此,根据nginx-proxy/nginx-proxy documentation,启用 IPv6:

    您可以通过将值 true 传递给 `ENABLE_IPV6 环境变量来激活对 nginx-proxy 容器的 IPv6 支持:

    docker run -d -p 80:80 -e ENABLE_IPV6=true -v /var/run/docker.sock:/tmp/docker.sock:ro nginxproxy/nginx

    我的最终 docker-compose.yml 看起来像这样:

    version: "3"
    
    services:
       example:
         image: nginx 
         expose:
           - 80
           - 443
         restart: unless-stopped
         environment:
           VIRTUAL_HOST: domain.tld,www.domain.tld
           LETSENCRYPT_HOST: domain.tld,www.domain.tld
         container_name: example
         volumes:
           - ./content:/usr/share/nginx/html:ro
           - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    
    networks:
      default:
        external:
          name: nginx-proxy
    

    【讨论】:

      猜你喜欢
      • 2018-08-16
      • 2017-09-14
      • 2018-01-07
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多