前情提要
一直在想办法解决标准端口被封的问题,之前是琢磨出了使用CloudFlare的页面规则进行301重定向,来重定向到非标准端口号。详情参考不带端口号访问非标准端口域名。以下是简易流程图
例如我的博客就是在浏览器输入 blog.dswang.ga自动在CloudFlare CDN上重定向到 http://blog.dswang.ga:8880,然后访问我的内网web服务器,Nginx开启强制HTTPS,最后重定向到https://blog.dswang.ga:8443/ 。经过了多次重定向,其实很影响体验的,而且浏览器上还是会显示端口号。
当然体验不好更多的是因为免费账户分配的CDN节点不好,优化速度参考cloudflare自定义节点优化访问速度
那么有没有不会显示端口号的方法呢?当然有啊,不然我写这篇文章干什么,打字也好麻烦的。在Google搜索找到了这篇帖子CloudFlare Worker能转发非标准端口吗,其中第25楼回复
我也是看了好久才看懂该怎么用,多谢这位大佬!
建议看完再操作!正文开始,先看后赞!(不是
准备工作
服务端,也就是源站,我使用宝塔面板管理网站。
我这里准备三个域名做演示,分别是
ss.dswang.ga
test1.dswang.ga
test2.dswang.ga
你需要先将域名托管到CloudFlare,或者CF的第三方合作伙伴,参考我之前的文章。如果都不愿意,你可以关掉此页面了。获得域名,注册CloudFlare,安装宝塔等基础操作不再赘述。
添加Worker
如何添加Worker参考搭建基于Cloudflare Worker的短链接/短域名缩短服务
在左边框中粘贴 booster.js,可选更改Worker的名称。
basic
upstream
: 协议、域、端口(可选)、路径(可选)。例子:https://www.math.ucla.edu/~tao/
#填写实际访问的域名+端口mobileRedirect
:自动将移动设备访问者重定向到移动优化的网站。#如果没有就填上面的链接
firewall
#按需填写
blockedRegion
:阻止来自特定区域的访问者。代码的完整列表:ISO 3166-1 alpha-2blockedIPAddress
:阻止来自特定 IP 地址的访问者。scrapeShield
:发现、检测和阻止内容刮擦。参考: 介绍刮擦
routes
: 将国家/地区代码映射到特定的上游。代码的完整列表:ISO 3166-1 alpha-2示例:
routes: {
FR: 'https://www.google.fr/',
CA: 'https://www.google.ca/'
}
#这一段我们用不上,建议删掉
optimization
#按需填写
cacheEverything
:强制 Cloudflare 缓存此请求的响应,而不考虑响应标头。cacheTtl
: 强制 Cloudflare 使用特定的 TTL 缓存此请求的响应,而不考虑响应标头。mirage
:检测屏幕大小和连接速度,以最佳方式为当前浏览器窗口提供图像。polish
:自动优化您网站上的图像。可能的值是lossy
、lossless
或off
。参考:Introducing Polishminify
:从 JavaScript、CSS 和 HTML 文件中删除不必要的字符。
这个脚本原本用来干什么的懂的都懂!
对于可以直接访问的域名
配置Worker
修改upstream
和mobileRedirect
的值为实际访问的协议://域名:端口(可选)/路径(可选)
。
例如访问ss.dswang.ga这个域名,此时的访问简易流程图应该是
解释一下,ss.dswang.ga 这个域名是我的一个服务,用来提供免费节点,参考部署Proxypool自动抓取免费节点或者使用ProxypoolCheck代替Proxypool。本来是在服务器上使用Nginx反代本地12580端口,这个端口是开放的,所以不需要经过页面规则重定向。
原本这个脚本的作用就是这样,用来反代某些网站。但是这个脚本同时支持访问非标准端口,所以就有了下面的内容。
对于需要重定向到非标准端口的域名
这里使用宝塔面板新建一个站点演示。
现在宝塔不支持添加非标准端口,原因懂得都懂,什么时候开放限制也不知道。添加非标准端口的方法也简单,新建域名的时候带上就行,最少添加两个域名,而且只能添加CloudFlare支持的端口,原因后面讲
#Cloudflare支持的相关端口
#http端口 #https端口
80 443
8080 2053
8880 2083
2052 2087
2082 2096
2086 8443
2095
对于已经存在的站点,可以选择删除重建,删除的时候不要勾选数据库和目录,同时建议备份。然后新建站点选择之前的数据和目录。
不想删除也可以,在配置文件中添加新域名和端口,然后保存。
然后再在域名管理里添加域名+端口,此时8880端口会自动改成80,但实际上不影响使用。仅测试免费版7.4.7和7.4.6版,其他版本不知道。
编辑一下HTML文件。
关于配置SSL也不再赘述。
配置Worker
修改upstream
和mobileRedirect
的值为实际访问的协议://域名:端口(可选)/路径(可选)
例如这里填写 http://test2.dswang.ga:8880
例如访问 test1.dswang.ga
时的简易流程图
此时访问htts://test1.dswang.ga
,Worker会反代http://test2.dswang.ga:8880
的内容,然后返回到浏览器。
这就是为什么前面要至少添加两个域名的原因,因为test1.dswang.ga
这个域名不可能访问自己, 那不成无限套娃了吗?禁止套娃!
查看结果
如何使用?
此时其实还是不能使用隐藏端口号的方式访问的,因为域名还没有指向Worker,有两种方式访问。如果看懂了我之前的文章那么这一步也很好理解。
第一种
在CloudFlare的DNS管理页添加新记录,比如添加test1
的cname
,值为workers.dev
域名。
我是使用的第三方管理,不能使用这种方式,就不演示了。推荐使用第二种方式。
第二种
在域名的Workers选项卡里添加路由
输入你希望浏览器显示的域名,Worker选择对应的Worker,点击保存。此时CloudFlare会拦截匹配的路由模式。
对于test1.dswang.ga
这种可以不经过Worker处理的域名建议开启故障模式为继续,Worker免费额度用完后会略过Worker处理步骤自动访问http://test1.dswang.ga:8880,不会导致服务中断。
域名直接托管到CloudFlare的两种方法都可以使用,还是推荐使用第二种方式。
其他
对于WordPress这种网站程序还有点小问题,比如只有主页可以隐藏端口号,其他所有页面都不行,而且无法登录仪表盘。
主要原因在于仪表盘的设置>>常规选项卡,这里有两项,分别是WordPress地址(URL)和站点地址(URL)
其中站点地址是主页显示的地址,也是所有二级页面的地址,比如分类页面或者文章内容,不能改,如果不在意就无所谓。WordPress地址是后台地址。
以前是填写完整域名+端口,使用CloudFlare Worker之后就不行了。
临时的解决办法就是给后台分配另外一个域名,不与主页同域名,不走Worker。
如果URL修改错了可以去数据库改回来。
如果谁能解决这个问题请一定要告诉我!谢谢!
一个字,看不懂
菜逼
[f=caidao]呸
最终的效果只是访问的时候不用输入端口号,打开网址后都是带端口号的,是这样吗?我看你网站都是这样
目前只发现WordPress不能通过这种方式隐藏端口,其他的都可以,例如https://free.dswang.ga,所以说是不通用
哦,所以你这个博客站点还是带端口号的,明白了,折腾下试试
这个JS文件好像没有了,能再贴一份给个链接吗?感谢感谢
那个.js文件还有吗?能再贴一份吗?感谢
搞忘了回复,链接https://dsurl.ml/Qk45PH
填入代码之后点击预览,能看到应该访问的页面,但是点击XXXX.workers.dev这网址就打不开了,522错误,这似乎可以先不用解析域名,连生成的网址都打不开的话,也无所谓绑定域名了?而且新建workers的时候会让选择introduction http handler和http handler 是和这个有关系?
522错误是源站的问题,详情查看帮助 https://dsurl.ml/NPHkrF
以前是没有http handler选择的,刚才看了下好像没什么区别,选第一个吧。
我的域名被cf限制了,没办法再测试下去了