跪求大神,帮助实现一个关键功能:域名隐性跳转(也称为域名掩码或隐形重定向)。具体需求如下:
隐性跳转实现: 所有输入的域名在用户浏览器地址栏中保持不变,但实际内容从目标 URL 加载。 需要处理的域名除了数字英文,还包含特殊字符(如 emoji 、中文、日文等)。 例如,当用户在地址栏访问 1.aaa.com ,服务器基于 API 查询“1.aaa”指向的页面如“bbb”,则跳转目标 URL 为 ccc.com/bbb ,但是地址栏域名不变仍显示 1.aaa.com 。 其他都实现了,就是这个隐性跳转搞不定,ccc.com 不允许跨域访问,没办法代理它的内容。
技术要求: 服务器端技术:nodejs Nginx pm2 代理目标 URL 是基于 API 指向的页面。
1
xiaoming1992 108 天前 via Android
你到底希望显示 bbb 的内容还是 ccc.com/bbb 的内容?
|
2
xiaoming1992 108 天前 via Android
aaa 是你自己的,bbb 和 ccc 不是你自己的,对吧?
|
3
ysc3839 108 天前
稳妥的方案只有用浏览器端 Service Worker 拦截请求,像其他文本替换之类的方案,副作用都太大了。
|
4
CnpPt 108 天前
好像有 DNS 厂家做过这个功能,实现是网页 iframe😂
|
5
chenxuuu 108 天前
直接用 nginx 跑个 lua 模块就能实现吧?
https://poe.com/s/SbO790ZFitf1Dogp2ovc |
6
om2mo 108 天前
nginx 配置 node.js api 转发到 node.js 由它来处理域名隐形跳转
|
7
chenzhe 108 天前
🐎一个学习一下。
|
8
efcndi 108 天前
很多域名注册商支持域名转发,本身就可以选择这种转发方式,比如 Spaceship 。
|
9
pagxir 107 天前 via Android
反向代理
|
10
powerman OP @xiaoming1992 是的,bbb 是一个字段值,ccc.com 是别人的
|
12
ericguo 107 天前
朋友,你这是在做黑产啊!
|
14
Qiss 107 天前 10
OP 哪来那么多奇奇怪怪的词,反向代理就是。
|
15
rrfeng 107 天前 via Android
一个 rewrite 指令完事,给我 1000 包教会。
|
17
0x5c0f 107 天前
不是,随便找一个 AI 工具问下就行了
|
18
xxs55 107 天前
cdn 不就可以了
|
19
coolloves 107 天前
感觉就是反代下就完事了吧
根据需求做一些细节的配置. |
20
kissice 107 天前
下面这样不晓得可以不
```config location / { proxy_cookie_domain ~ ccc.com; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://ccc.com/bbb; } ``` |
23
sss15 107 天前
似乎反代只能解决开始的问题,反代回来的 html 里应用的 js 譬如是 http://ccc.com/static/1.js ,这应该是可以加载的,应该没啥大问题
关键问题是 js 里的请求又是 http://ccc.com/api/action 这样的地址,对方网站又是不允许跨域的,他请求回来的网站就没办法正常显示了 |
24
wnpllrzodiac 107 天前 via Android
这不就是跳板机么。内容是服务器转发给浏览器的吧。如果是 302,浏览器地址会变得
|
25
xubeiyou 107 天前
可能是理解有误 感觉不只是反代- - 一个 rewrite 不够的样子- -
|
26
wnpllrzodiac 107 天前 via Android
要做完善比较困难,因为页面里面会有静态的访问地址,需要动态改页面内容。这种一般 case by case.可以私我交流下。
|
28
xuAN111 107 天前
你百度搜一下反代,几分钟就会了。
|
29
totoro625 107 天前
@kissice #20 同样的需求+1
proxy_pass 或许 rewrite 会 302 跳转 如果要说具体技术实现的话,在 CDN 里有一个词叫“回源跟随 301/302”: https://cloud.baidu.com/doc/CDN/s/klk80mlnh |
30
liuidetmks 107 天前
浏览器不是吃素的
再说了,人家 js 发请求,请求参数取页面 host ,太多了 巨坑 |
32
LoliconInside 107 天前
您要搜索的是否是:反向代理
|
35
xxyang 107 天前
iframe
|
36
sead 107 天前
|
37
zsh2517 107 天前
|
40
Jianrry 107 天前 via iPhone
我之前接过 2 个单子,和楼主的需求差不多,通过 nginx 反向代理实现的。
预计工作时间 1-2 个小时,最后两个单子分别收了 50 、100 。 看到楼上的报价之后,我发现报价还有很大的提示空间。 |
43
jiangzm 107 天前
@Jianrry #40 这个要看目标网站内容实现,有点网站不写死域名请求,跟随当前 document domain ,如果这样只是个反向代理了。如果网站内容写死了域名 处理起来就麻烦一点。
|
47
zhangjiashu2023 107 天前
做过,邮箱给我发联系方式 [email protected]
|
49
buffzty 107 天前
aHR0cDovL2IubXR3LnNvLzVIM1JqYg== 想要这种效果? nginx 配置一下不就好啦
|
51
runlongyao2 107 天前
其实就是反代
|
52
ttlive 107 天前
不就是反向代理能实现的事情嘛?
|
53
xuelu520 107 天前
iframe 应该是最好的选择
|
54
nevermoreluo 107 天前
我有点好奇目标域名是什么了,我想自己动手试试,感觉很简单,但是还是想动手试试。
因为都是页面但是差别太大了,静态页面当然随便反代一下就好了,实际上后面的 api 以及跨域怎么搞以及目标网站有没有 waf 之类的怎么搞也是问题吧 |
55
yinmin 107 天前 via iPhone
@powerman 如果网页用反代,通常是不能变更目录结构的。目标服务器的目录 /info ,你反代的目录也需要/info 不能/ccc/info ,因为很多网页里引用的 js 、css 很多都用绝对路径写的。
|
56
EmbraceQWQ 107 天前
@zsh2517 能给一个隔壁的邀请码吗
|
57
powerman OP @zhangjiashu2023 你好已发
|
58
zsh2517 107 天前
@EmbraceQWQ 隔壁我才一级,发不了。需要二级才能发。
我平常还是 V2EX 刷的多,那边太强调活跃度,不太喜欢这种氛围(比如 “灌水”“前排”)所以看的比较少😂 |
59
liuliancao 107 天前
和楼上差不多 proxy_pass 就好了 但是这样可能会被封掉
|
60
thatlazyman 107 天前 via Android
类似谷歌镜像站
|
61
EmbraceQWQ 107 天前
@zsh2517 太可惜了,我在隔壁还想水一波
|
62
buffzty 107 天前
我上面 base64 是个网站 已经把本站给镜像了,配置一下 nginx 和 lua 脚本,几行代码就搞定,可以用子路径反代任意域名 支持绝大多数功能 包括 cookie token.
比如我的网站 a.com, 你访问 a.com/b.com 就是 b 网站,访问 a.com/c.com 就是 c 网站. 此时在 b c 网站点站内链接不会改变 a.com. 如果要子路径不显示都可以 比如 a.com 返回的东西就是 b.com |
63
powerman OP 可是我的需求反代的域名和目录都是不固定的,能做吗。
|
65
seeyoy 107 天前
nginx
proxy_pass 后 sub_filter 了解一下,够用了,可以替换内容 |
66
buffzty 107 天前
|
69
powerman OP @buffzty
正经小工具。 [需求补充如下] 我的网站有点类似镜像站 mirror.com 源站是 example.com 当用户访问 tom.mirror.com ,我用 js 去查询 API:比如 tom.mirror 返回的值是 uid1 ,那对应的源站的二级目录是 example.com/uid1 。 现在需要实现的功能是 用户访问二级域名 tom.mirror.com ,实际指向 example.com/uid1 ,但浏览器地址栏仍然显示 tom.mirror.com 。 tom 和 uid 这些都是会变的,不知道这样讲能理解吗 (特别感谢 V 友 @Jianrry 帮我总结上述需求) |
70
powerman OP @buffzty
现在是这样配置的 nginx server { listen 80; server_name *.mirror.com; location / { proxy_pass http://localhost/:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } |
71
buffzty 107 天前
用户访问 tom.mirror.com 时 应该是后端查询该代理到哪个 url
你这个是一对一的 直接反代都足够了,你反代的时候 tom.mirror.com -> example.com, 再重定向到 tom.mirror.com/uid1 接着修改 反代 resp header 和 body, 遇到 html,js,css 文件修改 example.com url-> tom.mirror.com, 再在 html 文件 顶部注入 js 代码 hook, 比如 hook 网络请求 将所有 example.com->tom.mirror.com.其他的遇到啥 hook 啥 可以 hook 到你跟源站一样 除了域名 |
73
dallaslu 107 天前
@root71370 “申请个域名就可以直接套”,是这样的没错。比如 hostloc.com 就太多套壳站
|
74
dallaslu 107 天前
如果你在用 Cloudflare ,那么可以用 Cloudflare Worker 。跳转规则和页面内容替换逻辑都可以非常简单地用 node 实现。
|
75
mlboy 106 天前 via iPhone
vx:bG9zdGRhbmNl
|
77
ruanimal 106 天前
别自己瞎定义名词,典型的反向代理,但是你可能需要动态配置
|