将PNG文件请求传递给Nginx中的PHP脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将PNG文件请求传递给Nginx中的PHP脚本相关的知识,希望对你有一定的参考价值。

这是我需要做的 - 我需要我的服务器提供一组图像的两个版本。第一组图像是真实的PNG文件,它们位于我服务器上的文件夹中,称之为/realimages。第二组图像实际上并不存在。当他们被请求时,我想要获取所请求的图像文件名,例如

https://example.com/nosuchimage/img1.png

通过坐落在/nosuchmage文件夹内的index.php脚本生成图像(或者如果更容易的话,在其他地方生成)。

该脚本执行以下操作

  • /realimages文件夹中获取相关图像
  • 使用PHP GD生成背景
  • 在背景上叠加相关图像
  • 提供结果

该脚本已编写完整,功能齐全。我不知道的是如何强制所有PNG图像请求到/nosuchimage文件夹被重定向到该脚本,原始请求作为脚本参数传递。

我知道这对nginx来说是一个相对简单的配置问题,涉及编写重写规则。然而,NGINX重写对我来说仍然是一个黑色的艺术。希望有人能够告诉我重写规则应该是什么。

答案

要重定向某个文件夹的所有图像,只需使用配置文件中的以下代码即可。

在我的情况下,我将使用默认文件。 /etc/nginx/sites-available/default

location ~ /realimages/(.+.png)$ {
    return 302 $scheme://$server_name/nosuchimage/$1;
}

// Access: http://www.example.com/images/valdeirpsr.png (Exists & Redirect to /nosuchimage/valdeirpsr.png)
// Access: http://www.example.com/images/valdeirpsr2.png (Not Exists & Redirect to /nosuchimage/valdeirpsr2.png)

要仅重定向特定文件夹中未找到的图像,只需使用配置文件中的以下代码即可。

location ~ /realimages/(.+.png)$ {
    error_page 404 $scheme://$server_name/nosuchimage/$1;
}

// Access: http://www.example.com/images/valdeirpsr.png (Exists & Show Image)
// Access: http://www.example.com/images/valdeirpsr2.png (Not Exists & Redirect to /nosuchimage/valdeirpsr2.png)

以上是关于将PNG文件请求传递给Nginx中的PHP脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在将请求传递给上游服务器之前删除 Nginx 中的客户端标头?

Lua with nginx in openresty:如果在 redis 缓存中找不到数据,则将请求传递给 FastCGI

将变量传递给从命令行运行的 PHP 脚本

将字符串传递给 PHP 文件以查询 SELECT 语句

php开启opcache加速

如何使用 pdo 将字符串数组传递给 php 中的 plsql 例程