相信大家都对WordPress不陌生,在自家NAS里面搭建也非常方便. 搭建好的站点,如果希望能给到外部访问,可以有很多方法, 不过就算有公网IP,也需要通过域名+端口的方式访问,看上去不是太专业. 在这里我给大家分享一种方法, 就是WordPress站点就算是在自家的NAS上运行, 只要有域名且这个域名可以托管到CloudFlare上的情况下,怎么设置让你能通过域名就可以从外网访问到WordPress站点.
在开始之前,有几样前提条件
- 搭建好WordPress站点: 这里可以通过我之前的教程在Synology上部署WordPress 自行搭建, 比如我搭建好的站点可以通过http://<NAS IP>:1234 进行访问, 准备到这个层度就可以了
- 申请公网IP: 这里要你自行跟运营商索取,网上有很多方法, 主要还是要自己打电话运营商进行咨询
- 域名: 需要有自己的域名,且这个域名可以托管到CloudFlare, 一般付费的域名都可以,也可以去找一些攻略申请一个.
- CloudFlare: 需要注册一个账号, 注册需要使用到信用卡, 别慌, 只是核身用的, 我们注册好之后选择使用免费的套餐,这样就不会产生费用了
下面我就来详细介绍一下方法和步骤
域名申请
参考视频: Youtube
参考教程: 大培资源站
这里会介绍一种怎么免费申请一个可以托管到CloudFlare的一年免费域名的方法
⚠️: 这类的白嫖域名很常见,大家可以多关注油管上一些博主的动态,但动作要快. 主要是域名要支持CloudFlare托管就行.


访问:https://www.l53.net/ 点击右上角的”ClientArea”进行注册

进入到注册页面后,填写相关的信息,这里的信息除了电邮地址是自己的,其他的都从外国人身份生成器:https://shenfendaquan.com/ 里面获取并拷贝进去

完成注册步骤之后,需要到你的邮箱进行验证,打开收到的邮件点击里面的”Verify email address”即可

然后回到https://www.l53.net/ 网站登录进去, 并且点击左手边的”订单”->选择产品-> Domains registration and transfer

在注册新域名的文本框填入你想注册的名称,后缀请选择”.filegear-sg.me”, 点击”检查”按钮确认该域名没有被占用,你就可以看到”下一步”的按钮

点击”下一步”后,由于你是新注册的用户,可以在域名下面的文本框填入”newuser”, 这样的话原本需要支付的费用就变成0了,这时候你就可以点击”去结算”完成这次的域名购买

结算完成后,你可以去到”服务”->选择注册的域名进行查看状态, 如果订单状态不是”已启用”的话,可以先等个10分钟左右再回来,一般都是秒批.
到这里你的域名就准备好了
CloudFlare设置
参考视频: Youtube (视频里面前半部分是介绍怎么在NAS搭个网页,如果只是想了解CloudFlare内网穿透的话可以直接跳到4:11s位置开始观看)
域名托管到CloudFlare
在这里CloudFlare的账号注册就不多说了,大家可以按CloudFlare官方流程自行注册一个账号


注册后登录CloudFlare,在”Websites”标签页, 右手边点击 “Add a site”, 然后把刚刚注册的域名填进去进入下一步

选择Free套餐并下一步

点击”Start Quick scan”

点击”Continue”

到这一步,请记录一下标注的两个nameservers的地址,然后点击”Continue”

到这里就完成了

回到主页就可以看到,刚刚操作的域名已经在等待Nameserver的更新
这时候回去域名供应商页面 (e.g https://www.l53.net/ )

在服务->域名订单->下面,点击”名称伺服器”选项,把刚刚在CloudFlare上提供的两个nameserver填进去 (⚠️这里默认有域名服务器3的内容,请确保域名服务器3和4里面都是空的,只填写域名服务器1和2就可以), 然后点击”更新”.
这样域名和托管的第一步就完成了
CloudFlare ZeroTrust通道
Cloudflare Zero Trust Tunnel使您可以安全地将远程工作者连接到内部网络,而无需使用VPN。它通过在远程工作者设备和Cloudflare网络之间建立加密隧道来工作。此隧道可保护流量免受窃听和篡改,并可防止未经授权的访问。简单来说,就是内网穿透.


在CloudFlare的主界面,点击ZeroTrust-> Network->Tunnels->Create a tunnel

选择”Cloudflared”选项并点击”Next”

给Tunnel取个名字,然后点击”Save tunnel”

选择”Docker”, 把下方的Docker命令拷贝出来备用
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiNzA3ZjM3ZjE3ZTIxZmM1ODlkYjk3M2RjOGU1ZjE2YWIiLCJ0IjoiOTc4NzAxNDQtYzBhNC00NTQ5LTk1ODQtODEwOTdiMzFmNTUxIiwicyI6Ik1HVTVOVE01T0RjdFltRTBOUzAwWTJFeExUbGpPRFV0WkdSbVltSmxZMll5TmpBMXX9
NAS Docker设置

打开NAS的Container Manager, 点击注册表->搜索Cloudflare->下载第一个cloudflare/cloudflared镜像
⚠️: 一般下载latest就可以,但我的NAS上运行不了这个版本,网上查了一下,我只能运行2023.5.0-amd64版本,你可以试试latest是否可行,不行的话也跟我一样用一个比较老的版本,毕竟这个主要是做内网穿透,应该问题不大

然后来到映像->选择下载的cloudflared镜像->运行

勾选”启动自动重新启动”,然后点击”下一步”

这时候就把刚刚在CloudFlare上面拷贝的Docker命令从tunnle开始把后面的命令都拷贝进去,然后点击下一步并把容器运行起来

等待容器运行起来之后,回到CloudFlare的ZeroTrust->Networks->Tunnels就可以看到你的通道已经连接好,并显示”HEALTHY”的状态

点击 Connector ID会打开一个新页面,里面会展示运行的细节,比如Origin IP就是你家庭网络的出口IP, 如果有公网IP的话这里就是你的公网IP地址

进入到Tunnel的Configure页面,选择”Public Hostname”标签页

点击”Add a public hostname”

请按照以下指引填写
- 你申请的域名地址(e.g. abababab.filegear-sg.me)
- 你的二级域名名称(e.g. wordpress)
- 填写你WordPress服务在内网运行的地址 (e.g. <NAS IP>:<端口号>)
- 选择类型, 可以是HTTP,也可以是HTTPS, 如果是HTTPS的话,记得要打开”Additional application settings” 把TLS下面的”No TLS Verify” 的状态改为Enable
现在我们来确认一下设置

来到CloudFlare的主界面,点击你托管的域名

选择DNS->Records查看里面的记录, 这里可以看到一个CNAME的记录,并且是Proxied的状态
- DNS->Records, 查看配置的选项
- Type 是类型,这里应该看到的是CNAME
- Name是你之前在Tunnel里面设置的二级域名(e.g. wordpress)
- Content是这个域名的解析, 内容应该是<Tunnel ID>.cfargotunnel.com
核对上面的信息,如果需要的话,手动改一下即可
WordPress设置

来到你WordPress的管理后台,点击设置->常规
在WordPress地址和站点地址栏都填入你的域名信息
到这里,所有的配置已经完成,你可以尝试用你设置好的域名访问你的WordPress网站了

发现和分享
域名无法访问
如果新设置好的域名,无法访问你指定的网站,有很多原因,需要耐心的排查, 一般设置完也可能需要等待一段时间生效.
一开始我的域名就无法访问,就算等了很久也不行,就一度以为域名指向的IP不对所以导致访问失败

通过nslookup可以看到域名是能获取到IP的,但这个IP不是你的公网IP,是CloudFlare的IP,所以这是正常的,因为你把域名托管到CloudFlare. 但最上面的Server和Address如果是正常配置了,应该是像图片展示的那样(e.g. 200.xxx.xxx.xxx),而不是你的路由IP,所以这点是可以用来参考你的域名设置是否正确.
WordPress图片失效

如果你之前就在WordPress里面发布过文章,且文章里面有图片,你会发现有小部分图片可能加载不出来,通过浏览器的Debug模式可以看到是因为
- 你的图片地址还是使用原来域名的地址,导致出现跨域问题
- 你保存图片的地址是HTTP但你的域名地址是HTTPS. 所以加载失败
这种情况,简单的解决方法就是重新上传图片记录最新的地址即可

