支持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天内重新生成。