如何在 nginx 位置块内设置 PHP-FPM 变量?

如何在 nginx 位置块内设置 PHP-FPM 变量?

由于某种原因,我们的网站有一个.jsphp文件需要交给 PHP-FPM。

但是,访问将被拒绝,因为默认情况下 PHP-FPM 仅允许 扩展.php

可以通过将以下内容添加到来解决php-fpm.conf

security.limit_extensions = .php .jsphp

但我只想针对 Nginx 配置中的特定服务器位置执行此操作,如下所示

location ~ (\.php|\.jsphp)$ {
    try_files $uri = 404;
    include /usr/local/etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9001; # 9000 for xdebug
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/usr/local/var/log/our-website.local-error.log";
}

是否可以为每个服务器位置添加 PHP-FPM 设置security.limit_extensions?如果可以,我该怎么做?

谢谢!

答案1

我认为不可能完全满足您的要求。PHP-FPM 配置文件不支持动态变量 - 所有内容都配置为一个设定值,然后使用这些值创建 PHP-FPM 池。

不过,有几种方法可以解决您的问题。

  1. 创建一个新的 PHP-FPM 池并让它在不同的套接字上监听。

    即复制 php-fpm.conf 文件中的现有池,将其监听的套接字更改为 9002,并security.limit_extensions仅更改该池的值。然后在 nginx 配置中将扩展名为 .jsphp 的文件发送到该新池。

  2. 将文件重命名为 .js.php,这是(在我看来)链接扩展类型的更好方法,因为它允许代码编辑器知道它是一个 PHP 文件,而无需在每个编辑器中设置自定义扩展。
    然后它有一个标准的 php 扩展,您不必担心它的单独配置。

相关内容