До сих пор я использовал сервер 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>
Теперь это не работает для меня, даже если я удалю отдельные файлы .conf FPM . И я просто не понимаю, что делает строка 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.