本站服务器都在美国,源服务器性能好,但是是普通线路,所以一直套着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

评论列表(2条)
您好,安照您的教程部署后发现wordpress访问分类目录时无法跳转,无法查看文章
@凤雏:无法跳转,无法查看文章的原因可能为源站伪静态配置的原因。修改电脑的hosts文件,指定网站的ip为源站,看看访问源站是否正常。如果正常再访问反代服务器,浏览器F12看看出错原因,同时看看网站日志、php日志等好明确原因。