0

我一直在苦苦挣扎,通过谷歌查看我的问题的想法和解决方案,但我仍然无法弄清楚这一点。

我有一个使用 mod_fastcgi 的 Apache2 服务器,并且正在使用 Symfony2。一切似乎都运行良好,CSS 和 JS 文件以及 PHP 文件都已正确解析。但是,问题在于图像文件,例如 .png 文件(甚至无法识别 favicon.ico)。直接访问该文件会给我Access denied,而在 .twig 模板中使用文件会在 apache 的 error.log 中出现以下错误:

    FastCGI: server "/home/{...}/www/fastcgi/mina/php5.external/favicon.ico" stderr: Access to the script '/home/{...}/www/fastcgi/mina/php5.external/favicon.ico' has been denied (see security.limit_extensions)

我目前的配置是:

fastcgi.conf:

    <IfModule mod_fastcgi.c>
       FastCgiIpcDir /var/lib/apache2/fastcgi/
       AddHandler php5-fcgi .php
       Action php5-fcgi /cgi-bin/php5.external
       <Location "/cgi-bin/php5.external">
        Order Allow,Deny
        Allow from All
       </Location>
    </IfModule>

我的虚拟主机配置:

<VirtualHost *:6308>
    ServerName mina.loc
    DocumentRoot /home/{...}/www/mina/web

    # Fast CGI + FPM
    FastCgiExternalServer /home/{...}/www/fastcgi/mina/php5.external -socket /var/run/php5-fpm.sock
    Alias /cgi-bin/ /home/{...}/www/fastcgi/mina/

    <Directory />
        Options FollowSymLinks 
        AllowOverride All
    </Directory>

    <Directory /home/{...}/www/mina/web>
        Options FollowSymlinks  
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    Action application/x-httpd-php /cgi-bin/php5
    ErrorLog /var/log/apache2/error.log
    LogLevel debug 

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T/%D" extended
    CustomLog /var/log/apache2/mina_access.log extended

    # Enable output compression for all text/html files
    AddOutputFilterByType DEFLATE text/html text/plain
</VirtualHost>

wherephp5.external是指向我的 Symfony 文件夹的符号链接web,包含app.php, app_dev.php,.htaccess文件,以及指向我的包、javascripts 和 css 文件的链接。

我不太确定问题出在哪里,因为我读过的关于该主题的大部分内容都是关于 Nginx + fastcgi 的。我猜它正在将整个 web 文件夹设置为与 fastcgi 一起使用,但不能确定。有没有人有什么建议?谢谢。

4

2 回答 2

0

好的,我设法自己解决了这个问题。是我对 fastcgi 配置的误解导致了这个问题,我按照这个链接解决了这个问题。

这是修改后的两个文件:

fastcgi.conf

<IfModule mod_fastcgi.c>
    ScriptAlias /cgi-bin/ "/home/{...}/www/fastcgi/"

    AddHandler php5-fcgi .php .php5 .php4
    Action php5-fcgi /cgi-bin/php5.fcgi

</IfModule>

在这里,php5.fcgi是以下脚本:

#!/bin/bash
#
# php5.fcgi
# Shell Script to run PHP5 using mod_fastcgi under Apache 2.x
#
#USER=$(/usr/bin/whoami)
#PHPRC="/var/www/$USER/.cgi-bin/php.ini"
PHP_FCGI_CHILDREN=5
#PHP_FCGI_MAX_REQUESTS=1000
#export PHPRC
export PHP_FCGI_CHILDREN
#export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php5-cgi

虚拟主机配置:

<VirtualHost *:6308>
    ServerName mina.loc
    DocumentRoot /home/{...}/www/mina/web

    FastCgiExternalServer /home/{...}/www/fastcgi/php5.fcgi -socket /var/run/php5-fpm.sock

    <Directory />
        Options FollowSymLinks 
        AllowOverride All
    </Directory>

    <Directory /home/{...}/www/mina/web>
        Options FollowSymlinks  
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel debug 

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T/%D" extended
    CustomLog /var/log/apache2/mina_access.log extended

    # Enable output compression for all text/html files
    AddOutputFilterByType DEFLATE text/html text/plain
</VirtualHost>
于 2013-07-22T13:18:12.220 回答
0

将此添加到您的 php-fpm 配置以解决问题:

 security.limit_extensions = FALSE
于 2013-07-19T13:20:15.363 回答