nginx 配置https
Posted QQ_851228082
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 配置https相关的知识,希望对你有一定的参考价值。
nginx 配置https步骤
本文参考Configuring HTTPS servers,要配置https需要配置以下几项,
- listen指令添加ssl参数
- 指定证书
- 指定私钥,不会发送到客户端
- 指定ssl协议,自定义可以提高加密等级
- 指定ssl加密套件,自定义可以提高加密等级
server
listen 443 ssl; //添加ssl参数
server_name www.example.com;
ssl_certificate www.example.com.crt;//指定证书
ssl_certificate_key www.example.com.key; //指定私钥
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; //指定协议
ssl_ciphers HIGH:!aNULL:!MD5; //指定加密套件
...
证书和私钥通常放在两个不同的文件中,都放在证书中时,服务器不会将私钥发送给客户端。客户端请求服务器时,服务器会将证书发送给客户端。默认的, nginx 使用ssl_protocols TLSv1 TLSv1.1 TLSv1.2
和 ssl_ciphers HIGH:!aNULL:!MD5
,这两个选项可以不配置。
可使用openssl生成自定义证书。
优化https
https很耗费cpu资源,尤其是在握手阶段,所以要优化https,
- 充分利用cpu
- 不少于实际cpu核数
- 复用tcp通道
- keepalive,默认75s
- 复用ssl
- ssl_session_timeout ,默认5分钟
//充分利用cpu
worker_processes auto;
http
//复用ssl,缓存10M,1M通常能存储4000个会话
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m; //默认5分钟
server
listen 443 ssl;
server_name www.example.com;
keepalive_timeout 70;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
...
证书链
有的浏览器会报警,有的浏览器不会,这可能是用了中间证书签发的证书,而这种情况可以把证书链打包进证书。
cat www.example.com.crt bundle.crt > www.example.com.chained.crt
同时支持http和https
server
listen 80;
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
...
一个证书支持多个域名
SNI,server name indication
ssl握手时,服务器端就需要知道客户端请求的哪个域名并把证书发给客户端,所以在ssl握手的client hello这一步,客户端发过来请求的域名,这就是server name indication。如果不发送请求域名的话,就会导致,一台server不支持多个域名证书。
以上是关于nginx 配置https的主要内容,如果未能解决你的问题,请参考以下文章
Nginx——Nginx启动报错Job for nginx.service failed because the control process exited with error code(代码片段