apache 2.4 + php-fpm + mod_proxy_fcgi + псевдоним
У меня есть следующий конфиг: Apache 2.4, php-fpm, mod_proxy_fgci. Проблема в том, что мой конфиг не работает с директивой псевдонима: я установил phpredmin, но директива псевдонима не работает с ProxyPass. Кто-то может подтолкнуть меня в правильном направлении?
Это конфиг:
<VirtualHost *:80>
ServerName default
# Directory
DocumentRoot /var/www/default/wwwroot
<Directory /var/www/default/wwwroot>
Options +FollowSymLinks +ExecCGI +Includes
AllowOverride All
Require all granted
</Directory>
# PHP-FPM Server
<LocationMatch "^/(.*\.php(/.*)?)$">
ProxyPass fcgi://127.0.0.1:9000/var/www/default/wwwroot/$1
</LocationMatch>
# Directory indexes
<IfModule dir_module>
DirectoryIndex index.htm index.html index.shtml index.php index.phtml
</IfModule>
Alias /phpredmin /var/www/default/wwwroot/phpredmin/public
<Directory "/var/www/default/wwwroot/phpredmin/">
AllowOverride All
require ip 127.0.0.1
</Directory>
</VirtualHost>
Обновить
Я создал дополнительный vhost, и у меня есть phpredmin, работающий с этой конфигурацией:
<VirtualHost *:80>
ServerName phpredmin.example.com
DocumentRoot /var/www/default/wwwroot/phpredmin
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
LogLevel alert
DirectoryIndex index.php
ServerSignature Off
RewriteEngine on
<Directory /var/www/default/wwwroot/phpredmin>
Options -Indexes
require ip 192.168.2.0/24
require ip 192.168.10.0/24
</Directory>
Alias /phpredmin /var/www/default/wwwroot/phpredmin/public
<Directory /var/www/default/wwwroot/phpredmin/public>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . fcgi://127.0.0.1:9000/var/www/default/wwwroot/phpredmin/public/index.php [P,L]
RewriteRule ^/?(.*\.php)$ fcgi://127.0.0.1:9000/var/www/default/wwwroot/phpredmin/public/$1 [P,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^/?(.*)$ fcgi://127.0.0.1:9000/var/www/default/wwwroot/phpredmin/public/$1 [P,L]
DirectoryIndex disabled
ProxyErrorOverride on
</Directory>
2 ответа
Apache читает конфигурационный файл сверху вниз.
Если найдена подходящая команда (например, ваш прокси-сервер), она выполняется, а остальная часть файла отбрасывается.
Для того чтобы ваша команда Alias выполнялась до ProxyPass, вам нужно поместить ее поверх файла.
<VirtualHost *:80>
ServerName default
# Directory
DocumentRoot /var/www/default/wwwroot
<Directory /var/www/default/wwwroot>
Options +FollowSymLinks +ExecCGI +Includes
AllowOverride All
Require all granted
</Directory>
Alias /phpredmin /var/www/default/wwwroot/phpredmin/public
<Directory "/var/www/default/wwwroot/phpredmin/">
AllowOverride All
require ip 127.0.0.1
</Directory>
# PHP-FPM Server
<LocationMatch "^/(.*\.php(/.*)?)$">
ProxyPass fcgi://127.0.0.1:9000/var/www/default/wwwroot/$1
</LocationMatch>
# Directory indexes
<IfModule dir_module>
DirectoryIndex index.htm index.html index.shtml index.php index.phtml
</IfModule>
</VirtualHost>
Вот краткий ответ. Поместите следующие 3 строки в ваш файл httpd.conf, и все готово:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
Работал для меня в той же конфигурации, что и ваш.