如何为 docker 容器中的 ngnix 配置 https?

我的 nginx 运行在 docker 容器中,我想将现有的 http 升级为 https, 提高网站的安全性

1 个解决方案

AllenJiang
中间件研发,关注微信公众号 : 小哈学Java, 回复"666", 即可免费领取10G学习&面试资料

第一步:首先你需要购买 https 证书

也有免费的 https 证书,例如阿里云就提供一年期限的免费 https 证书,具体查看此链接:https://www.exception.site/question/50, 申请后,需要等待阿里云签发,签发完成后,我们就可以下载证书了,这里选择 nginx 证书:

第二步:解压上传到服务器

下载下来后,解压,我们可以看到包含两个文件:

接下来,我们要在 docker nginx 容器的挂载目录下创建 cert 目录:

将解压后的两个文件上传至该目录。

第三步:修改配置文件

需要说一下我运行在 docker container 中的 nginx 版本,信息如下:

因为我的 nginx 相对版本较高,可能和大家的配置文件目录有些诧异,但整体的没啥大的问题,该怎么配置,还是怎么配置:

首先创建 ssl.conf 配置文件,专门用来配置 ssl 相关参数:

根据阿里云的文档说明加上 ssl 相关参数,同时监听 443 端口。

再贴下我的 defaut.conf 配置文件内容:

可以看到,http 80 端口主要做了一下重定向,若前端使用的 http 访问,这里会重定向到 https 协议。

第四步:启动新的 nginx container

如果已有 nginx container 正在运行,先删除掉:

docker rm -f nginx

启动新的 nginx container:

docker run -p 80:80 -p 443:443 --name nginx -v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v /docker/nginx/conf.d:/etc/nginx/conf.d -v /docker/nginx/logs:/var/log/nginx -v /docker/nginx/cert:/etc/nginx/cert -d nginx:alpine

注意,这里同时映射了 80 和 443 端口,挂载相关目录,已经证书目录,查看运行结果:

启动成功,然后你就可以使用 https 访问网站了!

注意:因为我使用的阿里云服务器,同时还需要将 443 端口加入到安全组中,才能保证外界的正常访问 https 端口