一、HTTPS 简介
HTTPS(超文本传输安全协议)HTTP的安全版本。HTTPS 利用HTTP进行同行,但是使用SSL协议来加密数据。
HTTPS 协议的URL/URI 由 "https:// " 组成。默认使用443 端口。
二、HTTPS 配置步骤
2.1 步骤概览
- 申请证书(如果使用的是云主机,可在阿里云或者腾讯云申请较为方便)。腾讯云颁发证书的速度更快。
- 将证书上传至Nginx所在服务器
- 配置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://" 开头
如上图所示,左上角出现了一把绿锁,说明我们的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。