支持SSL/TLS的Nginx反向代理Docker容器

在这种背景下

以下是一个使用Nginx Proxy来将后端内容转发到Let’s Encrypt的免费SSL/TLS证书进行HTTPS服务化的Docker容器简便创建备忘录。以下是之前未使用Docker的发布:
– 获取并配置免费的SSL/TLS证书。

使用环境: 只需要一个选项

    • Linuxサーバー

 

    • Docker

 

    • Docker Compose 2.0

 

    • 独自ドメイン名の取得

 

    • 独自ドメイン名のDNSサーバーへのAレコードの登録

 

    Firewall(セキュリティグループ)設定で外部(0.0.0.0/0)からHTTP(TCP/80)とHTTPS(TCP/443)サービスポートの開放

关于Docker Compose安装环境,也在以下页面中进行了描述。

    Linuxサーバー環境のDockerインストールメモ

使用 nginx 代理容器

    nginx-proxy/acme-companion · GitHub

我根据官方网站的参考,配置了在Web前端部署的Nginx Proxy容器的Docker Compose设置。

创建工作目录

我会创建一个合适的目录并进行移动。

$ mkdir -p nginx-proxy
$ cd nginx-proxy

创建Docker Compose文件

创建Docker Compose的配置文件(docker-compose.yaml)。

version: '2'

services:

  nginx-proxy:
    image: nginxproxy/nginx-proxy
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - conf:/etc/nginx/conf.d
      - certs:/etc/nginx/certs:ro
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    environment:
      DEFAULT_HOST: www.yourdomain.tld
      HTTPS_METHOD: noredirect
    restart: always

  acme-companion:
    image: nginxproxy/acme-companion
    container_name: nginx-proxy-acme
    volumes_from:
      - nginx-proxy
    volumes:
      - certs:/etc/nginx/certs:rw
      - acme:/etc/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always

volumes:
  conf:
  certs:
  vhost:
  html:
  acme:

在这个例子中,有两个Docker容器(nginx-proxy,nginx-proxy-acme)的组合。
指定自定义域名是通过“DEFAULT_HOST:”项目进行设置的。
在Let’s Encrypt的SSL/TLS证书的自动更新设置中,使用了HTTP(TCP/80)服务,因此我们设置了“HTTPS_METHOD: noredirect”项目,以防止重定向。

创建和启动Docker容器

使用Docker Compose命令创建Docker容器并启动服务。

$ docker compose up -d

在初次运行时,会从DockerHub下载每个镜像,并创建Docker容器来启动服务,因此请稍等片刻。

$ docker compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
nginx-proxy         "/app/docker-entrypo…"   nginx-proxy         running             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, :::80->80/tcp, :::443->443/tcp
nginx-proxy-acme    "/bin/bash /app/entr…"   acme-companion      running

可以看到Docker容器已经创建并启动了服务。

后端容器

我們將準備用於Web前端的後端內容的Docker容器。
在Docker Compose的設置中,主要需要三個項目。

    environment:
      VIRTUAL_HOST: www.yourdomain.tld
      VIRTUAL_PROTO: http
      LETSENCRYPT_HOST: www.yourdomain.tld
      LETSENCRYPT_EMAIL: user@mail

可以在“DEFAULT_HOST:”字段中指定自定义域名。
可以在“LETSENCRYPT_HOST:”字段中指定Let’s Encrypt的域名。
同时,在“LETSENCRYPT_EMAIL:”字段中也需要填写联系邮箱。

networks:
  default:
    external:
      name: nginx-proxy_default

通过Nginx代理容器和Docker网络共享配置。

启动内容端的Docker容器。

$ docker compose up -d

确认行动

我们将在网络浏览器上确认内容是否显示。
此外,您可以使用以下命令检查Let’s Encrypt的SSL/TLS证书。

$ docker exec nginx-proxy-acme /app/cert_status

我们还可以检查Let’s Encrypt的SSL / TLS证书的更新确认。

$ docker exec nginx-proxy-acme /app/force_renew

让我们自动更新Let’s Encrypt的证书。

Docker容器被创建时,证书将自动更新,无需特别设置。据称证书每小时验证一次,并在60天内重新生成。

广告
将在 10 秒后关闭
bannerAds