如何使用 Docker 和 Nginx 图像实现 (Certbot) ssl
How to implement (Certbot) ssl using Docker with Nginx image
我正在尝试使用 Docker 和 nginx 图像在我的应用程序中实现 ssl。我有两个应用程序,一个用于后端 (api),另一个用于前端 (admin)。它在端口 80 上使用 http,但我需要使用 https。这是我的 nginx 配置文件...
upstream ulib-api {
server 10.0.2.229:8001;
}
server {
listen 80;
server_name api.ulib.com.br;
location / {
proxy_pass http://ulib-api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
client_max_body_size 100M;
}
upstream ulib-admin {
server 10.0.2.229:8002;
}
server {
listen 80;
server_name admin.ulib.com.br;
location / {
proxy_pass http://ulib-admin;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
client_max_body_size 100M;
}
我得到了一些教程,但都是使用 docker-compose。我需要用 Docker 文件安装它。谁能给我一盏灯?
...我在 AWS 上使用 ECS 实例,项目正在使用 CI/CD
构建
这只是其中一种可能的方式:
首先使用 certbot
颁发证书。您最终会得到几个 *.pem
文件。
有很多关于在不同系统上安装和 运行ning certbot
的教程,我使用 Ubuntu 和命令 certbot --nginx certonly
。您需要 运行 在您的域 上执行此命令 因为 certbot
将通过一系列挑战来检查您是否是该域的所有者。
其次,您创建 nginx
个容器。此容器需要适当的 nginx.conf
和 link 证书。我使用 docker 卷,但这不是唯一的方法。
我的 nginx.conf
如下所示:
http {
server {
listen 443 ssl;
ssl_certificate /cert/<yourdomain.com>/fullchain.pem;
ssl_certificate_key /cert/<yourdomain.com>/privkey.pem;
ssl_trusted_certificate /cert/<yourdomain.com>/chain.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
...
}
}
最后,您 运行 nginx
连接了正确的卷:
docker run -d -v $PWD/nginx.conf:/etc/nginx/nginx.conf:ro -v $PWD/cert:/cert:ro -p 443:443 nginx:1.15-alpine
通知:
我将 $PWD/cert
映射到容器中作为 /cert
。这是一个文件夹,其中存储了 *.pem
个文件。他们住在 ./cert/example.com/*.pem
在 nginx.conf
中,您使用 ssl_...
指令引用这些证书
您应该公开端口 443
以便能够连接
我正在尝试使用 Docker 和 nginx 图像在我的应用程序中实现 ssl。我有两个应用程序,一个用于后端 (api),另一个用于前端 (admin)。它在端口 80 上使用 http,但我需要使用 https。这是我的 nginx 配置文件...
upstream ulib-api {
server 10.0.2.229:8001;
}
server {
listen 80;
server_name api.ulib.com.br;
location / {
proxy_pass http://ulib-api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
client_max_body_size 100M;
}
upstream ulib-admin {
server 10.0.2.229:8002;
}
server {
listen 80;
server_name admin.ulib.com.br;
location / {
proxy_pass http://ulib-admin;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
client_max_body_size 100M;
}
我得到了一些教程,但都是使用 docker-compose。我需要用 Docker 文件安装它。谁能给我一盏灯?
...我在 AWS 上使用 ECS 实例,项目正在使用 CI/CD
构建这只是其中一种可能的方式:
首先使用 certbot
颁发证书。您最终会得到几个 *.pem
文件。
有很多关于在不同系统上安装和 运行ning certbot
的教程,我使用 Ubuntu 和命令 certbot --nginx certonly
。您需要 运行 在您的域 上执行此命令 因为 certbot
将通过一系列挑战来检查您是否是该域的所有者。
其次,您创建 nginx
个容器。此容器需要适当的 nginx.conf
和 link 证书。我使用 docker 卷,但这不是唯一的方法。
我的 nginx.conf
如下所示:
http {
server {
listen 443 ssl;
ssl_certificate /cert/<yourdomain.com>/fullchain.pem;
ssl_certificate_key /cert/<yourdomain.com>/privkey.pem;
ssl_trusted_certificate /cert/<yourdomain.com>/chain.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
...
}
}
最后,您 运行 nginx
连接了正确的卷:
docker run -d -v $PWD/nginx.conf:/etc/nginx/nginx.conf:ro -v $PWD/cert:/cert:ro -p 443:443 nginx:1.15-alpine
通知:
我将
$PWD/cert
映射到容器中作为/cert
。这是一个文件夹,其中存储了*.pem
个文件。他们住在./cert/example.com/*.pem
在
nginx.conf
中,您使用ssl_...
指令引用这些证书您应该公开端口
443
以便能够连接