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

apache 2.4 + php-fpm + mod_proxy_fcgi + псевдоним

У меня такой конфиг: Apache 2.4, php-fpm, mod_proxy_fgci. Проблема в том, что моя конфигурация не работает с директивой alias: я установил phpredmin, но директива 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>

# 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>

Обновить

Я создал дополнительный виртуальный хост, и у меня есть 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>

Apache читает файл конфигурации сверху вниз.

Если соответствующая команда найдена (например, ваш proxypass), она выполняется, а остальная часть файла отбрасывается.

Чтобы ваша команда 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>

Работал у меня в той же конфигурации, что и у вас.