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

Требуется изменение конфигурации для Apache + PhP-FPM 7.2?

До сих пор я использовал сервер Ubuntu 16.04.5 с Apache, Nginx в качестве обратного прокси, PHP 7.0 + FastCGI + FPM, все обновлено до последней версии. Все прошло нормально.

Это виртуальный хост Apache, например, для x.com:

<VirtualHost *:8080>
    ServerName x.com
    ServerAlias www.x.com
    ServerAdmin x@mail.com
    DocumentRoot /home/user/x.com/site
    ErrorLog /home/user/x.com/logs/error.log
    CustomLog /home/user/x.com/logs/access.log combined
    <Directory /home/user/x.com/site>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
    </Directory>
    <IfModule mod_fastcgi.c>
        AddHandler php7.2-fcgi-x.com .php
        Action php7.2-fcgi-x.com /php7.2-fcgi-x.com
        Alias /php7.2-fcgi-x.com /usr/lib/cgi-bin/php7.2-fcgi-x.com
        FastCgiExternalServer /usr/lib/cgi-bin/php7.2-fcgi-x.com -socket /var/run/php/php7.2-fpm.x.com.sock -pass-header Authorization
        <Directory /usr/lib/cgi-bin>
            Require all granted
        </Directory>
    </IfModule>
</VirtualHost>

Это один файл .conf пула FPM для x.com:

[x.com]

user = user
group = www-data

listen = /run/php/php7.2-fpm.x.com.sock

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

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Теперь я использую то же самое, но с Ubuntu 18.04.1 и PHP, FPM и т.д. 7.2. Это чистая установка, а не обновление с других версий.

Кажется, все работает нормально, но я не совсем уверен, потому что я видел, как несколько людей публикуют такие конфигурации PHP-FPM 7.2, как это:

<VirtualHost *:8080>
    ServerName x.com
    ServerAlias www.x.com
    ServerAdmin x@mail.com
    DocumentRoot /home/user/x.com/site
    ErrorLog /home/user/x.com/logs/error.log
    CustomLog /home/user/x.com/logs/access.log combined
    <Directory /home/user/x.com/site>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    <FilesMatch \.php$>
        # 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
        # Else we can just use a tcp socket:
        #SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Теперь это не работает для меня, даже если я удалю FPM физическое лицо .conf файлы. И я просто не понимаю, что за черта SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/" делает, или как одна простая строка может заменить весь больший блок кода, который все использовали для FastCGI эти последние годы.

Может кто-нибудь пролить свет на это?

Заранее спасибо.

Что ж, разница простая. Ваш подход к работе с обработчиками поддерживается mod_fastcgi тогда как второй требует mod_proxy_fcgi и mod_proxy в вашей конфигурации и запросы прокси к сокету FPM. Последний вариант предпочтительнее, поскольку не требует отдельной конфигурации и дополнительных затрат памяти. mod_fastcgi приносит с собой. В вашем случае, когда все, что вы используете mod_fastcgi функциональность просто FastCGIExternalServer имеет смысл привезти всю технику mod_fastcgi имеет внутри.

Вероятно, ваша проблема связана с тем, что ваша текущая конфигурация использует причудливое имя для сокета, то есть /var/run/php/php7.2-fpm.x.com.sock тогда как ваша попытка конфигурации использует стандартные /var/run/php/php7.2-fpm.sock этого не существует в вашей системе. Вы должны использовать имя сокета точно так, как оно показано в вашей конфигурации FPM (и вашей рабочей конфигурации) при попытке использовать mod_proxy_fcgi а также удалить |fcgi://localhost/ поскольку ваш FPM слушает только сокет UNIX.