До сих пор я использовал сервер 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.