一、基本配置
# 开启ssl认证,以前版本方法,现在推荐使用listen PORT ssl;
Syntax: ssl on | off;
Default: ssl off;
Context: http, server
# 指定证书文件
Syntax: ssl_certificate file;
Default: —
Context: http, server
# 指定私钥文件
Syntax: ssl_certificate_key file;
Default: —
Context: http, server
# 启用指定版本的协议,一般不需要额外设置,默认够用了
Syntax: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
Default: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Context: http, server
二、优化配置
(1)缓存相关
# 设置存储会话参数的缓存的类型和大小
Syntax: ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
Default: ssl_session_cache none;
Context: http, server
缓存可以是以下任何一种:
▪ off:禁止使用会话缓存,客户端不得复用会话连接。
▪ none:禁止使用会话缓存,但是客户端会话连接可以被复用,但实际上并没有在缓存中存储会话参数。
▪ builtin:内置OpenSSL的缓存。仅能由一个nginx工作进程使用,缓存大小在会话中指定。如果未指定大小,则等于20480个会话。使用内置缓存可能会导致内存碎片。
▪ shared:所有工作进程之间共享的高速缓存。高速缓存大小以字节为单位;一个兆字节可以存储大约4000个会话。每个共享高速缓存应具有任意名称,具有相同名称的高速缓存可以在多个虚拟服务器中使用。
注意:内置缓存builtin和共享缓存shared可以同时使用,但是仅使用共享缓存而不使用内置缓存应该会更有效率。
例子:ssl_session_cache builtin:1000 shared:SSL:10m;
# 指定客户端可以复用ssl连接的超时时间,一般和上面参数配合使用,即在建立完ssl握手后如果断开连接,在这个时间内再次连接,是不需要再次建立握手,可以复用之前的连接。
Syntax: ssl_session_timeout time;
Default: ssl_session_timeout 5m;
Context: http, server
(2)加密套件
# 指定启用的加密套件
Syntax: ssl_ciphers ciphers;
Default: ssl_ciphers HIGH:!aNULL:!MD5;
Context: http, server
注意:加密套件应该是OpenSSL库可以理解的格式指定,可以使用openssl ciphers -v命令查看加密套件列表。
例子:ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# 指定当使用SSLv3和TLS协议时,服务器加密套件应优先于客户端加密套件。
Syntax: ssl_prefer_server_ciphers on | off;
Default: ssl_prefer_server_ciphers off;
Context: http, server
三、配置示例
server {
listen 80;
server_name cp.test.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name cp.test.com;
root /wordpress;
ssl_certificate ssl_key/cp.test.com.pem;
ssl_certificate_key ssl_key/cp.test.com.key;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
keepalive_timeout 300s;
location / {
index index.php;
}
location ~* \.(png|jpg|jpeg)$ {
root /wordpress;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}