关于 nginx 上短链的实现

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

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

考虑性能,就要用缓存热数据等概念了。
zhuweiyou
2020-07-03 13:46:16 +08:00
proxy_pass
loveyu
2020-07-03 16:07:41 +08:00
@KuroNekoFan 是的,所以我说常见就 2 个,c 不是
qiayue
2020-07-03 16:23:48 +08:00
@opengps #9 从短字符串获取长链接这一步你放在哪里处理?
mlboy
2020-07-03 18:30:40 +08:00
openresty 我有套实现。 不过没开源。有时间整理整理开源下。
rrfeng
2020-07-03 18:31:26 +08:00
直接 lua mysql 然后返回 302 就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/686815

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX