前言
在docker中配置https和在服务器上配置是一样的,唯一不同的是需要映射443端口,否则配置后无法进行访问,这里的443端口是指宿主机到docker容器。
1.申请并下载ssl证书
ssl证书是收费的,如果加密需求比较高,建议购买加密等级高的证书,如果一般使用,则可以申请免费的Dv证书。阿里云是每年每个账号下可以申请20个免费的ssl证书,至于其他网站也有相应的免费证书。
阿里云:https://promotion.aliyun.com/ntms/act/sslbuy?utm_content=se_1010363122
到此即可拥有20个免费的ssl证书了
选择创建证书
选择证书申请
输入域名,不需要带前缀,比如:baidu.com
域名验证方式自动DNS验证即可,不需要其他验证,无需我们操作。
点击验证即可,如果验证失败,则过一会儿再点击验证即可。可能存在延时。
然后点击下载》nginx
下载之后得到两个文件,我们将文件放入cert文件夹中,然后上传到我们的服务器中。
docker环境下,则需要将文件拷贝到docker容器中,非docker环境则忽略此步。
/home/cert则是我服务器目录,mynginx是我的docker容器名称。
docker cp /home/cert mynginx:/etc/nginx/
然后更改配置文件,docker中nginx默认是使用的/etc/nginx/conf.d/default.conf配置,由于是扫描的*.conf文件,则可以配置多个,这里不做赘述。
关键配置如下:
listen 443 ssl;
server_name 你的域名比如:baidu.com www.baidu.com;
ssl_certificate /etc/nginx/cert/xxxx.com.pem;
ssl_certificate_key /etc/nginx/cert/xxxx.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /home/www;
index index.html index.htm;
}
配置后需要重启docker容器。
查看docker容器是否启用443
docker ps
查看nginx容器的映射端口,如下则是开启了443端口。
如果没有开启443端口映射,则上面配置的ssl证书无法生效,访问则会打不开网站。
解决办法:
先停止docker内所有容器,因为需要停止docker 如果存在其他应用,则可以删除nginx容器后重新创建,在创建时-p 443:443
docker run -d --name mynginx -p 80:80 -p 443:443 nginx
如果重新创建则不需要执行这里,这是手动修改配置,增加443端口映射
systemctl stop docker
找到配置文件,/var/lib/docker/容器ID/hostconfig.json
编辑,找到
"PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"80"}]]},
修改为
"PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"80"}],"443/tcp":[{"HostIp":"","HostPort":"443"}]},
保存,然后启动docker
systemctl start docker
启动容器
docker start mynginx
然后即可使用https访问