使用nginx反代cloudflare下的https站点

之前看到大家都在玩反代,我想了想现在的新博客挂着cf时不时真的很慢,虽然之前开启了cloudflare的railgun
初次访问以然很慢,但是通过railgun之后后续的访问fttb时间大幅度缩短了,但是有时候还是很慢
而且之前把railgun部署到了一个比较大流量的站之后发现官网所说的大幅度减少带宽传递,这里其实有坑的
我实际部署了两天之后就把那个大流量站的railgun卸了,高峰期没有railgun上传10M/s,加上railgun 25-35M/s
这个原因我后面再说

图片[1]-使用nginx反代cloudflare下的https站点-栗子博客 学习反代很快,反代源站http,反代源站https都没有问题了
反代在cloudflare下的https折腾了我好几个小时,期间论坛反代的帖子基本都翻完了,差点以为不行
图片[2]-使用nginx反代cloudflare下的https站点-栗子博客
论坛关于反代cf的帖子基本都是询问报错403 502的

接下来,分享经验

反代Cloudflare的好处在哪里
可以解决国内用户访问慢的问题(反代机器的线路质量决定)
可以解决源站和反代机器之间延迟过高,延迟不稳定的问题,毕竟Cloudflare在大多数地点都有本地节点,例如在香港和新加坡,都有本地节点,在香港或者新加坡的机器反代cloudflare本地节点的话,延迟只有1ms上下
使用cloudflare partner接入方式,可以在反代鸡鸡被攻击,切换到备用反代机器或者直接切回cloudflarecdn(需要dns解析服务支持)
图片[1]-使用nginx反代cloudflare下的https站点-栗子博客 比如我目前就是海外解析都给你cloudflare,国内都走反代,美滋滋

首先肯定是要cfp接入的~
cfp任意解析大佬们都会了,我就不说这里了,直接开始

如果只是简单的反代http页面,在反代服务器简单的配置以下即可,例如使用宝塔面板的,默认设置即可成功实现反代cloudflare http站点
(反代服务器如果跟cloudflare给予的Anycast节点IP延迟过高,或者因为反代服务器IP是广播问题而造成的cloudflare分配到错误的节点问题,可以通过修改反代服务器的hosts文件进行修改)
例如在我的阿里云香港机器上面,ping默认的anycast节点延迟为40ms,抓包后发现anycast给我传递到了新加坡的cloudflare节点上去

图片[4]-使用nginx反代cloudflare下的https站点-栗子博客
所以我们要指定修改到香港的cloudflare节点上去(修改/etc/hosts文件)
例如以下这个cloudflare的香港节点段,基本都是1ms
图片[5]-使用nginx反代cloudflare下的https站点-栗子博客

设置好之后,我们去本机进行测试(记得调试的话修改本地host文件进行指定解析)
图片[6]-使用nginx反代cloudflare下的https站点-栗子博客
可以看到经过反代节点打开,浏览器的回应头Server 已经从cloudflare变成了我们的nginx!大功告成
(如果这时访问反代提示cloudflare的Error 1001等错误,请确认上面的步骤无误)
(如果提示Error 1006,请检查反代服务器是否可以访问到经过cloudflare的源站)
(还有个错误我忘记了,想起来的时候再来修改吧)

咳咳,咱们继续,毕竟我们说的是要反代https呀,啥,你问我为啥要反代https
还有就是一部分用户在用cloudflare的Always Use HTTPS功能
继续继续,如果接下来只是单纯的修改宝塔设置,把反代的地址从http改为https的话,你会发现报错
(有些Nginx环境配置好后可以打开页面,但是动态链接无法使用,例如无法评论,无法注册登录,也是相同报错)
这个502报错就是好几个大佬询问的反代cf https的问题
图片[7]-使用nginx反代cloudflare下的https站点-栗子博客

(折腾了半天,同样的设置文件,反代我自己的https源站是可以反代成功的)
刚开始百度了好多页面,尝试着修改协议 proxy_ssl_protocols 关闭ssl设置
proxy_ssl_session_reuse off; 等等等等,都尝试过了,依然无法完美解决,最好的一次是可以反代成功https页面,但是所有动态操作无效
终于在google搜索找到了解决方案
如果是跟我一样,是自己的域名反代自己的话,只要在反代设置规则里面加入
proxy_ssl_name $host;
proxy_ssl_server_name on;

