给nginx Patch cloudflare提供的补丁

网站在使用https以后,会在tcp三次会话之上多了两个RTT,一般会有50ms-300ms的延迟,为了提供https的响应速度,需要对https进行优化,另外http2.0还没有大范围普及,一些老的浏览器还不支持,但...

网站在使用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;

##########################################################################################################



  • 发表于 2016-08-17 02:50
  • 阅读 ( 502 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章