如何为 docker 容器中的 ngnix 配置 https?
我的 nginx 运行在 docker 容器中,我想将现有的 http 升级为 https, 提高网站的安全性
1 个解决方案
第一步:首先你需要购买 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 端口