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.2ssl_ciphers HIGH:!aNULL:!MD5,这两个选项可以不配置。
可使用openssl生成自定义证书。

优化https

https很耗费cpu资源,尤其是在握手阶段,所以要优化https,

  • 充分利用cpu
    • 不少于实际cpu核数
  • 复用tcp通道
  • 复用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 配置https

[Nginx]-外部多端口映射Https443端口配置

Nginx限流配置

Nginx下配置网站SSL实现https访问本站就是用的这方法

Nginx 3.使用配置

为 docker 中的 nginx 配置 https