如何使用Docker和Nginx映像实现(Certbot)ssl

问题描述 投票:0回答:1

我正在尝试使用带有nginx映像的Docker在我的应用程序中实现ssl。我有两个应用程序,一个用于后端(api),另一个用于前端(管理员)。它在端口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构建

docker ssl nginx certbot
1个回答
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以便能够连接
© www.soinside.com 2019 - 2024. All rights reserved.