sluther sluther - 2 months ago 8
PHP Question

Why does Apache print the contents of my PHP files instead of passing them to PHP-FPM?

I have the below configuration file under

sites-enabled
. I'm using
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

Answer

It turned out that I just needed a SetHandler directive in my Apache config.

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