美文网首页
Nginx HTTPS 配置

Nginx HTTPS 配置

作者: 037251a7c483 | 来源:发表于2017-07-04 17:05 被阅读923次

    一、HTTPS 简介

    HTTPS(超文本传输安全协议)HTTP的安全版本。HTTPS 利用HTTP进行同行,但是使用SSL协议来加密数据。

    HTTPS 协议的URL/URI 由 "https:// " 组成。默认使用443 端口。

    二、HTTPS 配置步骤

    2.1 步骤概览

    1. 申请证书(如果使用的是云主机,可在阿里云或者腾讯云申请较为方便)。腾讯云颁发证书的速度更快。
    2. 将证书上传至Nginx所在服务器
    3. 配置Nginx SSL

    2.2 Nginx 配置

    将申请的证书发送到Nginx服务器上,一般将证书放在nginx主目录下的ssl目录中。下面是我的配置:

    • 证书存放目录
    /usr/local/nginx-1.10.3/ssl/Nginx
    
    • nginx.conf

    在nginx.conf 已经包含一个server(80)的基础上,再增加一个server,用于配置HTTPS。这样既可以访问http协议的网站,也能访问使用HTTPS的网站

        server {
            listen       443 ssl;
            keepalive_timeout   70;
            server_name  nginxhttp2.lomark.cn;
    
            ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
            ssl_certificate  /usr/local/nginx-1.10.3/ssl/Nginx/1_nginxhttp2.lomark.cn_bundle.crt;
            ssl_certificate_key  /usr/local/nginx-1.10.3/ssl/Nginx/2_nginxhttp2.lomark.cn.key;
            ssl_session_cache   shared:SSL:10m;
            ssl_session_timeout 10m;
            charset koi8-r;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
    • 重启Nginx,查看效果
      注意还要开启443端口的访问权限。

    访问网站时要使用"https://" 开头

    image.png

    如上图所示,左上角出现了一把绿锁,说明我们的HTTPS 配置成功了.

    2.3 SSL 参数详解

    • listen 443 ssl
      将ssl作为listen指令的参数,这是官方推荐的做法。如果不这么写,则使用ssl指令开开启ssl的支持。如下:
    listen  443;
    ssl on;
    
    • ssl_buffer_size
    Syntax: ssl_buffer_size size;
    Default:    
    ssl_buffer_size 16k;
    Context:    http, server
    

    设置用于发送数据的缓冲区的大小。默认大小是 16K,当发送数据大的响应时,这是最小的开销。为了最小化第一个字节的时间,使用较小的值可能是有益的,例如:

    ssl_buffer_size 4k;
    
    • ssl_certificate
      指定PEM格式的证书文件(有的证书以PEM格式结尾)。

    • ssl_certificate_key
      指定PEM格式的密钥文件路径。

    • ssl_ciphers

    Syntax: ssl_ciphers ciphers;
    Default:    ssl_ciphers HIGH:!aNULL:!MD5;
    Context:    http, server
    

    指定启用加密算法。

    • ssl_protocols
    Syntax: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
    Default:    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    Context:    http, server
    

    启用指定的协议.

    • ssl_session_cache
    Syntax: ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
    Default:    ssl_session_cache none;
    Context:    http, server
    

    设置存储会话参数的缓存的类型和大小。 缓存可以是以下类型之一:

    off: 严格禁止使用会话缓存:nginx明确告诉客户端会话可能不被重用。

    none:会话高速缓存的使用被轻轻地禁止:nginx告诉客户端会话可能被重用,但实际上并不将会话参数存储在缓存中。

    builtin:一个内置OpenSSL的缓存; 仅由一个工作进程使用。 缓存大小在会话中指定。 如果没有给出大小,则等于20480次会话。 使用内置缓存可能会导致内存碎片。

    shared:在所有工作进程之间共享缓存。 缓存大小以字节为单位指定; 一兆字节可以存储约4000个会话。 每个共享缓存应具有任意名称。 具有相同名称的缓存可用于多个虚拟服务器。

    两种缓存类型可以同时使用,例如:

    ssl_session_cache builtin:1000 shared:SSL:10m;
    

    但只使用共享缓存而不使用内置缓存应该更有效率。

    • ** ssl_session_timeout**
    Syntax: ssl_session_timeout time;
    Default:    ssl_session_timeout 5m;
    Context:    http, server
    

    指定客户端可以重用会话参数的时间。

    三、HTTP访问强制跳转至HTTPS

    用户使用HTTP时,我们可以使用rewrite 指令将URL 重写。

    rewrite ^(.*)$ https://$host$1 permanent;
    

    完整的配置文件:

    user  nginx ;
    worker_processes  4;
    error_log  logs/error.log;
    pid        logs/nginx.pid;
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
        gzip  on;
        server {
        listen  80;
        server_name  nginxhttp2.lomark.cn;
        rewrite ^(.*)$ https://$host$1 permanent;
            location / {
            root html;
                index index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    
        server {
            #listen       443 ssl;
            listen  443;
            ssl on;
            keepalive_timeout   70;
            server_name  nginxhttp2.lomark.cn;
    
            ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate  /usr/local/nginx-1.10.3/ssl/Nginx/1_nginxhttp2.lomark.cn_bundle.crt;
            ssl_certificate_key  /usr/local/nginx-1.10.3/ssl/Nginx/2_nginxhttp2.lomark.cn.key;
            ssl_session_cache   shared:SSL:10m;
            ssl_session_timeout 10m;
            charset koi8-r;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
    
            location = /50x.html {
                root   html;
            }
        }
    }
    

    重启Nginx后,在浏览器中以HTTP协议访问时,Nginx会自动将访问跳至HTTPS。

    相关文章

      网友评论

          本文标题:Nginx HTTPS 配置

          本文链接:https://www.haomeiwen.com/subject/aaothxtx.html