docker nginx 配置ssl,实现https
2019-09-05 16:06:35.0
nginx配置https总览
在nginx配置ssl实现https,简单来说分为三个步骤:
1 上传ssl证书等文件
将 1_www.domain.com_bundle.crt 和 2_www.domain.com.key 上传到nginx配置文件的目录旁边。
这两个文件分别为 证书文件和密钥文件 。
2 配置server节点监听443端口
进行以下配置
server {
listen 443; #SSL 访问端口号为 443
server_name www.domain.com; #填写绑定证书的域名
ssl on; #启用 SSL 功能
ssl_certificate 1_www.domain.com_bundle.crt; #证书文件名称
ssl_certificate_key 2_www.domain.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; #请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_prefer_server_ciphers on;
location / {
root /var/www/www.domain.com; #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
index index.html index.htm;
}
}
或较高版本的nginx可如下配置:
server {
listen 443 ssl; #SSL 访问端口号为 443 并启用 SSL 功能
server_name www.domain.com; #填写绑定证书的域名
ssl_certificate 1_www.domain.com_bundle.crt; #证书文件名称
ssl_certificate_key 2_www.domain.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; #请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_prefer_server_ciphers on;
location / {
root /var/www/www.domain.com; #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
index index.html index.htm;
}
}
注意:
这里要确保两个文件的位置是相对与nginx.conf配置文件的位置。如果在nginx.conf 文件中使用了incude,而这个server节点配置在其他文件中,则路径还是相对于nginx.conf文件的位置。
3 修改80端口的配置
修改80端口的配置可以让http的url转发到https的url。
server {
listen 80;
server_name www.domain.com; #填写绑定证书的域名
rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https
}
常见文件位置问题
证书文件和密钥文件的位置是相对与nginx.conf配置文件的位置。如果在nginx.conf 文件中使用了incude,而这个server节点配置在其他文件中,则路径还是相对于nginx.conf文件的位置。 如下图:
docker中ssl文件的位置
docker 中,nginx容器如果没有挂载ssl文件所在的目录,则需要手动将这两个文件复制在容器内部的nginx.conf文件旁边。如下图:
复制可使用 docker cp 命令。
验证ssl配置的正确性
在sbin目录下,执行 nginx -t
开放https 443端口
在主机的防火墙需要开放443端口,此外,如果还配置了云服务其的安全组,也需要开放443端口。
在docker容器中,需要重新运行nginx,并添加443端口的端口映射。
2019-09-05 16:06:35.0