Nginx上部署HTTPS + HTTP2

发布时间:2020-06-12 04:59:12 作者:zddnd
来源:网络 阅读:477

Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev(或者OpenSSL),且ln -s /usr/lib/x86_64-linux-gnu/libssl.so  /usr/lib/,然后在编译配置Nginx时要指定--with-http_ssl_module和--with-http_v2_module。另外,若要在本地运行openssl命令,要安装OpenSSL包,本人用的OpenSSL-1.0.2g。注:本文采用Ubuntu 16.04上的操作实例

  下图展示了数字证书(HTTPS中使用的由CA签名的公钥证书)的签名和验证原理:Nginx上部署HTTPS + HTTP2

 

 

 

 

  1. 二进制协议:HTTP2.0协议采用二进制格式,实现方便且健壮;HTTP1.x采用的是文本格式

  2. 头部压缩:HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源,头压缩能够很好的解决该问题

  3. 多路复用:多个请求和响应通过一个 TCP 连接并发完成,还支持请求优先级划分和流控制

  4. Server Push:服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端先解析 HTML 再发送这些请求。当客户端需要的时候,它们已经在客户端了

  下图是HTTP2 Frame 格式:RFC7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)

  Nginx上部署HTTPS + HTTP2

  Nginx上部署HTTPS + HTTP2

 

  1. 自签发证书:开发测试环境下可以在其他机器上去生成证书,然后再将所生成server.crt和server.key复制一份至Nginx的/usr/local/nginx/conf下即可

    $ cd /usr/local/nginx/conf
    $ openssl genrsa -des3 -out server.key 1024 #建议:2048$ openssl req -new -key server.key -out server.csr #证书签名请求(CSR)
    $ cp server.key server.key.org
    $ openssl rsa -in server.key.org -out server.key
    $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #证书签名
  2. 修改配置文件nginx.conf为减少CPU负载,建议只运行一个工作进程,并且开启keep-alive。另外,version 0.6.7以上的Nginx ssl_certificate和ssl_certificate_key的默认关联目录为nginx.conf所在的目录,默认文件名都为cert.pem

    Nginx上部署HTTPS + HTTP2

    worker_processes 1;
    server {
    
        server_name YOUR_DOMAINNAME_HERE;
        listen 443 ssl http2;# http2 is available only since OpenSSL version 1.0.2
        listen 80;
        if ($scheme = http) {
                rewrite ^(.*)$ https://$server_name$1 permanent;
        }
        ssl_certificate server.crt;
        ssl_certificate_key server.key;
        keepalive_timeout    70;
    }

    Nginx上部署HTTPS + HTTP2

     

  3. 重启NginxHTTPS在Nginx上的部署至此已近完毕,然后就可以通过ht t ps : / / YO U R _ D OM A I N N A ME _ H E R E来访问了。由于本例中采用自签发证书(不同于CA自签名的Root证书),在Chrome下将看到如图警告信息,表明该证书不受信任。浏览器在默认情况下内置了一些CA机构的Root证书,这些证书受到绝对信任。

    Nginx上部署HTTPS + HTTP2 

  另外,本人在Chromium 58.0.3029.110 和 Firefox 53.0.3 下均证实了HTTP2被成功启用:

  Nginx上部署HTTPS + HTTP2

 

  1. 在一台可信的计算机上生成私钥和CSR(Certificate Signing Requests)。有一些CA会为你生成密钥和CSR,但这样做明显不妥

  2. 受密码保护的密钥可以阻止在备份系统中被截获

  3. 在发现被截获后,撤回老的证书,生成新的密钥和证书

  4. 每年更新证书,总是使用最新的私钥

 

   下图展示了证书链的工作原理:

     Nginx上部署HTTPS + HTTP2 

 

  1. ssl开启HTTPS

    syntax:ssl [on|off]

    default:ssl off

    context:main, server

  2. ssl_certificate证书文件,默认证书和密钥都位于cert.pem中,该文件还可以包含其他证书。自version 0.6.7起,ssl_certificate的默认关联目录为nginx.conf所在的目录。

    syntax:ssl_certificate file

    default:ssl_certificate cert.pem

    context:main, server 

  3. ssl_certificate_key:证书密钥文件,默认密钥位于cert.pem中。自version 0.6.7起,ssl_certificate_key的默认关联目录为nginx.conf所在的目录。

    syntax:ssl_certificate_key file

    default:ssl_certificate_key cert.pem

    context:main, server

  4. ssl_client_certificate:Indicates file with certificates CA in PEM format, utilized for checking the client certificates.

    syntax:ssl_client_certificate file

    default:none

    context:main, server

  5. ssl_dhparamIndicates file with Diffie-Hellman parameters in PEM format, utilized for negotiating TLS session keys.

    syntax: ssl_dhparam file

    default: none

    context: main, server 

  6. ssl_ciphers:Directive describes the permitted ciphers. Ciphers are assigned in the formats supported by OpenSSL.

    syntax: ssl_ciphers file

    default: ssl_ciphers ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP

    context: main, server

    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

    Complete list can be looked with the following command:

    openssl ciphers

     

  7. ssl_prefer_server_ciphers:Requires protocols SSLv3 and TLSv1 server ciphers be preferred over the client's ciphers.

    syntax: ssl_prefer_server_ciphers [on|off]

    default: ssl_prefer_server_ciphers off

    context: main, server

  8. ssl_protocols:Directive enables the protocols indicated. TLS v1.0以上的版本是比较安全的,最好是弃用SSLv3以下的版本,SSLv2以下坚决不用

    syntax: ssl_protocols [SSLv2] [SSLv3] [TLSv1]

    default: ssl_protocols SSLv2 SSLv3 TLSv1

    context: main, server

  9. ssl_session_cache:The directive sets the types and sizes of caches to store the SSL sessions.

    syntax:ssl_session_cache off|none|builtin:size and/or shared:name:size

    default:ssl_session_cache off

    context:main, server

    ssl_session_cache builtin:1000 shared:SSL:10m;

     

  10. ssl_session_timeout:Assigns the time during which the client can repeatedly use the parameters of the session, which is stored in the cache.

    syntax:ssl_session_timeout time

    default:ssl_session_timeout 5m

    context:main, server


推荐阅读:
  1. 如何解决nginx找不到php文件的问题
  2. nginx中出现图片显示过慢,下载不完全的问题怎么办

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nginx ginx

上一篇:如何设置linux下xampp的phpmyadmin外网访问?

下一篇:rabbitMQ高级整合应用第四篇 消息监听适配器

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》