Apache 2.4 + PHP-FPM + Dynamic ProxyPassMatch

Ожидайте результат:

Если я перейду на http: //foo.local/index.php , будет выполнен файл /var/www/html/foo/index.php .

Будет похоже, если я перейдите по адресу http://bar.local/index.php, /var/www/html/bar/index.php будет выполнен.

Вот мои конфигурации:

<VirtualHost *:80>
    ServerAlias *.localhost
    VirtualDocumentRoot /var/www/html/%1/

    <IfModule proxy_module>
        #ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://localhost:9000/var/www/html/$1 (this  line works in normal virtualhost)
        ProxyRemoteMatch ^([^.]+).*/(.*\.php(/.*)?)$ fcgi://localhost:9000/var/www/html/$1/$2
    </IfModule>
</VirtualHost>

На данный момент это хорошо работает со статическими файлами, такими как .html. Но он будет печатать файлы .php вместо их выполнения.

Пожалуйста, посоветуйте, спасибо.

PS: Если бы я использовал mod_php вместо php-fpm, было бы проще. Но в целях обучения я действительно хочу пройти трудный путь.

1
задан 16 February 2019 в 06:57
1 ответ

Вот мое собственное решение (используйте RewriteRule с флагом [P] вместо ProxyPass):

<VirtualHost *:80>
    ServerAlias *.localhost
    VirtualDocumentRoot /var/www/html/%1/

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^([^.]+) [NC]
    RewriteRule ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/%1/$1 [P]
    #<IfModule proxy_module>
        #ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1
        #ProxyRemoteMatch ^([^.]+).*/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1/$2
    #</IfModule>
</VirtualHost>
1
ответ дан 3 December 2019 в 23:07

Теги

Похожие вопросы