漏网之鱼?使用家宽建站
此文我之前在我的hexo博客上面发布过,但是由于不打算持有太多域名了,所以统一迁移过来。
前提
首先强调一点,家宽建站仅作为一次尝试,因为国内运营商是不允许家宽对外开放web服务的,要是被找出来可能会有一些麻烦,比如把你找去签保证书之类的,建议大家玩玩就好。首先要满足两点前提:
- 你家网络要有公网ip
- 当地运营商没有封锁443端口而是只封锁了80端口,比如我这里,一开始我还以为80和443都被封锁了,直到有一天我试了试,发现443端口居然没被封锁,只阻断了80端口的tcp访问…甚至部分地区80端口也没有封锁?
大致思路很简单,就是使用cloudflare,开启强制https回源,让cloudflare的服务器使用443端口访问家里面的服务器,当然这样不可避免地增大了延迟,你的数据会先到国外旅行一趟再回国。
本文中,我直接使用了树莓派作为服务器,预先已经安装好了nginx。
准备
请先配置好DDNS,注意DDNS不一定得在路由器上做,其实在服务器上做也是可以的,因为获取的公网ip都是一样的。
推荐一个项目https://github.com/NewFuture/DDNS/, 然后要注册cloudflare的账号以及有一个域名并把域名服务器改为cloudflare的域名服务器,当然你要是想使用cname接入也可以。方便起见,这里直接用域名服务器接入的方式了。
配置cloudflare
添加域名解析,cname指向你的ddns域名,并将dns模式的云朵勾选为橙色(启用cdn),前往ssl/tls设置完全模式(使cloudflare到你的源站服务器也走https。
然后前往“边缘证书”页面,开启“始终使用https”,之后我们需要在服务器上安装证书,虽然可以使用自签名证书,但是既然都到这了,那就直接使用cf提供的证书吧,前往源服务器页面,点击创建证书,可以创建一个仅用于cloudflare服务器与源服务器之间的证书,分别由私钥和证书部分,保存到树莓派上。
/etc/nginx/ssl/cert.pem,/etc/nginx/ssl/key.pem。
配置nginx
server {
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name berry.aoyouer.com;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
listen [::]:443 ssl;
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
}****
编辑好保存之后使用systemctl restart nginx重启一下nginx,之后再访问home.example.com理论上就可以看到nginx的默认页面了。
最后建议443端口仅允许cloudflare的ip访问,避免被运营商扫出来你在这里放了网站。