我正在尝试使用具有nginx映像的Docker在我的应用程序中实现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。我需要使用Dockerfile安装它。谁能给我个灯?
...我正在AWS上使用ECS实例,并且项目正在使用CI / CD构建
答案 0 :(得分:1)
这只是可能的方法之一:
使用certbot
的第一张证书。您将最终得到几个*.pem
文件。
有很多关于在不同系统上安装和运行certbot
的教程,我将Ubuntu与命令certbot --nginx certonly
一起使用。您需要在您的域上运行该命令,因为certbot
将通过一系列挑战检查您是否是域的所有者。
第二,您创建nginx
容器。您将需要适当的nginx.conf
并将证书链接到此容器。我使用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
以便能够连接