运行原理

本站是部署在内网虚拟机上的web服务,使用frp内网穿透到公网。所使用的是阿里轻量云服务器自建的内网穿透服务。

为什么要这样做?

因为这样性价比高,阿里轻量云服务器首年只要79,而且带宽也高,峰值200M,平时实际也有20M左右。相比其它服务器,光20M的带宽价格已经是天价了,更高的配置也是天价。用本地机的话随便买点洋垃圾就能组一台性能不错的服务器。我现在的配置是e5-1650v4+32g内存,算上主板电源什么的一套在400元左右,待机功耗50w,一个月电费30元,还是比较划算的。我的mc服务器也是跑在上面的,所以我才选1650v4这种单核性能较高的洋垃圾:stuck_out_tongue:

配置ssl证书和启用https

这一点我弄了好久,最终是使用了最新版的frp才得以解决。原先旧版的frp可能不支持较新的协议,浏览器显示无法找到页面。以下是我的frpc.toml关于https通道的配置,没什么复杂的,最普通的就行了

[[proxies]]
name = "web2"
type = "https"
localIP = "192.168.10.5" #你的内网web服务地址
localPort = 443 #你的内网web服务端口
customDomains = ["www.oshenkinoo.top"] #当用户访问该域名时才会指向"localIP",类似与反向代理

内网机上的nginx配置与正常一样即可,由于我设置了将主域名重定向到www并强制启用https,以下是我nginx部分配置,这样写可防止浏览器提升重定向次数过多

  # HTTP 强制跳转到 HTTPS + www
    server {
        listen 80;
        server_name oshenkinoo.top www.oshenkinoo.top;
        return 301 https://www.oshenkinoo.toprequest_uri;
    }

    # 处理 https://oshenkinoo.top 跳转到 https://www.oshenkinoo.top
    #下面这一段是chatgpt帮我添加的,不然主域名用https无法访问,也无法重定向
    #现在暂时没有出错,它有时候还挺靠谱的,嘿嘿
    server {
        listen 443 ssl;
        server_name oshenkinoo.top;

        ssl_certificate cert/oshenkinoo.top.pem;
        ssl_certificate_key cert/oshenkinoo.top.key;

        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        return 301 https://www.oshenkinoo.toprequest_uri;
    }

    # 主站点 https://www.oshenkinoo.top
    server {
        listen 443 ssl;
        server_name www.oshenkinoo.top;

        ssl_certificate cert/oshenkinoo.top.pem;
        ssl_certificate_key cert/oshenkinoo.top.key;

        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

ssl证书获取

直接在阿里云上领取免费的就好了,有效期3个月,在没有完全弄明白之前不要付费买证书,等你验证完你的域名发现没法用也退不了了。

我就踩了这个坑,买了个ip证书,以为只要是解析到这个ip的域名都能用(能实现这个的应该是泛域名证书),结果是只能使用ip直连。:sob:
网上有很多免费的证书,能不花钱就不花钱,缺点也可能只有所谓的安全性不高。其实给个人网站用,安不安全不重要,主要还是强迫症。不然每次访问浏览器左上角都显示“不安全”,不介意的话直接用http也不是不可以,反正也没有几个人会来,只要做好备份就行了。我相信没人会无聊到攻击这种小破站,就算被打了也就重启加导入备份的事。


呃还有,不要熬夜研究这些东西,不然逻辑会很混乱,因为很多弯路都是我熬夜的时候走出来的。但是我觉得就该夜深人静的时候做这种事情,还是我白天太懒了,等到想做的时候已经半夜了。其实这篇文章也是熬夜写的,哈哈哈哈哈哈哈哈哈!:pensive:
还有好多想写的没写,明天再写吧。还记得要写什么吗

文章封面是pixiv上"おおね"的作品,他画的小樱保留了原画风的同时还甚至超越了原画,是我目前见到的最好的魔卡少女樱二创,真的是戳到了我的心巴上了。:heart_eyes:

5.21
这几天做了把用户真实ip地址同步到web端上,不然之前一直显示的是本地frpc的ip。
frpc配置:

[[proxies]]
...
transport.proxyProtocolVersion = "v2" #在每个通道中加上这一行就好了
#注意:不知道是不是bug在一个https通道开启后每个https通道都要加上这个功能
#不然浏览器就会显示关闭了连接

nginx配置:

server {
        listen 443 ssl proxy_protocol; #listen行后面加上proxy_protocol
        ...
        real_ip_header proxy_protocol;
        real_ip_recursive on;
        set_real_ip_from 192.168.10.30;#在server块中加上这三行,这里的ip地址写frpc的ip
        ...
    }
#同上,每个监听443端口的server块中都要增加这些配置

这回gpt不管用了,是我自己一点点试出来的。


♥一定要开心♥