nginx 在提供静态文件时是否调用了外部脚本(传递请求信息)?

Have nginx call an external script (passing request info) while serving static file?

我正在托管播客录音的服务器上设置下载日志记录。我们只想轻松登录 MySQL 带有时间戳和请求 IP 地址的下载文件。

由于这些文件平均至少有 150MB,我认为使用 readfile() 不是一个好主意(不希望 PHP 在文件下载的整个过程中运行),而是必须有文件存储在不同的位置,PHP 在登录后将它们重定向到。

问题当然是,一旦他们被重定向,他们可能会复制重定向的 link 并使用它,无意中绕过下载日志记录。我想避免这种情况。

我认为我最好的选择是将 nginx 配置为在提供文件之前调用辅助脚本,将请求数据传递给它进行处理。有办法吗?

是的,您可以使用 http://wiki.nginx.org/HttpLuaModule

location /file {
   content_by_lua 'os.execute("php cli.php ',ngx.var.remote_addr,'")';
}    

不确定传递 IP 的语法,但像这样应该可以。您还可以解析日志文件