Apache php fpm默认配置如果htaccess文件中有错误

问题描述 投票:0回答:1

在Apache服务器中,我在FPM模式下安装了几个PHP版本。一切正常,这个conf:

    <Directory /var/www>
            Options Indexes FollowSymLinks Includes ExecCGI
            AllowOverride All
            Require all granted
            SetHandler php7
    </Directory>

<IfModule mod_fastcgi.c>
    #PHP 5
        Action php5 /php5
        Alias /php5 /usr/lib/cgi-bin/php5
        FastCgiExternalServer /usr/lib/cgi-bin/php5 -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization
    #PHP 7
        Action php7 /php7
        Alias /php7 /usr/lib/cgi-bin/php7
        FastCgiExternalServer /usr/lib/cgi-bin/php7 -socket /var/run/php/php7.2-fpm.sock -pass-header Authorization
</IfModule>

当我在.htaccess文件中使用SetHandler时,它也有效:

 SetHandler php5

但是,如果用户在.htaccess中犯了一些错误,就像这里:

SetHandler php5.6

浏览器返回PHP代码(安全中断):

 <?php phpinfo(); ?>

如何在安全性方面正确管理apache.conf,如果htaccess文件中存在用户错误,则只加载PHP默认版本?

我尝试这个配置,但默认只生成PHP7版本。在这里,用户无法更改.htaccess文件中的任何内容:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler php7
</FilesMatch>

感谢帮助。

php apache .htaccess config
1个回答
0
投票

现在我在默认的PHP配置中找到SetEnv设置的解决方案。需要Apache 2.4 mod:CGI代理和宏

a2enmod proxy_fcgi
a2enmod macro

Ubuntu Server 16.04的工作配置(例如phpfpm.conf文件):

SetEnv PHP_VER 5

<IfModule proxy_fcgi_module>

   ProxyErrorOverride on

   <FilesMatch "\.ph(p[2-6]?|tml)$">

        <Macro PHPver $ver $cgipath>
                <If "env('PHP_VER') == '$ver'">
                SetHandler '$cgipath'
                </If>
        </Macro>

        #PHP VERSIONS WITH SOCKET OR HOST :
        Use PHPver 7 'proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost'
        Use PHPver 5 'proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost'
        Use PHPver 5.4 'proxy:fcgi://localhost:9054'
        Use PHPver 5.5 'proxy:fcgi://localhost:9055'
        Use PHPver 5.6 'proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost'
        Use PHPver 7.0 'proxy:unix:/var/run/php/php7.0-fpm.sock|fcgi://localhost'
        Use PHPver 7.1 'proxy:unix:/var/run/php/php7.1-fpm.sock|fcgi://localhost'
        Use PHPver 7.2 'proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost'
        #ELSE IF (default version) :
        SetHandler 'proxy:fcgi://localhost:9054'

   </FilesMatch>

</IfModule>

现在我们可以通过以下方式正确调用.htaccess文件中的PHP版本:

SetEnv PHP_VER 7.0
© www.soinside.com 2019 - 2024. All rights reserved.