1
votes

right now I'm installing or new apache2 webserver with PHP-FPM, because the old one is running with mod_php.

I found different Tutorials at the internet, unlikely most of them 1-2 years old. Most of them use:

libapache2-mod-fastcgi in combination with Apache and PHP-FPM.

At the Ubuntu 18.04 Repository this package is not available, just the package:

libapache2-mod-fcgid

Which of them can I use now ? Or what is the difference between both of them ? Unfortunately I cant really find a good explanation at the internet.

Furthermore I often read about

mod_proxy_fcgi

does that mean I dont need the libaapche2-mod-f... packages anymore ? ?

Right now I installed everything like this and it works, but I'm not sure If this is the right way:

a2enmod actions fastcgi alias proxy_fcgi
apt install php-7.2 php7.2-fpm php7.2-gd php7.2-mysql php7.2-curl php7.2-xml php7.2-zip php7.2-intl php7.2-mbstring php7.2-bz2 php7.2-json php7.2-apcu php7.2-imagick
a2enmod actions fastcgi alias proxy_fcgi

vHost:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    <FilesMatch \.php$>
         SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

PHP-FPM is running (see picture of info.php): PHP-FPM Working

And what is the difference between:

SetHandler and FastCgiExternalServer and ProxyPassMatch ^/(..php(/.)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1

?

I've got the feeling, that every tutorial is telling me something different and I cant really figure out what the best practice is in 2018 with Ubuntu2018.

2

2 Answers

0
votes

Here's my vhost for Apache connecting to FPM using mod_proxy_fcgi (apparently the recommended setup, although don't ask me for specifics!):

<VirtualHost *:80>
    ServerName awesome.scot
    ServerAlias localhost
    DocumentRoot /var/www/html/public

    <Directory "/var/www/html">
            DirectoryIndex index.php
            FallbackResource /index.php
            Options -Indexes +FollowSymLinks
            AllowOverride FileInfo All
            Require all granted
    </Directory>
    ProxyPassMatch ^/(.*\.php)$ fcgi://php:9000/var/www/html/public/$1
</VirtualHost>

in the conf, I also have these on:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

If you use XDebug, you'll need to change it's port to 9001 since 9000 is now taken.

If you need to see more config, check out my Docker LAMP stack config here https://github.com/delboy1978uk/lamp

0
votes

I know this is an old question but I wanted to give an updated response. As of the release of php5.3.3 (in 2010) a lot has changed. Some great info can be found on the Apache HTTP Server Wiki

The short answer (Note: replace php7.2 with the version you have installed) as to how to install only PHP-FPM on an Ubuntu apache2 server is:

# Install php-fpm:
apt install php-fpm

# Disable mod_php (Apache Handler API):
a2dismod php*

# Enable Apache Modules/Configs required by fpm:
a2enmod proxy_fcgi setenvif
a2enconf php7.2-fpm.conf

# Restart the services:
systemctl restart php7.2-fpm.service systemctl restart apache2.service

You are also going to need to change from using Pre-fork as your Multi-Processing Module (MPM) if you are going to run PHP-FPM. Here are some instructions.

Detailed Explanation: There are basically 3 different Server API's that can be installed with PHP: Apache Handler, FPM, or CGI. Looking at the different config files can help to understand what you may have installed on your system. Currently on Ubuntu 18.x with php7.x the following php.ini files get created depending on what you have installed:

/etc/php/7.2/cli/php.ini

This is the PHP-CLI program for running php on the command line. This is included whenever you install FPM, CGI, or the Apache Handler. You could install it directly with:

apt install php-cli

To find all the config files being used for PHP-CLI you can run:

php --ini

/etc/php/7.2/apache2/php.ini

This is the PHP plugin used by Apache. It will be found in /etc/apache2/mods-available/php7.2 If you have not installed PHP-FPM or PHP-CGI then this is the file that contains your webserver settings. To find all the config files you need to create a phpinfo() file in the website root directory.

To install you must also enable mod_php from within Apache.

apt install libapache2-mod-php
a2enmod php7.2

/etc/php/7.2/fpm/php.ini

This is the FastCGI Process Manager. It is a wrapper for PHP processing and runs as a standalone process on the system (unlike the Apache PHP plugin). You will only have this directory if you have installed PHP-FPM. In this case it will be the place to make config changes for your webserver and takes the place of the apache2/php.ini file. To find all the config files you need to create a phpinfo() file in the website root directory. Running PHP as a fastCGI process server with PHP-FPM requires using the apache module mods-enabled/mod_proxy_fcgi it is enabled along with php-fpm. Installing php-fpm will also configure apache with with conf-enabled/php7.2-fpm.conf that sets up FPM to run as a unix domain socket.

apt install php-fpm
a2enmod mod_proxy_fcgi

/etc/php/7.2/cgi/php.ini

This is a third way PHP could be installed. It is the legacy way of running PHP based applications as opposed to the newer PHP-FPM. mod_fcgid is a high performance alternative to mod_cgi or mod_cgid It would also be taking the place of the php.ini in either the Apache Plugin or PHP-FPM. To find all the config files you need to create a phpinfo() file in the website root directory. Again, it comes with it's own apache module and configuration: mods-enabled/fcgid.conf mods-enabled/fcgid

apt install libapache2-mod-fcgid
a2enmod fcgid