如何在nginx上配置https服务
证书准备
如果是线上服务,需要使用经过CA认证中心认证之后的证书(不然用户浏览器会报不安全警告)。如果仅作测试使用,则可以跳过认证中心,使用自签名证书。
nginx配置
server {
listen 443 ssl;
server_name ssl.csw.com;
#证书文件
ssl_certificate server.crt;
#私钥文件
ssl_certificate_key server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
try_files $uri $uri/ /index.php?$query_string;
root /ssl/public;
index index.html index.htm index.php;
}
...
}
- https默认使用443端口
- ssl_certificate:证书文件地址,确保nginx启动用户有权读取
- ssl_certificate_key:私钥文件地址,确保nginx启动用户有权读取
- ssl_protocols和ssl_ciphers指令可以用来强制用户连接只能引入SSL/TLS那些强壮的协议版本和强大的加密算法。从1.0.5版本开始,nginx默认使用“ssl_protocols SSLv3 TLSv1”和“ssl_ciphers HIGH:!aNULL:!MD5”,所以只有在之前的版本,明确地配置它们才是有意义的。从1.1.13和1.0.12版本开始,nginx默认使用“ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2”。
测试配置是否有效
nginx -t
没有报错的话,说明配置无误,重启nginx就可以通过https方式访问站点了
浏览器信任
我本地用的是自签名证书,主流的浏览都会报危险警报,信任就可以了(这个操作其实很危险,很可能会信任一些危险的网站)。