请教大佬们一个反向代理问题

查看 121|回复 8
作者:seeyourface   
前提:
A 应用中通过微前端的方式嵌入了一个 B 应用,A 应用运行在 nginx 监听的 443 端口,防火墙开放 443 端口。
B 应用运行在 8081 端口并且防火墙不开放该端口,B 应用拦截器中做了一个简单的认证,只要请求 B 应用的接口中的请求头含有 X-User-Name 头部并且值不为空就能请求成功,否则认证失败。
现在在 nginx 中将/source (表示 B 应用接口的请求)开头的请求都代理到了 8081 ,且同时自动添加请求头部 X-User-Name ,本意是使 A 应用能正常访问 B 应用
但是浏览器访问 Protocol://ip:6433/source 时 B 应用会自动跳转到自己的/home 地址,然后请求主页相关接口并且都带上了头部,导致可以从浏览器访问 B 应用。
在不修改代码的情况下,能不能只通过修改 nginx 配置实现浏览器无法访问 B 应用,A 应用通过嵌入方式可以正常访问 B 应用;
nginx 反向代理配置:
location ^~ /source {
proxy_set_header X-User-Name '1';
proxy_pass https://127.0.0.1:8081;
}

应用, Nginx, 请求, source

luhuisicnu   
简单,浏览器无法主动添加这个 X-User-Name header 。所以 nginx 配置里面不加这个 header ,让 A 应用嵌入的 B 应用的超链接,js 添加这个 header ,就行了
dier   
ChatGPT 建议加一个"add_header X-Frame-Options "SAMEORIGIN";" 来限制非同源来访问这个页面。你试试
```
location ^~ /source {
proxy_set_header X-User-Name '1';
proxy_pass https://127.0.0.1:8081;
add_header X-Frame-Options "SAMEORIGIN"; # 添加 X-Frame-Options 防止页面被嵌套
}
```
seeyourface
OP
  
@luhuisicnu 我懂前端,前端开发说微前端的嵌入方式他只是引入了一个 B 应用的地址,具体请求的接口他都不知道也不能往请求头里面加 header ,大佬你这个 js 添加 header 是指什么
seeyourface
OP
  
@seeyourface 说错了,我不懂。。。
seeyourface
OP
  
@dier 试了一下,还是不行
dier   
@seeyourface #5 试试这个呢 "add_header Content-Security-Policy "frame-ancestors 'self'";"
zhongerbing   
@seeyourface #3 微前端一般都有通信方式,直接使用通信的方式来让 b 应用添加。如果单独打开也拿不到 a 通信过来的数据,应该就可以实现你的需求
cdswyda   
allow 127.0.0.1; # 只让 nginx 代理访问
deny all; # 禁止其他所有 IP 地址访问
您需要登录后才可以回帖 登录 | 立即注册

返回顶部