V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
sudoy
V2EX  ›  HTTP

前端挂外网,后端放内网,请问怎么解决 https 请求问题?

  •  
  •   sudoy · 2021-01-15 23:11:11 +08:00 · 3557 次点击
    这是一个创建于 1168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    也不知道这种骚操作有没有人这么干过,反正我正在这么干。就是把前端挂在类似 GitHub page 这样的地方,后端直接在内网(局域网)运行 REST API,然后就是直接在 https 的页面下 fetch( http://192.168.1.9:5000)。现在遇到的问题是,在 https 网站下面请求非 http 的 URL,浏览器会报错。我把内网的 API 改成 https (自签名的证书),浏览器还是会报错。

    可能被问的问题

    1. 为啥不统一放外网或者内网?

    想尝试一下有没有这种操作。如果实在没有好的解决办法,我就把它放到内网去,或者找个没有用 https 的外网页面托管服务。

    2. 为啥前端要用 https? 改成 http 不就好了?

    外网的静态页面托管(类似 GitHub page )就是自带 https 的,设置不了

    3. 为啥不是127.0.0.1或者localhost, 而是 192.168.1.9

    因为我们内网有一台电脑用来运行一些轻量级程序,没有公网 IP 。

    27 条回复    2021-01-18 11:34:22 +08:00
    powerfulyang
        1
    powerfulyang  
       2021-01-15 23:23:12 +08:00 via iPhone
    你好可爱呀.
    dusu
        2
    dusu  
       2021-01-15 23:26:59 +08:00 via iPhone
    whistle 你值得拥有
    sudoy
        3
    sudoy  
    OP
       2021-01-15 23:27:36 +08:00 via iPhone
    dusu
        4
    dusu  
       2021-01-15 23:27:55 +08:00 via iPhone
    @dusu 好吧 审题错了 不是调试环境那就只能内网映射了
    xiangyuecn
        5
    xiangyuecn  
       2021-01-15 23:28:35 +08:00
    买个玉米(正规签发证书需要,自签名部署根证书麻烦的一逼,沙雕高版本 Android 还不信任),解析到 192.168.1.9 。不要把内网当内网,这样看就和公网没有区别了😒
    sudoy
        6
    sudoy  
    OP
       2021-01-15 23:33:54 +08:00 via iPhone
    @dusu https://wproxy.org/whistle/ 您说的是这个吗?
    sudoy
        7
    sudoy  
    OP
       2021-01-15 23:36:36 +08:00 via iPhone
    @xiangyuecn 我也想到这个了,哈哈哈。这样一来同事还以为我部署到外网了,结果他们在别的地方还访问不了
    Caballarii
        8
    Caballarii  
       2021-01-15 23:37:31 +08:00
    既然如此,外网又访问不了,那干嘛放外网
    oott123
        9
    oott123  
       2021-01-16 01:09:01 +08:00 via Android
    浏览器可控吗?可以通过 flags 关闭安全策略(慎重),或者手动打开 https 的自签名证书信任一下,或者部署一个自签名的根
    cmdOptionKana
        10
    cmdOptionKana  
       2021-01-16 01:28:44 +08:00 via Android
    还是没看明白都放内网有何不可
    docxs
        11
    docxs  
       2021-01-16 01:40:19 +08:00 via iPhone
    搞不懂,没有公网 ip,外网访问 192.168 怎么到你内网机器?难道我的网络白学了?!
    m4d3bug
        12
    m4d3bug  
       2021-01-16 02:11:01 +08:00 via Android
    内网穿透 or zerotier
    walpurgis
        13
    walpurgis  
       2021-01-16 02:41:47 +08:00   ❤️ 1
    干过类似的,给同事写过一个油猴脚本,让他在别人网站上点一下就把网页内容爬下来发到公司内网服务器上
    因为别人网站是 https 的,导致内网服务器也必须是 https
    解决办法?配个 https 证书就完事了,内网和 https 完全不矛盾,证书绑定的是域名,域名指向内网地址就行了
    wpblank
        14
    wpblank  
       2021-01-16 02:52:21 +08:00 via iPhone
    弄个域名解析到 192 就好吧
    muzuiget
        15
    muzuiget  
       2021-01-16 03:43:37 +08:00
    实在看不懂,是 https/http 混合内容,还是还是同源策略限制。

    你浏览器地址是 github 的 https 地址还是内网的 http 地址,如果是后者,应该是行的。
    alan0liang
        16
    alan0liang  
       2021-01-16 08:29:17 +08:00 via Android   ❤️ 1
    我们正在这么干,而且是内网动态 ip 。基本思路就是是把内网 ip 解析到域名上,有一些服务(比如 sslip.io )可以把任意 ip 对应到域名上,比如 192.168.1.1 -> 192-168-1-1.ip.cpnp.xyz ,申请个泛域名证书(*.ip.cpnp.xyz )部署到内网服务器上,内网服务器检测到内网 ip 变化的时候更新一下前端。(记得配 CORS )
    sujin190
        17
    sujin190  
       2021-01-16 09:53:56 +08:00
    或许可以考虑内网部署个单独的 dns 服务器,这样内外网域名解析结果就可以不一样,公网部署前端,内网前后端一起部署或者反代下前端,这样只有连上内网就才能正常用
    sudoy
        18
    sudoy  
    OP
       2021-01-16 10:01:45 +08:00
    @alan0liang 谢谢!我这边内网 IP 也会变,不过不用考虑内网 IP 变化,因为我直接用 hostname 即可。Windows 的话就直接是电脑名字,Linux 的话就是 hostname 。
    hjylxmhzq
        19
    hjylxmhzq  
       2021-01-16 11:03:05 +08:00 via Android
    搞个域名配个证书就好了
    eason1874
        20
    eason1874  
       2021-01-16 11:05:17 +08:00
    报错要看是什么错。这情况应该就两个可能:

    1 、自签证书不被信任,那手动信任一下证书就好了。
    2 、跨域问题,fetch 网址没有 Access-Control-Allow-Origin 头,那加上就好了。
    mikeguan
        21
    mikeguan  
       2021-01-16 11:13:29 +08:00 via Android
    我是没看懂这个操作,具体是基于什么考虑。
    内网有资源放后端程序,不在乎前端占用那点资源了吧
    如果只是想验证,那么是可行的
    SingeeKing
        22
    SingeeKing  
       2021-01-16 11:37:58 +08:00
    如果只是自己用的话,自签一个证书然后信任就可以
    dzdh
        23
    dzdh  
       2021-01-16 11:42:14 +08:00
    随便买个域名(哪怕是 tk 域名)。A 记录指向内网 IP 。然后给 letsencrypt 弄个免费证书即可。
    yanzhiling2001
        24
    yanzhiling2001  
       2021-01-16 12:21:28 +08:00
    我现在就是,计算部分放到内网里,不过我用的是 frp 内网转发,公网上用 nginx 配置 https,然后用用 nginx 反向代理到 frp 的 web 端口上,还没遇到这样的问题
    sudoy
        25
    sudoy  
    OP
       2021-01-16 16:53:01 +08:00 via iPhone
    谢谢大家回复!最后决定都放内网上了吗
    pkwenda
        26
    pkwenda  
       2021-01-16 21:44:29 +08:00
    @sudoy #25 是不是多了个吗
    sudoy
        27
    sudoy  
    OP
       2021-01-18 11:34:22 +08:00
    @pkwenda 嗯,多打了一个字
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5406 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:41 · PVG 16:41 · LAX 01:41 · JFK 04:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.