即可成功反代Cloudflare的https站点图片[8]-使用nginx反代cloudflare下的https站点-栗子博客

图片[8]-使用nginx反代cloudflare下的https站点-栗子博客 效果可以看我签名主站哈,10点才改的ns,估计还有一些地方没生效,不过全国应该差不多了吧
遇到问题反馈我图片[1]-使用nginx反代cloudflare下的https站点-栗子博客

现在反代我的cf wordpress已经没问题了,评论 注册登录(但我关了哈哈哈)后台都莫得问题

2020/02/19 更新
这几天仔细研究了一下nginx的缓存和反代的缓存设置
把一些心得也贴上吧,其实如果是反代cloudflare 的站点的话,不开缓存其实也差不多,稍微慢一点点

如果要使用缓存的话,这几天做了很多很多次测试,结论在下面
1.如果源站设置expires、源站端max-age和反代nginx cahe端的proxy_cache_valid的情况下,最终是以源站设置的expires的值进行缓存过期处理
2.假如在反代nginx中设置了相关配置,取消源站expires对缓存的影响(proxy_ignore_headers),在同时设置了源站expires、源站端max-age和反代nginx cache端的proxy_cache_valid的情况下,最终以源站端max-age的值进行缓存过期处理
3.假如取消源站expires和源站端max-age对缓存的影响,则以反代nginx端proxy_cache_valid设置的值为标准进行缓存的过期处理
4.反代nginx端inactive的值不受上面所影响,就是请求页面后,根据inactvie设置的时间,都会强制进行缓存清理
5.所以对缓存过期的优先级进行排序为:inactvie、源站expires、源站端max-age、反代nginx的proxy_cache_valid

#以下配置放在http区,不要在server区使用
proxy_temp_path /www/server/nginx/proxy_temp_dir;
proxy_cache_path /www/server/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g;
#这一段就是反代的缓存基本设置
#proxy_cache_path:缓存数据目录
#levels:按照几层目录分级
#keys_zone:key空间名,后面的大小为key空间大小,1m可以存放8000左右key,所以不用设得过大
#inactive:强制更新时间,在指定时间内没人访问,就删除缓存(这个很重要,见上面说明,如果不会手动设置proxy_cache_valid,或者懒得设置的话,把这个值设置为1m,就会达到缓存内容1分钟没人访问自动清理)
#max_size:这个才是缓存数据的大小限制
client_body_buffer_size 512k;
#缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 60;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 60;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 60;
#请求的超时时间
proxy_buffer_size 32k;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 64k;
#proxy_buffers缓冲区,网页平均在64k以下
proxy_busy_buffers_size 128k;
#高负荷下缓冲大小(建议值为proxy_buffers*2)
proxy_temp_file_write_size 128k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_cache cache_one;
#为缓存区名字

#以下缓存配置在反代规则里需要缓存的路径(不需要缓存的路径或者规则不要添加下面的)


add_header X-Cache $upstream_cache_status;


#增加头信息,可以在浏览器F12里观察

proxy_ignore_headers Set-Cookie Cache-Control expires;
#重要,强制缓存,不然有些页面不缓存
proxy_cache cache_one;
#开启缓存 缓存区名称
proxy_cache_key $host$uri$is_args$args;
#缓存key
proxy_cache_valid 200 304 2h;
proxy_cache_valid 301 302 3d;
proxy_cache_valid any 10m;
#状态码200,304状态缓存2小时-301,302的过期为3天,其余状态码10分钟过期

这样配合上面的话就是,常用的缓存文件,比如200 304状态的缓存为2小时,301 302状态的缓存为三天,其余状态10分钟
这样不用手动去清理缓存文件,自动的清理了,各位试试吧

原文地址:https://www.hostloc.com/thread-643951-1-1.html

© 版权声明
THE END
点赞0
抢沙发
头像
提交
头像

昵称

取消
昵称
一言一语