![nginx 将仿制图像重写为 PHP](https://linux22.com/image/655094/nginx%20%E5%B0%86%E4%BB%BF%E5%88%B6%E5%9B%BE%E5%83%8F%E9%87%8D%E5%86%99%E4%B8%BA%20PHP%20.png)
致力于使用 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;
}