![Nginx 使用 mysql 结果作为变量在 headers more 模块中使用](https://linux22.com/image/629669/Nginx%20%E4%BD%BF%E7%94%A8%20mysql%20%E7%BB%93%E6%9E%9C%E4%BD%9C%E4%B8%BA%E5%8F%98%E9%87%8F%E5%9C%A8%20headers%20more%20%E6%A8%A1%E5%9D%97%E4%B8%AD%E4%BD%BF%E7%94%A8.png)
我们不做过多详述,我们有以下要求:
a) 从mysql查询简单的单列、单行结果。
b) 将此变量用作更多标题模块 add_header 指令的一部分。
c) 如果没有返回结果(例如:行数为 0),则对请求 uri(我记得是 ($request_uri?) 进行模式匹配并使用此处的结果。
d) 理想情况下,将这些数据缓存在 nginx 端的某个地方,以便将来的请求可以重用这些数据,而无需 mysql 开销。大约有 500 万个结果,但一旦缓存,它们就始终保持不变。
有人用过 nginx 和 lua 吗,我猜这是最好的路线?
还有其他推荐的方法吗?
答案1
这确实是 nginx 不适合做的事情,大多数 web 应用程序平台(即 php、python、ruby、asp.net 等)会做得更好。Nginx 旨在实现非常直线的速度,数据库查找将比大多数 nginx 请求的实时时间更长。
因此,要回答这个问题——使用 nginx 反向代理到您选择的平台,在那里构建神奇的重定向器。如果您使用正确的标头反馈它并在 nginx 中配置缓存,您仍然可以利用 nginx 的这一部分来减轻应用服务器的负载,等等。