网站在使用https以后,会在tcp三次会话之上多了两个RTT,一般会有50ms-300ms的延迟,为了提供https的响应速度,需要对https进行优化,另外http2.0还没有大范围普及,一些老的浏览器还不支持,但大部分会支持spdy,为了兼容,我们需要网站对两则都支持.
cloudflare公司提供了两个补丁给nginx,一个用于 dynamic tls records ,一个同时支持httpv2 和spdy 有点小遗憾的是,这两个补丁仅支持nginx-1.9.7 见(详情) 另外在移动设备端,google的 CHACHA20/POLY1305加密算法 提供更好的性能,cloudflare 也给openssl-1.0.2h提供一个补丁,可以根据客户端择优选择加密算法。
因为补丁文件,使用了C++ 11的新特性,故在centos6 和centos7上面的gcc都是不支持的,编译会报错,gcc版本必须升级到4.7及以上,如果自己编译GCC也可以,但相应的也必须升级binutils 到2.22 以上,不让的话,即使你升级了gcc,编译也照样会报错。
这里为了方便,我选择了安装 devtoolset-3来解决,安装只需要执行几条命令就可以了,非常简单
1,yum install centos-release-scl-rh centos-release-scl
2,yum check-update
3,yum install devtoolset-3-gcc devtoolset-3-gcc-c++
(yum install devtoolset-4-gcc devtoolset-4-gcc-c++)安装devtoolset-4
4,source /opt/rh/devtoolset-3/enable(加载gcc环境变量等)(参考:下面文章)
下载文件:
一,nginx和openssl 的patch文件
git clonehttps://github.com/cloudflare/sslconfig
二,nginx-1.9.7
wget -c https://nginx.org/download/nginx-1.9.7.tar.gz
三,openssl-1.0.2h
wget -O openssl.zip -c https://github.com/openssl/openssl/archive/OpenSSL_1_0_2h.zip
分别解压文件
tar -zxvf nginx-1.9.7.tar.gz
cd nginx-1.9.7
patch -p1 <patch -p1 ..<sslconfig/patches/nginx__dynamic_tls_records.patch
patch -p1 <patch -p1 ..<sslconfig/patches/nginx__http2_spdy.patch
unzip OpenSSL_1_0_2h.zip
cd openssl-1.0.2h
patch -p1 ..<sslconfig/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102g.patch
cp openssl-1.0.2h /usr/local/openssl
cd nginx-1.9.7
./configure --prefix=/webdata/opt/local/nginx --with-openssl=/usr/local/openssl --with-http_v2_module --with-http_spdy_module --with-http_ssl_module --with-http_gzip_static_module
make;make install
最后贴一下ssl的一个优化的配置文件如下:
ssl on;
ssl_certificate /webdata/nginx_conf/ssl/server.crt;
ssl_certificate_key /webdata/nginx_conf/ssl/server.key;
ssl_session_timeout 48h;
##有些浏览器不支持下面基于session_tickets复用,所以两种方案都配置了
ssl_session_cache shared:SSL:50m;
##这是基于tickets的session复用,因为负载均衡多机要使用共享的session_ticket所以必须指定 ssl_session_ticket_key,
ssl_session_tickets on;
ssl_session_ticket_key /webdata/nginx_conf/ssl/session_ticket.key ;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_dhparam /webdata/nginx_conf/ssl/dhparams.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /webdata/nginx_conf/ssl/certchain.crt;
resolver 223.5.5.5 8.8.8.8 valid=300s;
resolver_timeout 6s;
#################################为了安全nginx在浏览器中增加以下头部####################################
##HSTS(ngx_http_headers_module is required)
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;"; #比301/302更好的一个实现,省一次http请求
add_header X-Frame-Options SAMEORIGIN; #是否允许本域意外的页面嵌入,SAMEORIGIN指不允许本域以外的页面嵌入
#add_header X-Content-Type-Options nosniff; #禁止浏览器对Content-Type 类型的猜测(sniff)
#add_header X-Xss-Protection: 1; mode=block
## 增加CSP头部信息,CSP是W3C组织2015年4月份提出的一个草案,对mixed内容进行自动转https,需要浏览器支持,CPS只对schema转换,对域外的引用不予以转换,详情见:
##https://www.w3.org/TR/mixed-content/
add_header Content-Security-Policy upgrade-insecure-requests;
##########################################################################################################
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!