网站速度优化之反代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证书。

网站速度优化之反代Cloudflare

要解决的问题是子网域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.com
proxy_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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注