ngx_http_ssl_module模块提供对HTTPS必要的支持。
这个模块不是系统默认的内建模块, 需要采用–with-http_ssl_module指令开启相关的配置。
这个模块需要OpenSSL库的支持
1、ssl on | off;
为指定虚拟机启用HTTPS protocol,建议用listen指令代替
可用位置:http, server
2、ssl_certificate file;
当前虚拟主机使用PEM格式的证书文件
可用位置:http, server
3、ssl_certificate_key file;
当前虚拟主机上与其证书匹配的私钥文件
可用位置:http, server
4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssl协议版本,默认为后三个
可用位置:http, server
5、ssl_ciphers ciphers;
默认: ssl_ciphers HIGH:!aNULL:!MD5;
指定启用的密码。密码以OpenSSL库理解的格式指定,例如:
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4 + RSA:+ HIGH:+ MEDIUM:+ LOW:+ SSLv2:+ EXP;
可用位置: http, server
6、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
[shared:name:size]:在各worker之间使用一个共享的缓存
可用位置:http, server
7、ssl_session_timeout time;
客户端连接可以复用sslsession cache中缓存的ssl参数的有效时长,默认5m
可用位置:http, server
8、ssl_prefer_server_ciphers on | off;
指定在使用SSLv3和TLS协议时,服务器密码应优先于客户端密码。可以使用server服务器的偏好来使用openssl的加密算法套件,openssl提供了算法套件的偏好的配置功能。
可用位置:http, server
示例:
http{
#http节点中可以添加多个server节点
server{
#监听443端口
listen 443;
server_name yourweb.com;
ssl on;
ssl_certificate /path/xx.pem;
ssl_certificate_key /path/xx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#我们使用阿里云官方文档中的ssl_ciphers来配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
root /usr/local/service/ROOT;
index index.html;
}
}
}
到这里还不行,因为如果用户使用的是http协议进行访问,那么默认打开的端口是80端口,所以我们需要做一个重定向,我们在上一个代码块的基础上增加一个server节点提供重定向服务。
http{
server{
listen 443;
server_name yourweb.com;
ssl on;
ssl_certificate /path/xx.pem;
ssl_certificate_key /path/xx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
root /usr/local/service/ROOT;
index index.html;
}
}
server{
listen 80;
server_name baofeidyz.com;
rewrite ^/(.*)$ https://baofeidyz.com:443/$1 permanent;
}
}
网友评论