Nginx proxy_pass到动态主机

时间:2013-12-05 21:04:46

标签: php mysql nginx

目前我已经设置了一个PHP脚本,其中包含一大块代码,这些代码从动态位置(来自数据库)读取文件,并以块的形式回显给用户。它基本上是一个文件流脚本来隐藏原始文件的位置。

但是,这会带来很大的开销,因为PHP会在每次下载时堵塞我的服务器进程。相反,我想使用nginx,我想知道是否可以将proxy_pass指令动态设置为我的数据库中的值。

例如,如果我的网站在http://example.com/download?hash=abcd有一个页面,我需要从我的MySQL数据库中查找哈希abcd的下载URL,然后使用nginx和{{1 }}

有谁知道我怎么做到这一点?

1 个答案:

答案 0 :(得分:2)

您无法从nginx直接连接到mysql,但您可以添加代理位置,如

location ~ /proxy/(?<domain>[^/]*)(?<url>/.*) {
    internal;
    proxy_pass http://$domain$url;
}

并在您的应用程序中使用X-Accel-redirect标头,该标头将连接到数据库,通过哈希获取下载URL并设置为“X-Accel-Redirect:http://your.domain.com/proxy/other.domain.com/path/to/file.txt”。