Nodejs 有偿求助:nginx 域名隐性(地址栏域名不变)跳转

发布于 1周前 作者 gougou168 来自 nodejs/Nestjs

跪求大神,帮助实现一个关键功能:域名隐性跳转(也称为域名掩码或隐形重定向)。具体需求如下:

隐性跳转实现: 所有输入的域名在用户浏览器地址栏中保持不变,但实际内容从目标 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 域名隐性(地址栏域名不变)跳转

78 回复

你到底希望显示 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 。

是的,bbb 是一个字段值,ccc.com 是别人的

谢谢,这个尝试过没有成功

朋友,你这是在做黑产啊!

跳转的是协议官方的网站,这里有黑产什么事??

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,浏览器地址会变得

可能是理解有误 感觉不只是反代- - 一个 rewrite 不够的样子- -

要做完善比较困难,因为页面里面会有静态的访问地址,需要动态改页面内容。这种一般 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 ,如果这样只是个反向代理了。如果网站内容写死了域名 处理起来就麻烦一点。

CF 边缘处理这种也比较灵活, 根据情况转发数据就行,不过你的需求描述没完全看明白

方便留个 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

可是我的需求反代的域名和目录都是不固定的,能做吗。

很强,“比如 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 实现。

感谢,我试了一下真的可以隐性跳转了。就是出其他 bug 了😭

别自己瞎定义名词,典型的反向代理,但是你可能需要动态配置

在 Node.js 和 Nginx 环境下实现域名隐性跳转(即地址栏域名不变),通常是通过 Nginx 配置反向代理来实现的。以下是一个简要的步骤和示例配置:

  1. 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

  2. 重启 Nginx

    保存配置文件后,重启 Nginx 以应用更改:

    sudo systemctl restart nginx
  3. Node.js 应用

    确保你的 Node.js 应用能够处理来自 Nginx 的请求。如果应用需要在特定域名下运行,你可以通过 req.headers.host 检查请求的域名。

通过上述配置,当用户访问 yourdomain.com 时,请求会被 Nginx 转发到 Node.js 应用,但地址栏中的域名不会改变,实现了隐性跳转的效果。这种方法适用于大多数基于 Nginx 和 Node.js 的应用部署场景。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!