家庭服务器建站实战:利用海外主机与内网穿透的完整方案
系列文章:家庭服务器
之前几篇文章介绍了家庭服务器PVE安装部署,网络情况以及供电情况。这个主要介绍一下如何建站。
本文介绍的方案已经运行了将近4个月,目前看来运行良好!
文章标题是AI生成的,确实比自己想的好~~~
特别提醒
使用家庭宽带的公网IP建站是违法的,因为国内网站建设必须有ICP备案。
ICP备案有俩个主体:一个是个人,一个是接入商(腾讯云,阿里云等)。
使用家宽建站明显没有接入商,就没法备案。所有你懂的....
国内服务器建站需要分别已完成:ICP备案,公安备案,才能正式上线网站。
海外服务器建站目前不需各种备案,包括香港,新加坡等服务器建站均不需要。
但是如果搭建非法网站,这肯定是不行的!要做守法公民哦~!
建站模式
我简单画了一个图,下面是我的方式(这里不纠结这种方式是否合法,只是做分享)。
如果你有已备案的域名,可选择国内云服务器。
有童鞋问:既然已经有海外服务器了,为什么还要弄家庭服务器?
童鞋你的网站只是静态页面的话可能仅需要一些存储空间就行了。
但是如有你的网站需要 1T+磁盘空间?16G运行内存?更好的CPU?更好的算力?
如果按这个要求采购海外服务器价格不菲。只需花钱买一个网络特别好的海外服务器就行了。然后自己采购一台配置高一点实体主机。不是更省钱?
但是这样做有利有弊,毕竟家庭服务器不像正规机房那样SLA有保障!
我目前运行的网站因为用的mongodb和Redis 导致内存占用特别大。16年买的杜甫KS3C 8G内存已经不够用了。但是再升级配置的话月付将近20欧元了。
所以我有这个系列的文章了!
选择主机
海外主机首先考虑:网络延迟低,不丢包
目前我使用的是Azure,国内三网延迟很低。其他推荐的话AWS(亚太数据中心),还有前几天白嫖的华为云新加坡服务器。
如果国内主机的话,基本上网络都不差。看情况选择就行。
内网穿透
内网穿透目前还是选择使用 FRP!参考文章:frp专注于内网穿透的反向代理应用,部署使用实战教程
博主将海外服务器的 80 和 443 端口走TCP协议直接穿透到 家庭服务器上,因为我没有其他家宽。
如果你海外主机要搭建多个网站且不在同一台家宽上,童鞋可以选择 HTTP/HTTPS协议。
至于部署方式,这里不再重复说明。参考上的文章就行了。
本文下面的内容都是TCP协议方式穿透介绍的!
折腾总结
以下是折腾过程中遇到的一些问题,以及解决方式!
frpc配置
下面是frpc 配置内容,仅供参考!
特别注意:transport.proxyProtocolVersion="v2"
,否则无法获取访客真实IP。
serverAddr = "xx.xx.xx.xx"
serverPort = 12345
auth.method = "token"
auth.token = "12345"
[[proxies]]
name = "http"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 80
transport.proxyProtocolVersion = "v2"
[[proxies]]
name = "https"
type = "tcp"
localIP = "127.0.0.1"
localPort = 443
remotePort = 443
transport.proxyProtocolVersion = "v2"
拉黑IP
做站避免不了一些恶意IP,经过FRP穿透方式,没法利用防火墙来拦截访客IP。
方式1,有一些网站支持配置访客黑名单
方式2,利用Nginx拦截黑名单,下面是我分享的配置
主配置vhost 中新增 include /usr/local/nginx/conf/extend/blocklist.conf;
server {
listen 80 proxy_protocol;
listen [::]:80 proxy_protocol;
listen 443 ssl http2 proxy_protocol;
listen [::]:443 ssl http2 proxy_protocol;
......
include /usr/local/nginx/conf/extend/blocklist.conf;
......
新建文件:/usr/local/nginx/conf/extend/blocklist.conf
粘贴下面的(下面内容是目前我拦截的内容,可按自己的情况修改该配置)
编写格式是 IP CIDR,不懂得童鞋可搜索看看~
deny 64.124.0.0/16;
deny 14.153.0.0/16;
deny 14.155.0.0/16;
deny 188.64.171.0/22;
deny 176.9.253.0/22;
deny 192.162.165.0/22;
deny 46.246.65.0/22;
deny 27.46.69.0/22;
deny 117.65.27.0/22;
deny 220.178.134.0/22;
deny 220.178.135.0/22;
deny 47.76.209.0/22;
deny 47.76.99.0/22;
deny 37.115.124.3;
deny 95.28.32.33;
deny 212.86.109.70;
deny 185.127.165.170;
deny 176.57.69.61;
deny 91.121.181.191;
deny 37.235.49.125;
deny 91.132.138.42;
deny 62.113.118.27;
deny 31.23.194.19;
deny 62.113.118.27;
deny 220.179.219.136;
deny 183.202.103.69;
deny 112.49.246.219;
deny 203.218.244.48;
deny 113.87.185.76;
deny 120.237.85.78;
deny 183.238.149.14;
deny 189.1.223.135;
deny 183.239.175.174;
反代网站
比如针对一些海外用户,更快的访问我们的网站。或者增加网站的负载能力。
我们可以利用家庭服务器反代网站,怎么样改动最小呢?
比如博客地址:51.RUYO.net
第一步,在家庭服务器配置Host (IP换成真实的)
115.115.115.115 51.ruyo.net
第二步,配置Nginx vhost,直接反代 51.ruyo.net
即可
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /usr/local/nginx/conf/ssl/ruyo.net.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/ruyo.net.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name 51.ruyo.net;
location / {
proxy_pass https://51.ruyo.net;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 160;
client_max_body_size 2000m;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
最后总结
这种方式还是存在一些弊端,必须自动签发域名证书会有问题。因为域名解析的IP和实际签发的IP不一致。
其他问题大家可留言讨论吧~
版权声明:
作者:我是小马甲~
链接:https://51.ruyo.net/18818.html
来源:如有乐享
文章版权归作者所有,未经允许请勿转载。
乌帮图
老张博客
阿仁PC27149@老张博客
老张博客@阿仁PC27149
我是小马甲~@老张博客
老张博客@我是小马甲~