Nginx HTTPS 配置

一、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://" 开头

Nginx HTTPS 配置_第1张图片
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 配置)