nginx 将仿制图像重写为 PHP

nginx 将仿制图像重写为 PHP

致力于使用 nginx 来提供图像服务。

static.foobar.com/UUID.jpg url 实际上将作为指向 PHP 脚本的指针,该脚本确定您是否有权查看该图像(如果有,则通过 PHP/X-Accel-Redirect 提供该图像)。

DNS/nginx 在子域上设置正确,但我收到 404。这是我当前的服务器块:

server {
    listen x.x.x.x:80;

    server_name static.foobar.com;

    location ~ \.(gif|jpg|png) {
        internal;
        rewrite "^/([a-f0-9]{8})-([a-f0-9]{4})-4([a-f0-9]{3})-([a-f0-9]{4})-([a-f0-9]{12}).(gif|jpg|png)" /dir/photo.php?uuid=$1-$2-4$3-$4-$5 last;
    }
}

我想知道 gif|jpg|png 的存在是否会强制 nginx 将 mime 类型设置为图像,这会在我将会话发送到 PHP 文件时导致冲突。这可能是问题所在吗?我还能做些什么来帮助调试这个问题,或者有人能给我一些建议吗?

非常感谢


更新:最后,问题在于我的服务器上,nginx php-fpm 不支持 cpanel,所以我的 nginx 配置根本无法运行 php。我希望通过 nginx 卸载这些文件的服务,但不幸的是,我不得不重新使用 apache。感谢大家的时间和帮助。

答案1

这里至少有一个问题是您internal在位置内使用了关键字。这意味着它将仅匹配来自 nginx 内部的请求,例如来自其他location块的请求。您应该删除该关键字。

您的正则表达式还需要其他修复。尝试以下location代码块:

location ~ \.(gif|jpg|png)$ {
    rewrite "^/([a-f0-9]{8})-([a-f0-9]{4})-4([a-f0-9]{3})-([a-f0-9]{4})-([a-f0-9]{12})\.(gif|jpg|png)$" /dir/photo.php?uuid=$1-$2-4$3-$4-$5 last;
}

相关内容