通过Nginx设置网站的PHP设定值

通过修改php.ini配置文件可以全局方式修改PHP的设定值,但若不想改此值,也可以在Web服务器的网站中进行“局部”设置。

例如,使用Apache服务器来设置Zabbix的管理网站,需要修改几项php的值,我通常是在单独网站中直接添加如下设置:

vim /usr/local/apache/conf/extra/httpd-vhosts.conf
...
<Directory "/data/www/zabbix">
    <IfModule mod_php7.c>
        php_value post_max_size 32M
        php_value max_execution_time 300
        php_value max_input_time 300
        php_value date.timezone Asia/Shanghai
    </IfModule>
</Directory>

也可以将php_value的项目放于/data/www/zabbix目录下的.htaccess文件中。

当这样设置后,PHP应用于此站点的值旋即更改:

为了后期操作维护方便,我决定使用Nginx。

使用Nginx访问PHP网站是使用fastcgi方式,也可以通过传递进行局部修改。

按网上大部分 fastcgi_param PHP_VALUE 的方法进行操作,设定值并未成功修改,且测试后发现,传递过去需在键值中间加不 “=” 号都没有用:

vim conf/vhosts/php-prog
# Other Config Can Include PHP-FPM.
        index index.html index.htm index.php;
        fastcgi_intercept_errors on;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /$document_root/$fastcgi_script_name;
        include fastcgi_params;
    }
vim conf/vhosts/0-default.conf
# Nginx Second Configure.
server {
        listen 80 default_server;
        root "/data/www";
        error_page 404 /404.html;
    location ~ "/zabbix/.*\.php$" {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param PHP_VALUE "post_max_size 32M \n
                max_execution_time 300 \n
                max_input_time 300 \n
                timezone Asia/Shanghai";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
        include vhosts/php-prog;
}

 

可以看到,修改不成功;且经过测试以下几种写法都不会成功。

# 分开写(带不带=号都一样)
        fastcgi_param PHP_VALUE "post_max_size 32M";
        fastcgi_param PHP_VALUE "max_execution_time 300“;
...

# 连一起写 (带不带=号,\n换行符也都一样)
        fastcgi_param PHP_VALUE "post_max_size=32M
                max_execution_time 300
                max_input_time 300
                timezone Asia/Shanghai";

 

最终还是在php官网上找到方法可行,通过添加http包头变量。

经过一番测试,此方法可以修改成功,但修改的是整个php-fpm中的值,故使用此php-fpm的其它点同样会受到影响,如下:

# Nginx Second Configure.
server {
        listen 80 default_server;
        root "/data/www";
        error_page 404 /404.html;
    location ~ "/zabbix/.*\.php$" {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        set $php_value "post_max_size=32M";
        set $php_value "$php_value \n max_execution_time=300";
        set $php_value "$php_value \n max_input_time=300";
        set $php_value "$php_value \n date.timezone=Asia/Shanghai";
        fastcgi_param PHP_VALUE $php_value;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    include vhosts/php-prog;
}
server {
        listen 81 default_server;
        root "/data/www";
        error_page 404 /404.html;
        include vhosts/php-prog;
}

可以看到,PHP_VALUE变量值是传递给了zabbix/下,但修改会作用于整个php-fpm进程。

故,若想达到上面Apache中的效果,可以启动多个php-fpm的进程池(pool),来在Nginx中进行分别转发,以达到php-fpm进程间相互独立。

发表评论

error: Content is protected !!