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

2021-01-15 23:11:11 +08:00
 sudoy

也不知道这种骚操作有没有人这么干过,反正我正在这么干。就是把前端挂在类似 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 。

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

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

1 、自签证书不被信任,那手动信任一下证书就好了。
2 、跨域问题,fetch 网址没有 Access-Control-Allow-Origin 头,那加上就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/745385

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX