V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
powerman
V2EX  ›  Node.js

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

  •  
  •   powerman · 2024-08-07 22:00:13 +08:00 · 5367 次点击
    这是一个创建于 393 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    隐性跳转实现: 所有输入的域名在用户浏览器地址栏中保持不变,但实际内容从目标 URL 加载。 需要处理的域名除了数字英文,还包含特殊字符(如 emoji 、中文、日文等)。 例如,当用户在地址栏访问 1.aaa.com ,服务器基于 API 查询“1.aaa”指向的页面如“bbb”,则跳转目标 URL 为 ccc.com/bbb ,但是地址栏域名不变仍显示 1.aaa.com 。 其他都实现了,就是这个隐性跳转搞不定,ccc.com 不允许跨域访问,没办法代理它的内容。

    技术要求: 服务器端技术:nodejs Nginx pm2 代理目标 URL 是基于 API 指向的页面。

    77 条回复    2024-08-09 12:03:57 +08:00
    xiaoming1992
        1
    xiaoming1992  
       2024-08-07 22:41:28 +08:00 via Android
    你到底希望显示 bbb 的内容还是 ccc.com/bbb 的内容?
    xiaoming1992
        2
    xiaoming1992  
       2024-08-07 22:42:10 +08:00 via Android
    aaa 是你自己的,bbb 和 ccc 不是你自己的,对吧?
    ysc3839
        3
    ysc3839  
       2024-08-07 22:53:36 +08:00
    稳妥的方案只有用浏览器端 Service Worker 拦截请求,像其他文本替换之类的方案,副作用都太大了。
    CnpPt
        4
    CnpPt  
       2024-08-07 22:56:59 +08:00
    好像有 DNS 厂家做过这个功能,实现是网页 iframe😂
    chenxuuu
        5
    chenxuuu  
       2024-08-07 23:04:15 +08:00
    直接用 nginx 跑个 lua 模块就能实现吧?
    https://poe.com/s/SbO790ZFitf1Dogp2ovc
    om2mo
        6
    om2mo  
       2024-08-07 23:10:39 +08:00
    nginx 配置 node.js api 转发到 node.js 由它来处理域名隐形跳转
    chenzhe
        7
    chenzhe  
       2024-08-07 23:50:06 +08:00
    🐎一个学习一下。
    efcndi
        8
    efcndi  
       2024-08-08 00:09:01 +08:00
    很多域名注册商支持域名转发,本身就可以选择这种转发方式,比如 Spaceship 。
    pagxir
        9
    pagxir  
       2024-08-08 07:15:43 +08:00 via Android
    反向代理
    powerman
        10
    powerman  
    OP
       2024-08-08 07:23:21 +08:00
    @xiaoming1992 是的,bbb 是一个字段值,ccc.com 是别人的
    powerman
        11
    powerman  
    OP
       2024-08-08 07:24:03 +08:00
    @chenxuuu 谢谢,这个尝试过没有成功
    ericguo
        12
    ericguo  
       2024-08-08 07:45:06 +08:00
    朋友,你这是在做黑产啊!
    powerman
        13
    powerman  
    OP
       2024-08-08 08:28:54 +08:00
    @ericguo 跳转的是协议官方的网站,这里有黑产什么事??
    Qiss
        14
    Qiss  
       2024-08-08 08:46:00 +08:00   ❤️ 10
    OP 哪来那么多奇奇怪怪的词,反向代理就是。
    rrfeng
        15
    rrfeng  
       2024-08-08 08:55:00 +08:00 via Android
    一个 rewrite 指令完事,给我 1000 包教会。
    powerman
        16
    powerman  
    OP
       2024-08-08 08:59:54 +08:00
    @rrfeng 你好怎么联系
    0x5c0f
        17
    0x5c0f  
       2024-08-08 09:02:26 +08:00
    不是,随便找一个 AI 工具问下就行了
    xxs55
        18
    xxs55  
       2024-08-08 09:05:53 +08:00
    cdn 不就可以了
    coolloves
        19
    coolloves  
       2024-08-08 09:12:09 +08:00
    感觉就是反代下就完事了吧
    根据需求做一些细节的配置.
    kissice
        20
    kissice  
       2024-08-08 09:12:26 +08:00
    下面这样不晓得可以不
    ```config
    location / {
    proxy_cookie_domain ~ ccc.com;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass https://ccc.com/bbb;
    }
    ```
    coolloves
        21
    coolloves  
       2024-08-08 09:13:08 +08:00
    @Qiss 是啊,一顿描述猛如虎,感觉需求就是一个反代就完事了
    zhtyytg
        22
    zhtyytg  
       2024-08-08 09:16:45 +08:00
    @Qiss 确实,看了一长串终于反应过来是反代。
    sss15
        23
    sss15  
       2024-08-08 09:23:45 +08:00
    似乎反代只能解决开始的问题,反代回来的 html 里应用的 js 譬如是 http://ccc.com/static/1.js ,这应该是可以加载的,应该没啥大问题
    关键问题是 js 里的请求又是 http://ccc.com/api/action 这样的地址,对方网站又是不允许跨域的,他请求回来的网站就没办法正常显示了
    wnpllrzodiac
        24
    wnpllrzodiac  
       2024-08-08 09:26:13 +08:00 via Android
    这不就是跳板机么。内容是服务器转发给浏览器的吧。如果是 302,浏览器地址会变得
    xubeiyou
        25
    xubeiyou  
       2024-08-08 09:27:09 +08:00
    可能是理解有误 感觉不只是反代- - 一个 rewrite 不够的样子- -
    wnpllrzodiac
        26
    wnpllrzodiac  
       2024-08-08 09:27:50 +08:00 via Android
    要做完善比较困难,因为页面里面会有静态的访问地址,需要动态改页面内容。这种一般 case by case.可以私我交流下。
    powerman
        27
    powerman  
    OP
       2024-08-08 09:44:05 +08:00
    @kissice 现在是类似这样写的没错,但是没有实现
    xuAN111
        28
    xuAN111  
       2024-08-08 09:53:09 +08:00
    你百度搜一下反代,几分钟就会了。
    totoro625
        29
    totoro625  
       2024-08-08 09:53:28 +08:00
    @kissice #20 同样的需求+1
    proxy_pass 或许 rewrite 会 302 跳转
    如果要说具体技术实现的话,在 CDN 里有一个词叫“回源跟随 301/302”: https://cloud.baidu.com/doc/CDN/s/klk80mlnh
    liuidetmks
        30
    liuidetmks  
       2024-08-08 09:54:40 +08:00
    浏览器不是吃素的
    再说了,人家 js 发请求,请求参数取页面 host ,太多了
    巨坑
    coolloves
        31
    coolloves  
       2024-08-08 10:00:18 +08:00
    @sss15
    所以要看细节,有影响的域名都做下反代.然后用 sub_filter 模块做下内容替换.这样,所有的都是你自己的域名了,什么跨域都不存在的.
    LoliconInside
        32
    LoliconInside  
       2024-08-08 10:12:07 +08:00
    您要搜索的是否是:反向代理
    root71370
        33
    root71370  
       2024-08-08 10:14:49 +08:00
    做不到完美的,如果能做到,那是不是我申请个域名就可以直接套 v2ex.com 了,而且所有功能都能正常使用?
    rrfeng
        34
    rrfeng  
       2024-08-08 10:34:35 +08:00
    @powerman
    abistey at gmail
    把需求描述清楚发过来
    xxyang
        35
    xxyang  
       2024-08-08 11:22:25 +08:00
    iframe
    sead
        36
    sead  
       2024-08-08 11:25:46 +08:00
    zsh2517
        37
    zsh2517  
       2024-08-08 11:28:59 +08:00
    如果想抄云厂商(如阿里云)的 DNS 显性隐性跳转。可以看这个,我在隔壁写过

    https://linux.do/t/topic/145420/3?u=zsh2517
    sead
        38
    sead  
       2024-08-08 11:29:57 +08:00
    @root71370 你说的这个有人在干,只不过谷歌浏览器不是吃素的,会直接弹红屏警告
    sead
        39
    sead  
       2024-08-08 11:40:45 +08:00
    @sss15 那就只能用 nodejs 中间件针对性做处理,改写资源加载地址到特定路由
    Jianrry
        40
    Jianrry  
       2024-08-08 12:34:28 +08:00 via iPhone
    我之前接过 2 个单子,和楼主的需求差不多,通过 nginx 反向代理实现的。

    预计工作时间 1-2 个小时,最后两个单子分别收了 50 、100 。

    看到楼上的报价之后,我发现报价还有很大的提示空间。
    powerman
        41
    powerman  
    OP
       2024-08-08 12:57:57 +08:00
    @sead 我现在用的就是 cf 的解析,您这个针对我这个问题是可以实现吗
    powerman
        42
    powerman  
    OP
       2024-08-08 12:59:44 +08:00
    @Jianrry 你好麻烦看一下 gmail
    jiangzm
        43
    jiangzm  
       2024-08-08 13:03:14 +08:00
    @Jianrry #40 这个要看目标网站内容实现,有点网站不写死域名请求,跟随当前 document domain ,如果这样只是个反向代理了。如果网站内容写死了域名 处理起来就麻烦一点。
    sead
        44
    sead  
       2024-08-08 13:07:20 +08:00
    @powerman CF 边缘处理这种也比较灵活, 根据情况转发数据就行,不过你的需求描述没完全看明白
    powerman
        45
    powerman  
    OP
       2024-08-08 13:12:51 +08:00
    @sead 方便留个 gmail 联系吗
    Jianrry
        46
    Jianrry  
       2024-08-08 13:56:58 +08:00 via iPhone
    @jiangzm 你说的是 防盗链 吧?

    防盗链 限制了请求头,只允许了指定的域名请求,这限制了反向代理。
    zhangjiashu2023
        47
    zhangjiashu2023  
       2024-08-08 14:10:34 +08:00
    做过,邮箱给我发联系方式 [email protected]
    Jianrry
        48
    Jianrry  
       2024-08-08 14:29:41 +08:00
    @powerman 你可以通过 telegram ( Jianrry ) 联系我。
    buffzty
        49
    buffzty  
       2024-08-08 14:56:10 +08:00
    aHR0cDovL2IubXR3LnNvLzVIM1JqYg== 想要这种效果? nginx 配置一下不就好啦
    powerman
        50
    powerman  
    OP
       2024-08-08 15:52:58 +08:00
    @Jianrry 已加
    runlongyao2
        51
    runlongyao2  
       2024-08-08 16:40:09 +08:00
    其实就是反代
    ttlive
        52
    ttlive  
       2024-08-08 16:45:42 +08:00
    不就是反向代理能实现的事情嘛?
    xuelu520
        53
    xuelu520  
       2024-08-08 16:48:59 +08:00
    iframe 应该是最好的选择
    nevermoreluo
        54
    nevermoreluo  
       2024-08-08 16:55:32 +08:00
    我有点好奇目标域名是什么了,我想自己动手试试,感觉很简单,但是还是想动手试试。
    因为都是页面但是差别太大了,静态页面当然随便反代一下就好了,实际上后面的 api 以及跨域怎么搞以及目标网站有没有 waf 之类的怎么搞也是问题吧
    yinmin
        55
    yinmin  
       2024-08-08 16:57:09 +08:00 via iPhone
    @powerman 如果网页用反代,通常是不能变更目录结构的。目标服务器的目录 /info ,你反代的目录也需要/info 不能/ccc/info ,因为很多网页里引用的 js 、css 很多都用绝对路径写的。
    EmbraceQWQ
        56
    EmbraceQWQ  
       2024-08-08 16:57:23 +08:00
    @zsh2517 能给一个隔壁的邀请码吗
    powerman
        57
    powerman  
    OP
       2024-08-08 17:39:44 +08:00
    @zhangjiashu2023 你好已发
    zsh2517
        58
    zsh2517  
       2024-08-08 17:47:35 +08:00
    @EmbraceQWQ 隔壁我才一级,发不了。需要二级才能发。
    我平常还是 V2EX 刷的多,那边太强调活跃度,不太喜欢这种氛围(比如 “灌水”“前排”)所以看的比较少😂
    liuliancao
        59
    liuliancao  
       2024-08-08 17:54:24 +08:00
    和楼上差不多 proxy_pass 就好了 但是这样可能会被封掉
    thatlazyman
        60
    thatlazyman  
       2024-08-08 18:21:55 +08:00 via Android
    类似谷歌镜像站
    EmbraceQWQ
        61
    EmbraceQWQ  
       2024-08-08 18:24:43 +08:00
    @zsh2517 太可惜了,我在隔壁还想水一波
    buffzty
        62
    buffzty  
       2024-08-08 18:47:45 +08:00
    我上面 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
    powerman
        63
    powerman  
    OP
       2024-08-08 19:37:14 +08:00
    可是我的需求反代的域名和目录都是不固定的,能做吗。
    root71370
        64
    root71370  
       2024-08-08 19:38:37 +08:00
    @buffzty 很强,“比如 a.com 返回的东西就是 b.com” 这个可以做个效果看下吗
    seeyoy
        65
    seeyoy  
       2024-08-08 19:41:10 +08:00
    nginx
    proxy_pass 后
    sub_filter 了解一下,够用了,可以替换内容
    buffzty
        66
    buffzty  
       2024-08-08 19:46:05 +08:00
    @powerman 用一个正则不就反代任意域名 任意路径了,你把你实际需求说下 只要不违法我直接把技术告诉你,不要你钱,网上跟你要钱的绝大多数都是骗子.

    @root71370 h5 的 push history 特性啊,这还用做吗,如果需要刷新还有效 加个 local storage
    powerman
        67
    powerman  
    OP
       2024-08-08 20:08:16 +08:00
    @buffzty 方便留个联系方式吗或者 gmail
    buffzty
        68
    buffzty  
       2024-08-08 20:20:03 +08:00
    @powerman 直接说实际需求吧,不私,只要不违法我会把方法贴上来
    powerman
        69
    powerman  
    OP
       2024-08-08 20:21:43 +08:00
    @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 帮我总结上述需求)
    powerman
        70
    powerman  
    OP
       2024-08-08 20:32:40 +08:00
    @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;
    }
    }
    buffzty
        71
    buffzty  
       2024-08-08 20:46:24 +08:00
    用户访问 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 到你跟源站一样 除了域名
    powerman
        72
    powerman  
    OP
       2024-08-08 21:05:42 +08:00
    @buffzty 不太理解,我这个 tom 是动态的,单一的反代好像搞不了
    dallaslu
        73
    dallaslu  
       2024-08-08 21:40:07 +08:00
    @root71370 “申请个域名就可以直接套”,是这样的没错。比如 hostloc.com 就太多套壳站
    dallaslu
        74
    dallaslu  
       2024-08-08 21:43:01 +08:00
    如果你在用 Cloudflare ,那么可以用 Cloudflare Worker 。跳转规则和页面内容替换逻辑都可以非常简单地用 node 实现。
    mlboy
        75
    mlboy  
       2024-08-09 07:36:31 +08:00 via iPhone
    vx:bG9zdGRhbmNl
    powerman
        76
    powerman  
    OP
       2024-08-09 09:55:41 +08:00
    @dallaslu 感谢,我试了一下真的可以隐性跳转了。就是出其他 bug 了😭
    ruanimal
        77
    ruanimal  
       2024-08-09 12:03:57 +08:00
    别自己瞎定义名词,典型的反向代理,但是你可能需要动态配置
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2470 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 15:55 · PVG 23:55 · LAX 08:55 · JFK 11:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.