Назад | Перейти на главную страницу

Настройка Debian 9 Stretch LAMP с изолированными пользователями с использованием FPM

Я пытаюсь настроить Apache и FPM на Debian 9 так же, как мы делали это ранее с Debian 7 и 8. Я считаю, что из-за устаревания mod_fastcgi в пользу mod_proxy_fcgi в Apache 2.4 и последующего его удаления из Debian 9 apt repos, мне не удалось выполнить нашу предыдущую настройку. По сути, мы использовали FPM для изолирования нескольких сайтов на одном сервере (промежуточном сервере / dev). Конечным результатом было то, что каждый сайт принадлежал и был сгруппирован по одному пользователю каждый, и FPM запускала сайт под процессами для этого конкретного пользователя.

Вот пример Apache vhost, который мы использовали:

FastCgiExternalServer /home/siteusername/www/php5-fcgi -socket /tmp/php5-fpm-siteusername.sock -pass-header Authorization

<VirtualHost *:80>
   DocumentRoot /home/username/www/domain.com/public_html/
   ServerName www.domain.com

   <Directory /home/siteusername/www/domain.com/public_html/>
      AllowOverride all
   </Directory>

   <Directory /home/siteusername/www/>
       Require all granted
       AllowOverride all
   </Directory>

   AddHandler php5-fcgi .php
   Action php5-fcgi /php5-fcgi
   Alias /php5-fcgi /home/siteusername/www/php5-fcgi

   <ifModule mod_headers.c>
      Header set X-Robots-Tag "noindex"
   </ifModule>
</VirtualHost>

Вот пример конфигурации FPM, которую мы использовали:

[siteusername]
listen = /tmp/php5-fpm-siteusername.sock

listen.allowed_clients = 127.0.0.1
listen.owner = www-data
listen.group = www-data

user = siteusername
group = siteusername

pm = ondemand
pm.max_children = 50

php_admin_value[upload_tmp_dir] = /home/siteusername/tmp/upload
php_admin_value[session.save_path] = /home/siteusername/tmp/session

Эта точная настройка на Debian 9 с Apache 2.4, PHP 7.0, FPM 7.0, с mod_proxy_fcgi (и обновленными номерами версий) приводит к ошибке при запуске Apache:

Invalid command 'FastCgiExternalServer', perhaps misspelled or defined by a module not included in the server configuration

Я предполагаю, что эта команда была частью mod_fastcgi, и без нее я не могу запускать сайты под своими пользователями. Вместо этого они работают с www-данными, как любой обычно настроенный сайт Apache.

Мне пока не удалось найти документацию о том, как выполнить эту настройку. Кто-нибудь знает, что это за обновленные конфиги для mod_proxy_fcgi?

Попробуй это.

В определении FPM АДАПТИРУЙТЕ имя сокета, чтобы оно соответствовало правильной версии php.

[siteusername]
listen = /tmp/php7-fpm-siteusername.sock

(В Debian 9 это уже не php5, а php7)

В вашем определении Vhost УДАЛИТЕ следующее

FastCgiExternalServer /home/siteusername/www/php5-fcgi -socket /tmp/php5-fpm-siteusername.sock -pass-header Authorization
...
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /home/siteusername/www/php5-fcgi

В том же определении vhost ДОБАВЬТЕ следующее

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

В качестве альтернативы вы можете ДОБАВИТЬ следующее в своем определении vhost

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/tmp/php7-fpm-siteusername.sock|fcgi://localhost/home/siteusername/www/"

Убедитесь, что модули mod_proxy и mod_proxy_fcgi включены

a2enmod proxy proxy_fcgi

Я был в той же ситуации, что и вы, и я нашел это решение.

https://www.devops.zone/webserver/installing-php7-fpm-with-apache2-worker-on-ubuntu/

Меня устраивает.

Удачи