Nodejs 有偿求助:nginx 域名隐性(地址栏域名不变)跳转
跪求大神,帮助实现一个关键功能:域名隐性跳转(也称为域名掩码或隐形重定向)。具体需求如下:
隐性跳转实现: 所有输入的域名在用户浏览器地址栏中保持不变,但实际内容从目标 URL 加载。 需要处理的域名除了数字英文,还包含特殊字符(如 emoji 、中文、日文等)。 例如,当用户在地址栏访问 1.aaa.com ,服务器基于 API 查询“1.aaa”指向的页面如“bbb”,则跳转目标 URL 为 ccc.com/bbb ,但是地址栏域名不变仍显示 1.aaa.com 。 其他都实现了,就是这个隐性跳转搞不定,ccc.com 不允许跨域访问,没办法代理它的内容。
技术要求: 服务器端技术:nodejs Nginx pm2 代理目标 URL 是基于 API 指向的页面。
Nodejs 有偿求助:nginx 域名隐性(地址栏域名不变)跳转
你到底希望显示 bbb 的内容还是 ccc.com/bbb 的内容?
aaa 是你自己的,bbb 和 ccc 不是你自己的,对吧?
稳妥的方案只有用浏览器端 Service Worker 拦截请求,像其他文本替换之类的方案,副作用都太大了。
好像有 DNS 厂家做过这个功能,实现是网页 iframe😂
直接用 nginx 跑个 lua 模块就能实现吧?
https://poe.com/s/SbO790ZFitf1Dogp2ovc
nginx 配置 node.js api 转发到 node.js 由它来处理域名隐形跳转
🐎一个学习一下。
很多域名注册商支持域名转发,本身就可以选择这种转发方式,比如 Spaceship 。
反向代理
谢谢,这个尝试过没有成功
朋友,你这是在做黑产啊!
跳转的是协议官方的网站,这里有黑产什么事??
OP 哪来那么多奇奇怪怪的词,反向代理就是。
一个 rewrite 指令完事,给我 1000 包教会。
你好怎么联系
不是,随便找一个 AI 工具问下就行了
cdn 不就可以了
感觉就是反代下就完事了吧
根据需求做一些细节的配置.
下面这样不晓得可以不config<br> location / {<br> proxy_cookie_domain ~ <a target="_blank" href="http://ccc.com" rel="nofollow noopener">ccc.com</a>;<br> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br> proxy_pass <a target="_blank" href="https://ccc.com/bbb;" rel="nofollow noopener">https://ccc.com/bbb;</a><br> }<br>
是啊,一顿描述猛如虎,感觉需求就是一个反代就完事了
确实,看了一长串终于反应过来是反代。
似乎反代只能解决开始的问题,反代回来的 html 里应用的 js 譬如是 http://ccc.com/static/1.js ,这应该是可以加载的,应该没啥大问题
关键问题是 js 里的请求又是 http://ccc.com/api/action 这样的地址,对方网站又是不允许跨域的,他请求回来的网站就没办法正常显示了
这不就是跳板机么。内容是服务器转发给浏览器的吧。如果是 302,浏览器地址会变得
要做完善比较困难,因为页面里面会有静态的访问地址,需要动态改页面内容。这种一般 case by case.可以私我交流下。
你百度搜一下反代,几分钟就会了。
#20 同样的需求+1
proxy_pass 或许 rewrite 会 302 跳转
如果要说具体技术实现的话,在 CDN 里有一个词叫“回源跟随 301/302”: https://cloud.baidu.com/doc/CDN/s/klk80mlnh
浏览器不是吃素的
再说了,人家 js 发请求,请求参数取页面 host ,太多了
巨坑
所以要看细节,有影响的域名都做下反代.然后用 sub_filter 模块做下内容替换.这样,所有的都是你自己的域名了,什么跨域都不存在的.
您要搜索的是否是:反向代理
做不到完美的,如果能做到,那是不是我申请个域名就可以直接套 v2ex.com 了,而且所有功能都能正常使用?
abistey at gmail
把需求描述清楚发过来
如果想抄云厂商(如阿里云)的 DNS 显性隐性跳转。可以看这个,我在隔壁写过
https://linux.do/t/topic/145420/3?u=zsh2517
你说的这个有人在干,只不过谷歌浏览器不是吃素的,会直接弹红屏警告
那就只能用 nodejs 中间件针对性做处理,改写资源加载地址到特定路由
我之前接过 2 个单子,和楼主的需求差不多,通过 nginx 反向代理实现的。
预计工作时间 1-2 个小时,最后两个单子分别收了 50 、100 。
看到楼上的报价之后,我发现报价还有很大的提示空间。
我现在用的就是 cf 的解析,您这个针对我这个问题是可以实现吗
你好麻烦看一下 gmail
#40 这个要看目标网站内容实现,有点网站不写死域名请求,跟随当前 document domain ,如果这样只是个反向代理了。如果网站内容写死了域名 处理起来就麻烦一点。
方便留个 gmail 联系吗
你说的是 防盗链 吧?
防盗链 限制了请求头,只允许了指定的域名请求,这限制了反向代理。
做过,邮箱给我发联系方式 [email protected]
你可以通过 telegram ( Jianrry ) 联系我。
aHR0cDovL2IubXR3LnNvLzVIM1JqYg== 想要这种效果? nginx 配置一下不就好啦
已加
其实就是反代
不就是反向代理能实现的事情嘛?
iframe 应该是最好的选择
我有点好奇目标域名是什么了,我想自己动手试试,感觉很简单,但是还是想动手试试。
因为都是页面但是差别太大了,静态页面当然随便反代一下就好了,实际上后面的 api 以及跨域怎么搞以及目标网站有没有 waf 之类的怎么搞也是问题吧
如果网页用反代,通常是不能变更目录结构的。目标服务器的目录 /info ,你反代的目录也需要/info 不能/ccc/info ,因为很多网页里引用的 js 、css 很多都用绝对路径写的。
能给一个隔壁的邀请码吗
你好已发
隔壁我才一级,发不了。需要二级才能发。
我平常还是 V2EX 刷的多,那边太强调活跃度,不太喜欢这种氛围(比如 “灌水”“前排”)所以看的比较少😂
和楼上差不多 proxy_pass 就好了 但是这样可能会被封掉
类似谷歌镜像站
太可惜了,我在隔壁还想水一波
我上面 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
可是我的需求反代的域名和目录都是不固定的,能做吗。
nginx
proxy_pass 后
sub_filter 了解一下,够用了,可以替换内容
用一个正则不就反代任意域名 任意路径了,你把你实际需求说下 只要不违法我直接把技术告诉你,不要你钱,网上跟你要钱的绝大多数都是骗子.
h5 的 push history 特性啊,这还用做吗,如果需要刷新还有效 加个 local storage
方便留个联系方式吗或者 gmail
正经小工具。
[需求补充如下]
我的网站有点类似镜像站 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 友 帮我总结上述需求)
现在是这样配置的 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;
}
}
用户访问 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 到你跟源站一样 除了域名
不太理解,我这个 tom 是动态的,单一的反代好像搞不了
“申请个域名就可以直接套”,是这样的没错。比如 hostloc.com 就太多套壳站
如果你在用 Cloudflare ,那么可以用 Cloudflare Worker 。跳转规则和页面内容替换逻辑都可以非常简单地用 node 实现。
vx:bG9zdGRhbmNl
感谢,我试了一下真的可以隐性跳转了。就是出其他 bug 了😭
别自己瞎定义名词,典型的反向代理,但是你可能需要动态配置
在 Node.js 和 Nginx 环境下实现域名隐性跳转(即地址栏域名不变),通常是通过 Nginx 配置反向代理来实现的。以下是一个简要的步骤和示例配置:
-
Nginx 配置:
首先,确保 Nginx 已安装并正确配置。编辑你的 Nginx 配置文件(通常位于
/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default
),添加以下配置:server { listen 80; server_name yourdomain.com; location / { proxy_pass http://localhost:3000; # 假设你的 Node.js 应用在 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; } }
这段配置会将所有对
yourdomain.com
的请求转发到http://localhost:3000
。 -
重启 Nginx:
保存配置文件后,重启 Nginx 以应用更改:
sudo systemctl restart nginx
-
Node.js 应用:
确保你的 Node.js 应用能够处理来自 Nginx 的请求。如果应用需要在特定域名下运行,你可以通过
req.headers.host
检查请求的域名。
通过上述配置,当用户访问 yourdomain.com
时,请求会被 Nginx 转发到 Node.js 应用,但地址栏中的域名不会改变,实现了隐性跳转的效果。这种方法适用于大多数基于 Nginx 和 Node.js 的应用部署场景。