为什么 Apache 打印我的 PHP 文件的内容而不是将它们传递给 PHP-FPM?

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

我在

sites-enabled
下有以下配置文件。我正在使用
mod_proxy_fcgi

ServerName local.dev

<Directory /var/www/local/>
    AllowOverride all
    Require all granted
</Directory>


<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    ServerAlias *.local.*.com
    SetEnv CURRENT_ENVIRONMENT ENV_DOCKER

    ServerAdmin webmaster@localhost
    VirtualDocumentRoot /var/www/local/%3/trunk/%3+-%1/site/www

    ProxyPassMatch "^/var/www/local/(.*/trunk/.*/site/www/.*\.php.*)$" "fcgi://php:9000/var/www/local/$1"

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    LogLevel debug

    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    ServerAlias local.*.com
    SetEnv CURRENT_ENVIRONMENT ENV_DOCKER

    ServerAdmin webmaster@localhost
    VirtualDocumentRoot /var/www/local/%2/trunk/%2+/site/www

    ProxyPassMatch "^/var/www/local/(.*/trunk/.*/site/www/.*\.php.*)$" "fcgi://php:9000/var/www/local/$1"

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    LogLevel debug

    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
php apache
2个回答
2
投票

事实证明,我只需要在 Apache 配置中添加一个

SetHandler
指令。

<FilesMatch "\.php$">
    SetHandler "proxy:fcgi://php:9000"
</FilesMatch>

0
投票

此外,您可能还需要以下内容:

$ sudo a2enmod cgi
[sudo] password for foo: 
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
To activate the new configuration, you need to run:

  systemctl restart apache2

在花了太长时间比较旧机器(可以工作,是我 6 年前设置的)和新机器的配置后,我发现这一点令人沮丧。

这是在 Ubuntu 22 上,我刚刚设置的系统。

© www.soinside.com 2019 - 2024. All rights reserved.