V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
xiaozhuc
V2EX  ›  NGINX

关于 nginx 上短链的实现

  •  
  •   xiaozhuc · 2020-07-03 11:49:48 +08:00 · 4035 次点击
    这是一个创建于 1364 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司现在做的短链是通过生成一个 6 位随机数然后把这个随机数和真实地址放到数据库里。访问的时候访问一个前端工程然后前端工程把这个随机数拿去请求接口然后拿真实地址再跳转。
    想要知道能不能让 nginx 服务器直接访问接口然后跳转,省去访问这个前端工程的时间。
    16 条回复    2020-07-03 18:31:26 +08:00
    luoyou1014
        1
    luoyou1014  
       2020-07-03 11:51:13 +08:00
    openresty + redis
    asAnotherJack
        2
    asAnotherJack  
       2020-07-03 12:14:25 +08:00
    这个短链靠谱吗
    wysnylc
        3
    wysnylc  
       2020-07-03 12:17:31 +08:00
    不建议,因为如果去掉这一层中间层后面的业务更新修改就很麻烦
    xiri
        4
    xiri  
       2020-07-03 12:18:07 +08:00 via Android
    短链接不一般都是后端查询跳转吗?你描述的这个怎么看起来这么奇怪
    zktz
        5
    zktz  
       2020-07-03 12:20:55 +08:00
    前端工程是个啥
    如果 nginx 直接访问接口,那么 nginx 不就变成前端工程了吗?
    况且,这个可以直接从后端重定向啊
    loveyu
        6
    loveyu  
       2020-07-03 12:26:48 +08:00   ❤️ 1
    常见就 2 方案吧:
    A:nginx -> 后端读数据库,后端 302 (最常见,5 楼方案)
    B:openresty -> 直接读 redis 302, 如果找不到时去后端 (性能考虑比较多,1 楼方案)
    C: 前端 -> 接口 -> 前端重定向 (一般有特别变态的统计需求时, 楼主方案)
    xiaozhuc
        7
    xiaozhuc  
    OP
       2020-07-03 13:15:46 +08:00
    @loveyu 感觉需要尝试下方案 A,目前是有统计需求,但是都是后端在做的
    xiaozhuc
        8
    xiaozhuc  
    OP
       2020-07-03 13:21:17 +08:00
    @asAnotherJack 毕竟只是随机数,肯定会有问题
    opengps
        9
    opengps  
       2020-07-03 13:21:24 +08:00 via Android
    感觉楼主把短连接做复杂了,短连接只是个链接,点击后就自动走服务器的 302 跳转了,前端只需要在合适的地方挂上就行了,完全是个<a>标签的用法,而不是自己看拿到真实地址自己控制跳转
    KuroNekoFan
        10
    KuroNekoFan  
       2020-07-03 13:28:37 +08:00 via iPhone
    @loveyu c (楼主方案)怎么看都很奇怪
    imdong
        11
    imdong  
       2020-07-03 13:33:42 +08:00
    随便一个语言,实现短链跳转功能,所需要的代码大概都不会超过 10 行(不考虑性能与基础库)。

    基本上,获取 url (中 id 部分),查询数据库,然后 header ("location: url")

    考虑性能,就要用缓存热数据等概念了。
    zhuweiyou
        12
    zhuweiyou  
       2020-07-03 13:46:16 +08:00
    proxy_pass
    loveyu
        13
    loveyu  
       2020-07-03 16:07:41 +08:00
    @KuroNekoFan 是的,所以我说常见就 2 个,c 不是
    qiayue
        14
    qiayue  
       2020-07-03 16:23:48 +08:00
    @opengps #9 从短字符串获取长链接这一步你放在哪里处理?
    mlboy
        15
    mlboy  
       2020-07-03 18:30:40 +08:00
    openresty 我有套实现。 不过没开源。有时间整理整理开源下。
    rrfeng
        16
    rrfeng  
       2020-07-03 18:31:26 +08:00 via Android
    直接 lua mysql 然后返回 302 就行了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5521 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:03 · PVG 17:03 · LAX 02:03 · JFK 05:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.