也不知道这种骚操作有没有人这么干过,反正我正在这么干。就是把前端挂在类似 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 。
1
powerfulyang 2021-01-15 23:23:12 +08:00 via iPhone
你好可爱呀.
|
2
dusu 2021-01-15 23:26:59 +08:00 via iPhone
whistle 你值得拥有
|
3
sudoy OP @powerfulyang 😂
|
5
xiangyuecn 2021-01-15 23:28:35 +08:00
买个玉米(正规签发证书需要,自签名部署根证书麻烦的一逼,沙雕高版本 Android 还不信任),解析到 192.168.1.9 。不要把内网当内网,这样看就和公网没有区别了😒
|
6
sudoy OP @dusu https://wproxy.org/whistle/ 您说的是这个吗?
|
7
sudoy OP @xiangyuecn 我也想到这个了,哈哈哈。这样一来同事还以为我部署到外网了,结果他们在别的地方还访问不了
|
8
Caballarii 2021-01-15 23:37:31 +08:00
既然如此,外网又访问不了,那干嘛放外网
|
9
oott123 2021-01-16 01:09:01 +08:00 via Android
浏览器可控吗?可以通过 flags 关闭安全策略(慎重),或者手动打开 https 的自签名证书信任一下,或者部署一个自签名的根
|
10
cmdOptionKana 2021-01-16 01:28:44 +08:00 via Android
还是没看明白都放内网有何不可
|
11
docxs 2021-01-16 01:40:19 +08:00 via iPhone
搞不懂,没有公网 ip,外网访问 192.168 怎么到你内网机器?难道我的网络白学了?!
|
12
m4d3bug 2021-01-16 02:11:01 +08:00 via Android
内网穿透 or zerotier
|
13
walpurgis 2021-01-16 02:41:47 +08:00 1
干过类似的,给同事写过一个油猴脚本,让他在别人网站上点一下就把网页内容爬下来发到公司内网服务器上
因为别人网站是 https 的,导致内网服务器也必须是 https 解决办法?配个 https 证书就完事了,内网和 https 完全不矛盾,证书绑定的是域名,域名指向内网地址就行了 |
14
wpblank 2021-01-16 02:52:21 +08:00 via iPhone
弄个域名解析到 192 就好吧
|
15
muzuiget 2021-01-16 03:43:37 +08:00
实在看不懂,是 https/http 混合内容,还是还是同源策略限制。
你浏览器地址是 github 的 https 地址还是内网的 http 地址,如果是后者,应该是行的。 |
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 )
|
17
sujin190 2021-01-16 09:53:56 +08:00
或许可以考虑内网部署个单独的 dns 服务器,这样内外网域名解析结果就可以不一样,公网部署前端,内网前后端一起部署或者反代下前端,这样只有连上内网就才能正常用
|
18
sudoy OP @alan0liang 谢谢!我这边内网 IP 也会变,不过不用考虑内网 IP 变化,因为我直接用 hostname 即可。Windows 的话就直接是电脑名字,Linux 的话就是 hostname 。
|
19
hjylxmhzq 2021-01-16 11:03:05 +08:00 via Android
搞个域名配个证书就好了
|
20
eason1874 2021-01-16 11:05:17 +08:00
报错要看是什么错。这情况应该就两个可能:
1 、自签证书不被信任,那手动信任一下证书就好了。 2 、跨域问题,fetch 网址没有 Access-Control-Allow-Origin 头,那加上就好了。 |
21
mikeguan 2021-01-16 11:13:29 +08:00 via Android
我是没看懂这个操作,具体是基于什么考虑。
内网有资源放后端程序,不在乎前端占用那点资源了吧 如果只是想验证,那么是可行的 |
22
SingeeKing 2021-01-16 11:37:58 +08:00
如果只是自己用的话,自签一个证书然后信任就可以
|
23
dzdh 2021-01-16 11:42:14 +08:00
随便买个域名(哪怕是 tk 域名)。A 记录指向内网 IP 。然后给 letsencrypt 弄个免费证书即可。
|
24
40EaE5uJO3Xt1VVa 2021-01-16 12:21:28 +08:00
我现在就是,计算部分放到内网里,不过我用的是 frp 内网转发,公网上用 nginx 配置 https,然后用用 nginx 反向代理到 frp 的 web 端口上,还没遇到这样的问题
|
25
sudoy OP 谢谢大家回复!最后决定都放内网上了吗
|