最近买了台DELL R620服务器,配了Xeon E5-2670V2,物理核心20核逻辑核心40核,再加了32G内存,本来想着高配置服务器美滋滋,,直到要玩起来才发现很麻烦。在此总结以下:
1.首先需要公网ip
虽然说申请有些困难,但也是看运营商和地区而定的。像什么广电,移动基本别想了,广电的打电话过去甚至不知道公网ip是什么。移动众所周知老无赖一个,哪有那么容易给你吃白食?你如果想在移动申请公网ip,先准备好2w块人民币~所以,联通和电信申请是最容易的。可以尝试一下联系客服给你开,不行工信部走起。我会另外写一下我是怎么申请到的,希望对大家有启发
2.DDNS
有了公网ip就可以了吗?想peach。公网ip又分固定公网ip和动态公网ip,固定公网ip是专门给企业或者有关部门使用的,但如果你有钱可以申请,一个月的价格比一年千兆宽带贵的多(看地区而定),而且固定公网ip的80端口和443端口较容易开,如果你有固定公网ip,绝对省事。
但是呢,像我们这些穷人,又爱折腾,当然只给动态公网ip了。动态ip是什么?就是说在一定的触发条件下公网ip会变动,有可能是48小时自动变ip,或者是你重启电脑,重启路由器就变ip。一般ip变动的值都是最后一部分,例如xxx.xxx.xxx.123,这个公网ip后面的123不是固定的,会在0-255之间变动。这就非常阴间了,是个人都知道,域名解析A记录必须解析一个固定的公网ip,总不可能我们不停手动去改ip,要是什么时候ip变了,假设那时候我们在拉屎,拉了一个小时,我们没有及时发现,网站也就宕机了一个小时,影响非常大。
所以呢,出现了这样一个东西,叫做DDNS,第一个D意为“动”,也就是动态的意思。组合起来,就是动态DNS。这个东西的原理是什么呢?他能够实时监测ip的变动,一旦监测ip变动,就会将域名的解析记录修改为新分配的公网ip。这是一个非常不错的玩意。在许多路由器都会带上这个设置,命名为DDNS或动态DNS,但是有些路由器只有第三方DDNS服务,例如花生壳,第三方DDNS非常慢,无法将家宽优势发挥出来。所以我们可以尝试给路由器刷第三方固件,有些固件会有阿里云或者DNSpod的DDNS服务,这样就方便很多。但是如果有懒得弄的大佬,或者路由器是老古董,那就要自己写一个定时运行的DDNS脚本来监测了,这个会在下面的文章讲到。
3.端口转发
这下公网ip解决了,然而只是解决了一个棘手的问题罢了。我们还要设置端口转发。虽然我们有了公网ip,但是你可以尝试一下,访问一下宝塔面板,ip+8888,你仍然是访问不了的。这是因为路由器设置,我们的端口仍然是不对外的。所以我们要在路由器配置端口转发,将外网的访问请求转到对应的内部端口,这样才能正常访问
4.域名后端口省略处理
如果配置正常,你应该是可以访问宝塔面板了,但是当你兴致勃勃的新建了一个网站,并尝试访问时,wtf,访问超时?哦霍,忘记说了,现在所有运营商都会封锁80,8080,443等敏感端口,就是为了防止家宽建站。(当然有些地方可能不会封443端口,这个可以尝试一下),无论你怎么尝试端口转发,都是不行的。这下就麻烦了,那建站有个p用啊~~~
但是,你的域名此时并不是无法访问。既然80,443端口废掉了,我们可以换其他的端口呀。比如说2233,你看这个端口多有味道,我们只要在宝塔面板将你的网站端口从80更改成2233,就可以访问你的网站了。只不过呢,你需要在你的域名后面加个端口号,例如:2233,这样才能够正常访问。这就是没有80端口或者443端口的弊端:需要加上个端口——这不仅对用户不友好(因为有时会有用户分不清中文的冒号和英文的冒号),最要命的是,搜索引擎的蜘蛛看到这么奇怪的域名,都不来了。那为什么80端口和443端口的网站不用在域名后面手动加端口呢,实际上无论端口是多少,域名后面的端口都是存在的,只不过浏览器已经帮你省略80和443端口了。然而如果不是80或者443端口的话,浏览器是不会帮你的,只能靠你自己。
为了节省大量的麻烦(主要是域名后面加端口实在是不好看),我们需要通过其他手段去掉域名后面的端口号,这样即使我使用非80或443端口建站,直接输入域名也能正常访问网站,无需再手动输入端口,达到和80端口443端口网站一样的访问效果。
针对端口号这个问题,我目前找到两种的针对方法。第一种:cdn,众所周知,有些cdn的回源可以设置自定义端口,用cdn可以解决去掉端口号的问题,这个方法同时适用于域名未备案的网站(使用香港cdn),缺点就是不能直接回源,非境内cdn会对速度有一定影响;第二种就是隐性url解析,需要你的网站域名添加多一个中转域名用作解析,而这个中转域名带端口号访问,只要把我们正式的网站域名解析到我们的中转域名,再配上隐性url解析记录,就可以实现无端口号访问网站。优点不用说,直接回源;而缺点吗,就是需要备案的域名,并且需要购买高级的解析套餐。在阿里云我不确定隐性url这种记录在免费版云解析有没有,我用的是企业版云解析,14块一个月。
可能看的不是很明白,我举个例子:
我要建一个网站,域名为123.com,主机ip为11.11.11.11,然而没有80和443端口,将123.com解析到11.11.11.11后,我只能将网站端口更改为6666,这样用户访问网站时,只能输入123.com:6666来访问我的网站。为了让用户能够直接输入123.com来访问我的网站,我需要这样做:
首先,我新建了一个域名,叫做888.com,我将它解析到11.11.11.11,这样的话当我输入888.com:6666时,也能访问到和123.com:6666一样的页面。
然后,我修改123.com的解析记录,我将原来的A记录删除,然后将123.com解析到888.com:6666(这种解析记录是隐性url解析),这样的话,当我访问123.com时,也就相当于访问了888.com:6666,而888.com解析到源站的ip,即11.11.11.11。所以,我就完美实现了通过直接访问123.com正常回源。
这就是隐性url解析,当然,前提需要域名已经备案。
但是:隐性url有一个很大很大,甚至是致命的问题,首先,隐性url解析是基于iframe实现的,这对搜索引擎的蜘蛛非常不友好,注重seo的兄弟千万不能使用,第二,在浏览器中显示的域名永远都是隐性url记录的解析值,无论你怎么点内部链接,浏览器永远就显示那个域名,用户看了会摸不着头脑。可以这样理解:我建个博客,域名为123.com,使用了隐性url解析,我打开一篇文章,发现url还是原来的123.com,大受震撼。我登陆wordpress后台,url输入123.com/wp-admin,(刻进DNA的链接),发现页面正常跳转,但是浏览器显示的url还是原来的123.com???有用户看到的话,绝对以为闹鬼了。那么蜘蛛要来爬你的站,发现一个域名指向了一堆不同的页面,你让他怎么想?它还会来爬吗?
所以,非常不推荐使用隐性url,有能力最好使用cdn~~
但是呢,cdn也不是完美的。国内除开要备案不说,有可能还会被有关部门发现,家宽建站会被勒令停止。用了香港cdn不同,你爱咋弄就咋弄了,但是也要小心运营商对http请求的监管!在网上会看到有大佬吐槽家宽建站有时会掉线(宕机),典型的被发现了
然后再说一句,完全不需要在你的服务器上弄什么反向代理啊,重定向什么的,外网80端口的请求早就在没有到达服务器之前就被拦截了,根本就没有流量进去,弄了也是白弄。内网里端口畅通无阻,爱咋发咋发,去到外网给你一锤,别想进来!
这就是我们在家里建站必须解决的所有问题了,无论怎么样,都没有什么计划是能完全媲美去阿里云买一个云服务器建站的。如果是像我一样喜欢折腾,鼓捣的大佬可以往下看,我给出了详细的操作方法供你参考;但是如果你只是图新鲜,正准备这样玩的;或者说完全没有意识到这项工作难度的兄弟,建议还是好好使用云服务器,撇开搭建难度不说,稳定性相信应该不会比云服务商家好,家里停电怎么办?不仅如此,还要购置实体服务器,树莓派或者小主机,再加上国内cdn费用等等,更别说要耗费大量时间了。各位站长只需做好自己的网站即可,不必要过于折腾在家搭服务器,虽说实体服务器的配置自由,家宽大,有个千把两千块钱能配个64核几百G内存十多T的SSD,再加千兆宽带,上下行100M,要是放在阿里云或腾讯云卖得十多万一个月。也许到时你会发现,这钱还不如买台云服务器。追求稳定,速度的站长,去买云服务器即可!
P.S.没有公网ip的大佬,或者不想搞这么多幺蛾子的兄弟,还有一个方法,就是内网穿透。内网穿透几乎可以解决以上所有的难题,但正如开头所说,速度限制较大,第三方内网穿透的速度更是不敢恭维(提供部分较知名的内网穿透服务商:nat123,花生壳,sakura frp,freefrp等等),若是有闲置大带宽云服务器的兄弟也可以自己搭建frp服务,我到时也会写教程。可我是这样想的,既然有云服务器了,何必不用云服务器呢~
高能警告!这是最后的提醒,请各位大佬站长仔细斟酌,三思而后行!折腾党欢迎~
本文是针对动态公网ip,域名没备案,80端口和443端口被封的家用服务器的教程,如果您的域名已经备案,或者没有公网ip,请拉到本文末尾,查看我写的其他文章,里面也从0开始进行讲解,会针对其他情况提供更加可行多元化的方案,欢迎阅读
rosmontis.com/archives/1798
正文开始
1.准备物理设备
可以是机架式服务器,塔式服务器,工程机,tb的centos小主机甚至你家的电脑等等,如果是搭网站,24小时开机的觉悟一定要有,噪音,电费等事宜自己要解决,不行的话可以去买云服务器了,没必要这么折腾
各位可以看看我的,花了很多钱,(其实还不如去腾讯云秒杀一台服务器)
数数装了几根内存,就装内存的的钱也够买一年服务器了(⊙o⊙)
2.自行申请公网ip
3.安装系统,配置环境
我是觉得,高端的服务器要配置最好用的面板-宝塔(不打广告啊)
4.DDNS配置(请根据自身服务器环境进行配置)
我的服务器使用宝塔面板
首先访问内网宝塔面板,因为现在没有配置公网ip,所以是访问不了的
DDNS服务即为动态解析,在监测到服务器ip变动后能够自动修改域名解析值,保证域名正常访问,免除许多麻烦。
因为我的域名是在阿里云注册的,所以我通过阿里云DNS的API实现自动DDNS
在DNSpod也有类似功能,这里不再过多赘述
(1)阿里云设置域名解析
直接去阿里云的云解析控制台,添加一个域名解析记录,值随便写,便于到时候判断ddns服务是否生效
(2)安装阿里云SDK(Python环境,阿里云也提供了其他语言,可以自行查看官方文档)
回到宝塔,连接ssh,输入以下命令检查系统是否安装了python
从这张图可以看到,我的服务器安装了python3.6.8,所以我不用另外安装了
要是两个命令都是报错的话,请自行安装python(可以在宝塔应用商店找到Python项目管理器,里面一键安装)
没有报错的话,我们直接安装阿里的SDK了,依次执行以下命令:
没有报错就差不多了
若是出现以下报错:
请升级pip版本,执行命令:
pip3 install --upgrade pip
(3)代码实现与配置
好,这下基本安装完python环境了,来,开始写(抄)DDNS代码:
新建一个空白文件,命名为ddns.py,代码复制起来:
太长了看不过来的话,这里针对个人情况指出需要修改文件几个地方:
# AccessKey 和 Secret 建议使用 RAM 子账户的 KEY 和 SECRET 增加安全性ID = '你的AccessKey'SECRET = '你的Secret'
这些AccessKey和Secret想必各位都能找到ヾ(≧▽≦*)o
为了保证信息安全,建议使用子账户的AccessKey和Secret,并且手动修改子账户的权限
# 设置主域名DomainName = '你的根域名' # 子域名列表 列表参数可根据实际需求增加或减少值SubDomainList = ['二级域名']
那么这个也是需要注意的, DomainName要填你的根域名,例如123.com
那如果我要填a.123.com怎么办? SubDomainList就填你的二级域名,但不要带上你的根域名!譬如a.123.com,你只需要填a就可以了
注意,这个动态DDNS,并不局限于一个子域名,如果你有多个子域名需要使用动态DDNS,例如a.123.com和b.123.com,可以在 SubDomainList 里直接填写a和b,二级域名之间使用逗号隔开
例:
# 设置主域名DomainName = '123.com' # 子域名列表 列表参数可根据实际需求增加或减少值SubDomainList = ['a,b']# 这样就是配置了a.123.com和b.123.com使用动态DDNS
还有一个:
request.set_TTL('60') # 可选值的范围取决于你的阿里云账户等级,免费版为 600 - 86400 单位为秒
这个就是TTL,开了企业版解析套餐的土豪可以调整一下这个,不用白不用,记录生效也快嘛,60就是一分钟,600就是十分钟,自己调就行了
编辑完之后保存文件,转到ssh,先测试一下api能否正常调用,输入命令:
#python3.0(含)以上版本用下面这个python3 /文件具体路径/ddns.py#python3.0以下版本用下面这个python /文件具体路径/ddns.py#例#python3 /www/ddns.py
返回信息若为以下提示,说明配置成功
★[2022-01-10 00:55:02] Successful----------------------------------------------------------------------------准备更新已有记录新ip与原ip相同,无法更新!----------------------------------------------------------------------------★[2022-01-10 00:56:02] Successful----------------------------------------------------------------------------准备更新已有记录更新成功,返回信息:{"RequestId":"xxxxxxxxxxxxxxxxxxxxxx","RecordId":"xxxxxxxxxxxxxxxxxxxxxx"}----------------------------------------------------------------------------
我们去到阿里云云解析页面,若看到域名记录值发生变化,说明api修改成功,DDNS基本配置完成!
(4)添加定时任务,自动监测公网ip变化
转到宝塔面板-计划任务,添加shell脚本任务:
脚本内容就是刚刚ddns.py的执行命令,例:python3 /www/ddns.py
执行周期按需填写,建议两分钟执行一次,我选择一分钟的监测频率,这样当公网ip变动后,可以缩短宕机恢复时间;
我们也可以同时创建多个计划任务,最大程度监测公网ip变化,保证网站正常运行
任务创建好后要手动执行一下,检查日志,没有报错就可以了
恭喜,你现在完成了万里长征第一步,喜提动态DDNS服务一个!
5.端口转发实现真正意义上的外网访问
单是有公网ip还是不行的,不信?你可以试试用公网ip访问宝塔面板,我敢肯定绝对是访问超时,更别说搭建网站了。
这是因为我们路由器的设置还是对外封锁端口,导致无法访问到我们的服务器。要解决这个问题,我们需要登录路由器管理页面配置端口转发,将外网用户对服务器的请求转发到内网所对应的服务器,这样就可以从外网正常访问我们的服务器了。
废话不多说,先访问服务器的管理页面,大部分的路由器管理页面地址是192.168.0.1或192.168.1.1
输入管理员密码即可成功进入后台,忘记密码请reset路由器配置
(该设置的位置及名称因路由器品牌和型号而异,请加以分辨)
找到转发规则,虚拟服务器,添加端口转发规则
我们直接添加新条目,先尝试转发宝塔面板的入口
注意:服务端口号是可以随意填的,路由器会将服务端口的请求转发到内部端口,外网用户通过公网ip+服务端口即可访问到内部端口,但是像80,443,8080这类端口就没辙
举个例子:宝塔面板默认端口为8888,如果你的服务端口号和内部端口号都是填写8888,那么你直接输入公网ip+8888就能访问宝塔面板。
如果你的服务端口填了1234,那么你输入公网ip+8888会访问超时,只有输入公网ip+1234才会访问到宝塔面板~
(相当于一个奇怪的内网穿透)
ip地址填写宝塔面板内网ip,保存
现在尝试通过公网ip+服务端口访问宝塔面板入口,若能够成功访问,说明配置成功
若是上面的宝塔面板端口转发配置成功,接下来便需要转发网站的端口,让我们搭建的网站可以通过指定的端口被外网访问
登录宝塔面板,创建一个网站,网址最好已经配置DDNS,便于检验端口转发是否成功
创建完成后,点击站点设置,手动添加域名
因为80端口和443端口已经被运营商封锁,我们需要为网站分配其他的端口。如上图,我给我的网站分配了5555端口
实现:添加域名,端口你随便填可以了,11451也可以,就是臭了点
添加完成后,注意要去防火墙放行
然后呢,就去路由器管理页面配置端口转发:
ip地址还是填宝塔面板内网地址即可
然后,我们需要验证一下端口转发是否正常工作:
(1)公网ip+服务端口
(2)已配置DDNS的网址+服务端口(优先验证这个)
像我刚刚使用了5555端口创建网站,我就访问< 公网ip:5555 >或< 已配置DDNS的网址:5555 >检查能否正常从外网访问,用多几个设备检查( •̀ ω •́ )✧
如下图,访问不超时就是成功
至此,端口转发已经配置完成
P.S.我在撰写这篇文章的时候,有一个想法,是否可以将非80和443的服务端口转发到内网的80端口呢?例如,外网访问1111端口,就能直接转发到内网80端口。虽然运营商封了外网的80和443,但是内网没有啊!这样就可以省掉更改网站运行端口这一步骤。但是似乎也有一个bug:如果我运行多个网站呢?全都转发到80端口吗?有待验证,有兴趣的大佬可以尝试一下
6.解决访问网站时域名后面要加端口号的问题
(去掉难看的端口号,艸,这破端口看得人烦)
运营商封掉了美妙的80和443端口,只留下一堆奇奇怪怪的端口,让我们在访问域名的时候都要带上个小尾巴,非常恶心,如果是自己用的网站可以理解,但是,爷靠着他赚钱呢!搜索引擎看见这么奇怪的域名,都懒得来爬,这不玩完了吗?用户本来输了个域名就可以访问的网站,现在偏偏要加个端口,你说烦不烦?再说,中文的:和英文的:(冒号)超级难分,用户手骉怎么办?不用玩了呐!所以,一个合格的站长,不能忍受这种问题的存在,既然已经走到这一步,那就让暴风雨来的更猛烈些吧~
注意:本篇文章将针对已备案的域名,提供解决访问网站时域名后面要加端口号的步骤,若你的域名未备案,请拉到本文末尾,查看另外那篇针对未备案域名提供解决方案的文章,感谢您的支持~
由于我们的域名备案了,此时我们有两个选择:第一个是使用第三方CDN帮助我们实现去掉端口的问题,;第二个就是使用隐性url解析帮我们隐藏掉原来带端口的访问域名
不过在我们开始操作之前,还有一个步骤不能忽略:我们要一个中转的域名
解释一下:由于我们的ip是动态的,同域名解析一样,cdn的回源配置也不可能要我们手动去改回源ip,既然我们有DDNS,那么cdn有没有这样的功能呢?监测ip变动,自动修改回源ip?大厂有没有我不知道,小厂绝对没有。那么这就麻烦了?NONONO,别忘了有些CDN也支持域名回源的!在源服务器和 a.com 之间,我们给他加多一个 b.com ,这个 b.com 的作用就是配合DDNS,如同上面所讲,b.com 只需加一个端口号也能正常访问到网站,不过我们现在的任务是需要去掉域名端口也能正常访问,那么 b.com 承担的就是的角色。假设 b.com:1234 能够正常返回原站,那么我们给 a.com 套上cdn,回源目标为 b.com:1234 ,那么只要我们访问a.com,不就能直接访问源服务器嘛?再也不用加端口了!!!
举例来了:我想通过 123.com 访问源站,我们加一个中转域名,假设为 redirect.123.com ,配置好DDNS后, redirect.123.com 加上一个服务端口就能访问源站,然后 123.com 套上cdn,回源为 redirect.123.com:服务端口,这样通过 123.com 就能访问源站了~~~
所以呢,不要用正式域名来配置DDNS,如果你这样做了,换一个域名~~~
只要原理理解了,配置并不难
腾讯云配置实例
阿里云配置实例
另外说一句,我们可以DDNS和第三方内网穿透共用,使用腾讯云的热备原站回源方法,当一个源站回源失败,就可以通过另外一个源站回源,有备无患。假设DDNS废了,还有第三方的内网穿透撑腰,就没事了
找到合适你CDN,按图配置就行了,然后去云解析DNS解析CDN提供的cname,完美访问!去掉端口这个小尾巴了,看起来真舒服!要是已备案的域名,还可以使用大陆CDN,速度一点也不会差
第二个,就是不推荐使用的隐性url解析方法了:
正如前文所讲:
隐性url的缺点(流量站大忌!)
隐性url有一个很大很大,甚至是致命的问题,首先,隐性url解析是基于iframe实现的,这对搜索引擎的蜘蛛非常不友好,注重seo的兄弟千万不能使用,第二,在浏览器中显示的域名永远都是隐性url记录的解析值,无论你怎么点内部链接,浏览器永远就显示那个域名,用户看了会摸不着头脑。可以这样理解:我建个博客,域名为123.com,使用了隐性url解析,我打开一篇文章,发现url还是原来的123.com,大受震撼。我登陆wordpress后台,url输入123.com/wp-admin,(刻进DNA的链接),发现页面正常跳转,但是浏览器显示的url还是原来的123.com???有用户看到的话,绝对以为闹鬼了。那么蜘蛛要来爬你的站,发现一个域名指向了一堆不同的页面,你让他怎么想?它还会来爬吗?
但是,如果网站是自己用,或者是静态网页,没有那么多子链接,隐性url是非常可取的。我们也不要忘记他的优点:可以直接回源!无需经过第三方CDN分发
我没钱,所以就用阿里云作例子吧:
也是非常简单的,只是域名一定要备案!不然就会这样:
当然你也可以用显性url,你可以理解为301重定向,只不过重定向是在DNS服务器完成的~当然域名会变化~
访问一下我们的网站,完美回源,没有端口!哦耶!家建服务器正式运行!
还是要提醒一下,因为公网ip会变动,例如ssh或者宝塔面板登录需要用到ip,所以就可能要依赖内网穿透实现这些服务了!当然,宝塔面板也可以绑定域名访问的~自己琢磨吧!内网穿透教程拖到下面看~
教程到此结束!感谢你能看到这里,希望本文能够对您有所启发!本来我也想过何必费那么大周折就搞这,还不如买台云服务器省心,应该就是纯粹享受折腾的过程罢了!ヾ(≧▽≦*)o