V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
8023
V2EX  ›  奇思妙想

如何充分利用家宽、通过非大陆服务器中转对外提供 web 服务。

  •  
  •   8023 · 2021-02-14 17:50:10 +08:00 · 6481 次点击
    这是一个创建于 1401 天前的主题,其中的信息可能已经有所发展或是发生改变。

    众所周知现在家宽是禁用 80 、443 、8080 等常用端口的,如果想要建站则需要租用昂贵的专线或是云服务器,更可怕的是需要进行 ICP 备案。我个人非常反感备案制度,又不想违法,所以宁愿多牺牲一部分时间和稳定性也不会去备案,更不会找别人代备(请不要回复相似提议)。我家的带宽比较大,联通电信移动三网接入,下载总带宽 1.2G 以上,上传带宽总计 250M 以上,且家里有性能过剩的服务器、数通设备,基础设施完全可以撑起所有网站的性能需求。

    我目前的解决方案是租用韩国、日本、台湾等与大陆临近地区的服务器。但网络质量越来越差、优质带宽的费用越来越高,我就想找一些冷门的解决方案。

    • 反代方案(网上查阅资料最多人建议的方案):将网站搭建在自己家,此时可以通过非标端口访问。在上述地区买一台大带宽低配置的服务器进行反向代理。此时可以省去租用高性能服务器的钱,而且过程对用户不可见。但流量是由我家转发到非大陆地区然后再传输回来,延迟会变高,且需要更大流量的主机,感觉没有折腾的必要。

    • 重定向方案:将网站搭建在自己家,此时可以通过非标端口访问。在上述地区买极低配置的服务器,将所有请求重定向到自己家的服务器(非标端口)。此时可以省去绝大部分租用服务器的钱,但用户访问时浏览器则会显示跳转后的、使用非标准端口的 url 。且不得不使用域名前缀对两台服务器进行区分,对用户来说不算友好。

    • 对象存储方案:将网站搭建在非大陆服务器上,在自己家搭建对象存储,在网站程序中调用对象存储中的数据。此时只有网站中少量请求需要访问非大陆服务器,其余内容(图片、附件等)则可以直接请求我家里的服务器,可以减轻服务器带宽花销(带宽费用比计算费用高得多),提高访问速度。但这个方法需要修改网站程序源代码,对于一些拿不到源码的服务比较麻烦,目前想到的是在网页中插入一段 js,然后将原地址正则替换成家里的服务器地址。

    • iframe 方案:将网站搭建在自己家,此时可以通过非标端口访问。在非大陆地区买极低配置的服务器,服务器中只放一个 html 页面,页面中使用 iframe 访问位于家中的非标端口 web 服务。此时服务器只需付出极少带宽,用户访问时均直连我家,访问速度和迁移难度都非常不错。但也有一些细节问题需要自己处理(浏览器地址栏 url 显示问题、打开 blank 属性超链接 url 为家里服务器非标准端口的地址等)。

    现在想问一下可爱的 v 友,有没有其它可行的操作,或上面的 iframe 方案和对象存储方案有没有现成的项目可以拿来改一改直接使用(明示白嫖)。

    提前表示感谢。

    29 条回复    2021-03-15 20:27:56 +08:00
    Track13
        1
    Track13  
       2021-02-14 17:52:02 +08:00 via Android   ❤️ 1
    我个人非常反感备案制度,又不想违法。家宽提供 web 服务,并且没有备案。你已经犯了
    opengps
        2
    opengps  
       2021-02-14 17:56:05 +08:00 via Android
    http 是明文,运营商直接可以识别出并且阻断甚至警告
    Jooooooooo
        3
    Jooooooooo  
       2021-02-14 17:56:45 +08:00
    ?

    用家庭带宽搭 web 服务就是违法的, 不想违法是什么意思?

    和问想杀人但不想违法一样有点奇怪啊
    lutian
        4
    lutian  
       2021-02-14 17:56:48 +08:00 via Android
    小聪明
    8023
        5
    8023  
    OP
       2021-02-14 17:58:34 +08:00
    @Track13 没有吧?互联网连被访问都做不到怎么叫互联网(
    任意端口的 web 服务都不行吗?如果真的是这样的话我也想到了:将域名绑定在一个非大陆服务器,下载一个空白 html 页面和一个 js 文件。使用 js 实现一个私有的隧道协议,使用这个私有协议访问家里服务器的内容,然后渲染到浏览器上,不过感觉过程太麻烦了,不到万不得已不打算这么做...
    xtli12
        6
    xtli12  
       2021-02-14 18:12:10 +08:00 via iPhone
    小心土条子弄死你
    lcdtyph
        7
    lcdtyph  
       2021-02-14 18:14:49 +08:00   ❤️ 1
    cloudflared argo tunnel
    littlewing
        8
    littlewing  
       2021-02-14 18:37:03 +08:00 via iPhone   ❤️ 1
    把你家的服务器等设备托管到机房
    lookas2001
        9
    lookas2001  
       2021-02-14 19:30:55 +08:00   ❤️ 1
    如果正常的网页内容,推荐使用反代,对用户,对搜索引擎都友好。
    如果是大量数据传输的,推荐走非常规协议,自己写一个客户端,如果一定要 web 的话,用 webrtc 。
    再多嘴一句,面对大陆用户的任何形式服务,如果想要做大,做正式,请走合规途径(备案),监管机构不是吃干饭的,你服务器到用户的路径上,如果是合规的,那一定会有三大运营商,他们想搞你不是能不能的问题,是想不想的问题。
    Ptu2sha
        10
    Ptu2sha  
       2021-02-14 19:45:19 +08:00
    每次看到这个节点下的一些点子就觉得中国人不缺智慧
    PMR
        11
    PMR  
       2021-02-14 19:57:33 +08:00 via Android
    《互联网信息服务管理办法》未修订版 即国令 292 号

    第二条 在中华人民共和国境内从事互联网信息服务活动,必须遵守本办法。
    本办法所称互联网信息服务,是指通过互联网向上网用户提供信息的服务活动。



    高级炸鱼🌚
    caola
        12
    caola  
       2021-02-14 19:59:38 +08:00   ❤️ 1
    web 服务可以用 alt-svc 方案,虽然只有较新的浏览器支持
    imydou
        13
    imydou  
       2021-02-14 19:59:58 +08:00
    frp 穿透 80 和 443 端口,公司内部 OA 是这么搞的。
    kerro1990
        14
    kerro1990  
       2021-02-14 20:02:30 +08:00 via iPhone
    数据加密吧,裸奔 web 服务想喝茶嘛
    neteroster
        15
    neteroster  
       2021-02-14 20:14:16 +08:00 via Android   ❤️ 6
    leschans
        16
    leschans  
       2021-02-14 20:44:49 +08:00 via iPhone
    备案不麻烦啊

    这样搞可能会被请喝茶
    tinkerer
        17
    tinkerer  
       2021-02-14 20:47:47 +08:00
    nebula
    yeqizhang
        18
    yeqizhang  
       2021-02-14 20:55:07 +08:00 via Android   ❤️ 1
    我服务器的网页也没备案啊,只是域名要备案,现在我域名都不用的。我也不搞违法的那些东西,单纯是因为为了一个一年使用期的域名备案觉得麻烦。

    不备案应该不是违法行为吧,你不做违法行为也没那么大精力管你的。
    DoctorCat
        19
    DoctorCat  
       2021-02-14 20:56:27 +08:00   ❤️ 1
    论技术圈普法的重要性。用技术对抗我国执法意志,不现实。
    huangsen365
        20
    huangsen365  
       2021-02-15 00:48:21 +08:00 via iPhone
    我想问一下:你家有 UPS 吗?没有的话,这个 web 服务 sla 如何保障?
    initd
        21
    initd  
       2021-02-15 01:22:18 +08:00   ❤️ 2
    网站没必要,家里又不能保证 6 个 9 的可用性。
    存媒体资源,就没有那么多要求,只需要公网 IP,保证最大化带宽速率,端口又不是必须的东西。
    而且自己的资源也不要对公众开放,仅自己能访问才能最大限度的规避问题。
    家里带宽可能最有用的是做 PT (移动宽度除外),做云主机都不行,毕竟一堆不能访问。
    想家里出高效用,就得保证可用性,不断电基本要求,这么算其实成本很高。
    jinliming2
        22
    jinliming2  
       2021-02-15 08:00:58 +08:00 via iPhone   ❤️ 1
    可以尝试使用你说的第一种反代方案配合 HTTP 的 alt-svc 头使用。
    alt-svc 用于指定替代服务,可以指定非标准端口,主流浏览器除了 safari 应该都支持了。
    反代存在延迟高的问题,你可以在反代的服务器上提供 alt-svc 头,指示替代服务并给出较长的缓存时间,浏览器会自动连接替代服务,以降低延迟。替代服务的协议可以使用 http/1.1,也可以直接升级 h2 和 h3 。
    xtli12
        23
    xtli12  
       2021-02-15 14:30:15 +08:00 via iPhone
    牛逼
    40EaE5uJO3Xt1VVa
        24
    40EaE5uJO3Xt1VVa  
       2021-02-15 19:32:51 +08:00
    跟我之前的想法不谋而合,只是用国外的机器反向代理家宽机器,双重延迟,得不偿失。

    https://www.v2ex.com/t/711228
    Themyth
        25
    Themyth  
       2021-02-17 11:36:21 +08:00
    @8023 这个想法很棒啊 请问 js 实现私有隧道协议有例子么?
    jinliming2
        26
    jinliming2  
       2021-02-18 09:14:52 +08:00 via iPhone
    @Themyth 这个应该只能用 websocket 去实现私有协议,浏览器下限制只能建立 HTTP 连接的。
    不过如果采用这种方案的话,那最简单的,国外那台主机提供的 html 里的资源地址全部指向国内的这台机器就行,用 HTTP 头解决好跨域问题就可以了。
    firefox12
        27
    firefox12  
       2021-02-18 16:39:54 +08:00
    如果只是技术对抗,还是能做做, 但是你人肉在国内,这是要进去的。定位太容易了。 不是 p2p 模式的服务 都是瞬间被切断
    jindom
        28
    jindom  
       2021-02-20 09:51:43 +08:00
    我现在的解决方案就是你说的反代方案:
    1.物理服务器架好 nginx
    2.服务器虚拟化 ROS,转发 web 服务到非标准端口
    3.腾讯云轻量 /OracleCloud 做 iptables 转发 80,443 流量到家宽非标准端口
    多的是下面的一步:
    4.套一层免费的 CloudFlare CDN
    实测套了之后无论是访问速度还是 TTFB 都很赞,但是大的文件资源下载速度不会太理想
    woyaojizhu8
        29
    woyaojizhu8  
       2021-03-15 20:27:56 +08:00
    非标端口也是不行的,只要是 http https 就不行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   852 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:46 · PVG 05:46 · LAX 13:46 · JFK 16:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.