React HTTP 请求问题

2022-01-10 21:14:06 +08:00
 wudaown

各位大佬,

目前在开发某项目,希望后端不能被外网访问

前端和外网是通的,可以访问

前端的机器和后端机器在同一个内网

现在希望用户访问前端后由前端的机器发起请求而不是从用户网络发起请求。

大佬们 这个能做到吗。。

开发完了 今天测试才想起来网络请求是从用户网络出去的。。这我就很尴尬了。。

3021 次点击
所在节点    前端开发
59 条回复
maplezzz
2022-01-10 21:16:40 +08:00
部署前端的时候 nginx 做一下转发
wudaown
2022-01-10 21:17:57 +08:00
@maplezzz 可以详细说一下吗?我 nginx 做法转发,然后后端就直接暴露了。。。
ijse
2022-01-10 21:18:06 +08:00
是不是弄个反代就好了? nginx proxy_pass
wudaown
2022-01-10 21:19:24 +08:00
@maplezzz

location /api/ {
proxy_pass http://xx.xx.xx.xx (后端服务器地址
}

然后后端就直接可以通过 http://zz.zz.zz.zz/api (前端地址
访问了。。。
wudaown
2022-01-10 21:19:58 +08:00
@ijse 可以详细说一下吗?谢谢 我试过了 proxy_pass 后端直接暴露了
wudaown
2022-01-10 21:20:47 +08:00
@maplezzz
@ijse 澄清一下,这个 nginx 在前端服务器上面
izoabr
2022-01-10 21:24:03 +08:00
不知道我的理解对不对哦。
1 、你的 react 跟前端机器没关系,React 程序是运行在客户端浏览器里的。所以你说的前端是不是你那个提供 80 Http 服务的那个机器?我们暂且叫前置静态服务器吧。
2 、如果这里说的后端是你的 API 服务的话,你不希望用户直接访问到,那就在刚才那个前置静态服务里,加一个反向代理,事实上大多数 React 项目都是这么运行的,前置一个 NGINX 提供静态服务和 API 的转发,这样在你后端服务器看访问来源是来自于这个 NGINX 的,但是这个请求体本身是用户端构造的,也就是说虽然不是直接访问,但这种代理访问形式也是不直接解决一些安全问题的。
3 、所以你最好描述一下你的需求是什么,比如是安全需求,那首先考虑网络层面的安全,就应该把提供外网服务的前置服务器跟后端服务器分开,不要在一个子网里,然后两网之间加网络安全策略甚至是应用安全策略,比如就是允许前置服务器内网 IP 访问后端服务器的 80 端口,其它端口不允许;然后不允许后端服务器访问外网;但仅仅是网络安全策略还是不够的,因为毕竟用户构造的请求体可以直接被转发到后端,那就应该考虑进一步的应用安全策略了。
wudaown
2022-01-10 21:27:38 +08:00
@izoabr
1. 对的一个前置静态服务器存放 react 静态文件
2. 可以有稍详细一点的配置 或者关键词 麻烦你了
3. 安全的话,只要用户不能通过任何 url 直接访问后端 api 资源,其他安全问题团队其他人会处理。

谢谢了
wudaown
2022-01-10 21:28:13 +08:00
@izoabr
补充一下
1. 前置静态服务器就是用 nginx serve react 的文件
izoabr
2022-01-10 21:31:45 +08:00
@wudaown #8

那需求很简单明确了,就是不希望用户能通过 URL 访问到后端 API 资源对吧?
解决方案也简单,拔网线就好了。 🐶

NGINX 的转发就是 proxy_pass ,你就搜这个,或者搜 NGINX 反向代理。
wudaown
2022-01-10 21:33:08 +08:00
@izoabr
location /api/ {
proxy_pass http://xx.xx.xx.xx (后端服务器地址
}
我试过了。。
然后后端就直接可以通过 http://zz.zz.zz.zz/api (前端地址
访问了

是我哪里搞错了吗?
izoabr
2022-01-10 21:34:54 +08:00
@wudaown #11 没错呀,这目的不就为了代理访问嘛?如果不想让它访问到,那就不配置这个就好了呀
ch2
2022-01-10 21:36:56 +08:00
@wudaown #11 zz.zz.zz.zz 是内网 ip ,外网压根访问不了
izoabr
2022-01-10 21:37:11 +08:00
@wudaown #11 难道你希望用户没办法通过任何方法访问到后端?那不就约等于拔了网线了嘛?
配置代理访问也不行,后端直接暴露给用户也不行,那不就完全不希望用户碰到后端的数据嘛?我不太理解了。。。
wudaown
2022-01-10 21:37:13 +08:00
@wudaown 不配置的话,当我从浏览器发起请求的时候 ( http://xx.xx.xx.xx 这个地址是无法被外网访问的,资源就无法返回了。
flyhaozi
2022-01-10 21:37:13 +08:00
我觉得你要的会不会其实是服务端渲染😅,不过也还是掩耳盗铃啊,就算不给 api ,页面数据也总有办法解析
izoabr
2022-01-10 21:40:50 +08:00
外网 IP1<---->前置服务器<----->内网 IP1<------>内网 IP2<----->后端服务器

你是不是想说,后端服务器,访问 http://内网 IP1/api/能访问到自己的服务?

你不想它访问到是么?
izoabr
2022-01-10 21:42:15 +08:00
@wudaown #15 对的呀,你看 11 楼的时候能访问,不行。现在不能访问也不行,那咋整啊
wudaown
2022-01-10 21:43:07 +08:00
@izoabr 倒不如说是必须通过浏览器的 react 程序才可以访问,代理之后就可以直接通过 url 访问了
wudaown
2022-01-10 21:43:56 +08:00
@izoabr
xx.xx.xx 是内网地址
zz.zz.zz.zz 是外网地址

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

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

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

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

© 2021 V2EX