技术解析

关于 nginx 上短链的实现
0
2021-05-25 18:47:21
idczone
公司现在做的短链是通过生成一个 6 位随机数然后把这个随机数和真实地址放到数据库里。访问的时候访问一个前端工程然后前端工程把这个随机数拿去请求接口然后拿真实地美国服务器址再跳转。
想要知道能不能让 nginx 服务器直接访问接口然后跳转,省去访问这个前端工程的时间。
openresty + redis

这个短链靠谱吗

不建议,因为如果去掉这一层中间层后面的业务更新修改就很麻烦

短链接不一般都是后端查询跳转吗?你描述的这个怎么看起来这么奇怪

前端工程是个啥
如果 nginx 直接访问接口,那么 nginx 不就变成前端工程了吗?
况且,这个可以直接从后端重定向啊

常见就 2 方案吧:
A:nginx -> 后端读数据库,后端 302 (最常见,5 楼方案)
B:openresty -> 直接读 redis 302, 如果找不到时去后端 (性能考虑比较多,1 楼方案)
C: 前端 -> 接口 -> 前端重定向 (一般有特别变态的统计需求时, 楼主方案)

感觉需要尝试下方案 A,目前是有统计需求,但是都是后端在做的

毕竟只是随机数,肯定会有问题

感觉楼主把短连接做复杂了,短连接只是个链接,点击后就自动走服务器的 302 跳转了,前端只需要在合适的地方挂上就行了,完全是个标签的用法,而不是自己看拿到真实地址自己控制跳转

c (楼主方案)怎么看都很奇怪

随便一个语言,实现短链跳转功能,所需要的代码大概都不会超过 10 行(不考虑性能与基础库)。
基本上,获取 url (中 id 部分),查询数据库,然后 header ("location: url")
考虑性能,就要用缓存热数据等概念了。

proxy_pass

是的,所以我说常见就 2 个,c 不是

从短字符串获取长链接这一步你放在哪里处理?

openresty 我有套实现。 不过没开源。有时间整理整理开源下。

直接 lua mysql 然后返回 302 就行了。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服