网站速度优化之反代Cloudflare
本站实战!通过GIA服务器反向代理cloudflare,提高网站国内访问速度,增加网站PV、UV。
本站服务器都在美国,源服务器性能好,但是是普通线路,所以一直套着Cloudflare,没太在意速度问题,前段时间晚上打开网站,虽然挂着科学上网也奇慢无比,让人无法忍受。Cloudflare果真变成了减速CDN了。正好手上有搬瓦工的GIA服务器,网络好,由于经济原因服务器性能不咋样,也没在上面建站。由于Cloudflare慢所以想到直接反代Cloudflare,让网站访问速度能够得到提升。一段时间下来,经过观察速度确实有较大提升,独立访问数uv最高期比原来多了近四倍,平常也比原来多二倍左右;网页浏览量pv也提升了约两成。
搬瓦工GIA服务器好是好,就是价格不便宜。
为何不直接反代源服务器呢,而是要反代Cloudflare呢?反代Cloudflare主要基于以下几点考虑,一是Cloudflare可以缓存很多图片、js等,减轻源服务器负担。二是能够用Cloudflare里的一些waf规则。三是Cloudflare提供永远在线(Always Online)功能,维护服务器的时候,访客、蜘蛛也能看到网站缓存,四是在境外Cloudflare的速度非常快,比直连源服务器有时还快。五是Cloudflare提供了br压缩,反代服务器会直接转发br压缩后的内容,加快访问者的 HTTPS 流量的页面加载时间。
反代Cloudflare主要原理是:新建一个子网域本例中是a1.bandwh.com,由cloudflare进行代理。主域名不由cloudflare代理,直接解析为反代服务器ip。反代服务器反代子网域a1.bandwh.com,反代服务器申请Let’s Encrypt的ssl证书。
要解决的问题是子网域a1.bandwh.com不能被直接访问到,对搜索引擎来讲会影响到主站的权重。本例中通过自定义请求头解决了这个问题。
一、反代服务器Nginx配置代码:
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.bandwh.com bandwh.com; #ssl部分略去 #PROXY-START #动态请求不处理 location ~* \.(php|jsp|cgi|asp|aspx)$ { resolver 8.8.8.8 8.8.4.4 ipv6=off; proxy_pass https://a1.bandwh.com; proxy_set_header Host a1.bandwh.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_ssl_name $host; proxy_ssl_server_name on; proxy_set_header isbandwh "888"; } #全局不缓存 location / { resolver 8.8.8.8 8.8.4.4 ipv6=off; proxy_pass https://a1.bandwh.com; proxy_set_header Host a1.bandwh.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_ssl_name $host; proxy_ssl_server_name on; proxy_set_header isbandwh "888"; add_header X-Cache $upstream_cache_status; #Set Nginx Cache proxy_ignore_headers Set-Cookie Cache-Control expires; add_header Cache-Control no-cache; expires 12h; #启用hsts add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header Referrer-Policy "strict-origin" always; } #静态资源缓存30天 location ~* \.(gif|jpg|jpeg|png|webp|swf|ioc|ico|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|css|js)$ { resolver 8.8.8.8 8.8.4.4 ipv6=off; proxy_pass https://a1.bandwh.com; proxy_set_header Host a1.bandwh.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_ssl_name $host; proxy_ssl_server_name on; proxy_set_header isbandwh "888"; add_header X-Cache $upstream_cache_status; expires 30d; access_log off; } #PROXY-END }
由于是Wordpress搭建的网站,对php、html等不进行缓存,只对图片、CSS、JS脚本进行了缓存,否则会严重影响评论、后台管理等功能。resolver 8.8.8.8 8.8.4.4 ipv6=off;
加入这句是因为搬瓦工GIA服务器没有IPV6地址,不加入这句就会报错找不到Cloudflare的ipv6地址。反代服务器有ipv6地址的可以不加这句。proxy_pass https://a1.bandwh.com;
必须要写成子网域,不能写成Cloudflare的ip地址,除非你弄了个Cloudflare partner。proxy_set_header Host a1.bandwh.com;
主机头名为a1.bandwh.comproxy_ssl_name $host;
proxy_ssl_server_name on;
这两个必须这么写,不然出现ssl混乱。proxy_set_header isbandwh "888";
这个是自定义的请求头。增加了isbandwh=888。Cache、no-cache
对缓存的控制。
二、源服务器设置
要禁止访客能直接访问a1.bandwh.com,需对源服务器Nginx进行设置。源服务器在域名处添加a1.bandwh.com域名。
server { #略 server_name www.bandwh.com a1.bandwh.com bandwh.com; #禁止a1.bandwh访问 if ( $http_isbandwh != 888 ) { return 403; } #略 }
对请求头判断不含888的话一律403,直接访问a1.bandwh.com是带不了888请求头的,只能返回403错误,也就是只能从主域名www.bandwh.com来访问。
源服务器也不要开启重定向等等。
三、其他事项
反代Cloudflare最好将Cloudflare里的安全性
–自动程序
—自动程序攻击模式
关闭。不然可能会有影响。另外一些自定义的防火墙waf规则也会失效,因为在Cloudflare看来都是反代服务器在访问你的网站。
如果你用的是Wordpress的话,反代Cloudflare评论IP地址就会变为Cloudflare的地址,后台也会有问题。比如打不开Wordpress后台所有文章里的下一页,可以在Wordpress的wp-config.php
文件/* That's all, stop editing! Happy publishing. */
上方加入以下内容:
/**SSL反向代理添加内容-Start*/ if((!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) || (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) { $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; $_SERVER['HTTPS'] = 'on'; } $_SERVER['HTTP_HOST'] = 'www.bandwh.com'; /**SSL反向代理添加内容-End*/ /**获取真实用户ip-Start*/ if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']); $_SERVER['REMOTE_ADDR'] = $list[0]; } /**获取真实用户ip-End*/
$_SERVER['HTTP_HOST'] = 'www.bandwh.com';
这句必须加,解决后台http方式找不到路径的问题,不然Wordpress后台有各种问题。
技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/web/797.html