Difference between revisions of "Php fpm on apache"

From Tom's notes
Jump to navigation Jump to search
 
Line 1: Line 1:
 +
=Setup of fastcgi (php/apache)=
 
Make sure to have following flags in make.conf:
 
Make sure to have following flags in make.conf:
 
<source>
 
<source>
Line 36: Line 37:
 
Restart apache
 
Restart apache
  
 +
=Verify things are working=
 
To verify the apache mpm, run
 
To verify the apache mpm, run
 
<source>
 
<source>
Line 49: Line 51:
 
</source>
 
</source>
 
The output should contain: Server API FPM/FastCGI
 
The output should contain: Server API FPM/FastCGI
 +
 +
=3 ways to pass HTTP authentication=
 +
Modify .htaccess:
 +
<source>
 +
RewriteEngine on
 +
RewriteCond %{HTTP:Authorization} ^(.+)
 +
RewriteRule ^(.*)$ $1 [E=HTTP_AUTHORIZATION:%1,PT]
 +
</source>
 +
 +
Alternative .htaccess:
 +
<source>
 +
SetEnvIf Authorization (.+) HTTP_AUTHORIZATION=$1
 +
</source>
 +
 +
Or in FastCGI configuration:
 +
<source>
 +
FastCGIConfig -pass-header HTTP_AUTHORIZATION
 +
</source>

Latest revision as of 23:08, 24 April 2021

Setup of fastcgi (php/apache)

Make sure to have following flags in make.conf:

USE="fpm threads"
APACHE2_MODULES="proxy_fcgi"
APACHE2_MPMS="event"

Emerge apache / php to activate flags. In case of using redis

emerge -v1 dev-php/pecl-redis

Set user and group to apache for php-fpm in /etc/php/fpm-php7.4/fpm.d/www.conf

user = apache
group = apache

Add and start php-fpm

rc-update add php-fpm default
/etc/init.d/php-fpm start

Disable standard PHP module in apache by editing /etc/conf.d/apache2 and removing '-D PHP'

Activate php-fpm in apache via the fcgi proxy:

        ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/localhost/htdocs/$1
        DirectoryIndex index.php

Make sure to use the same path in the fcgi url to reference the path on your server (documentroot). Also put the ProxyPassMatch directive after other ProxyPass directives or otherwise the reverse proxies will no longer work for *.php links as they would be intercepted by this one.

Restart apache

Verify things are working

To verify the apache mpm, run

apache2ctl -M | grep mpm

In this case it should return: mpm_event_module (static)

To verify the php fcgi, create a .php file containing:

<?php
        phpinfo();
?>

The output should contain: Server API FPM/FastCGI

3 ways to pass HTTP authentication

Modify .htaccess:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.+)
RewriteRule ^(.*)$ $1 [E=HTTP_AUTHORIZATION:%1,PT]

Alternative .htaccess:

SetEnvIf Authorization (.+) HTTP_AUTHORIZATION=$1

Or in FastCGI configuration:

FastCGIConfig -pass-header HTTP_AUTHORIZATION