Директива SetHandler не работает в VirtualHost, но в основной конфигурации все в порядке

Настройка: CentOS 7, Apache 2.4.6, php-fpm 5.6 и 7.3 (через репозиторий).

Недавно я преобразовал свою настройку phpmod по умолчанию в php-fpm, и PHP 5.4.16 заработал нормально. Теперь я пытаюсь включить PHP 7.3 в качестве опции для каждого виртуального хоста. Я установил и запустил php73-php-fpm, а затем посмотрел на сторону Apache.

Мой /etc/httpd/conf.d/php.conf включает следующую директиву:

<FilesMatch \.php$>
#    SetHandler application/x-httpd-php
    SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

Это отлично работает для всех хостов. Затем я добавил эту директиву <FilesMatch> в один файл .conf виртуального хоста:

<VirtualHost *:80>
    ServerName www.sittingduck.co.nz
    ServerAlias sittingduck.co.nz
    DocumentRoot /var/www/sittingduck.co.nz/public_html
    ErrorLog /var/log/httpd/sittingduck.co.nz.error.log
    CustomLog /var/log/httpd/sittingduck.co.nz.requests.log combined
    <FilesMatch \.php$>
        SetHandler "proxy:fcgi://127.0.0.1:9073"
    </FilesMatch>
</VirtualHost>

Когда я перезапускаю сервер httpd, в указанном выше журнале ошибок появляется следующее.

[proxy:error] [pid 17061] (111)Connection refused: AH00957: FCGI: attempt to connect to 127.0.0.1:9073 (*) failed
[proxy_fcgi:error] [pid 17061] [client 54.36.148.97:33788] AH01079: failed to make connection to backend: 127.0.0.1

После проверки того, что оба сервера php-fpm действительно работают...

tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      16794/php-fpm: mast 
tcp        0      0 127.0.0.1:9073          0.0.0.0:*               LISTEN      17510/php-fpm: mast 

... Затем я попытался переключить основной php.conf на порт 9073. Когда я это делаю, все сайты работают, и я могу подтвердить (используя страницу phpinfo на сайте выше), что я работаю на PHP 7.3.

Что мне здесь не хватает? Конфигурации виртуального хоста определенно загружаются после php.conf, как следует из ошибки, и fpm определенно в рабочем состоянии, и порт явно доступен.

Я чувствую, что есть какое-то правило или предостережение относительно того, как я определяю директивы. Любая помощь будет оценена по достоинству.


person zkarj    schedule 07.01.2019    source источник
comment
Хм... не вижу ничего плохого. Единственное предостережение - это контекст SElinux в сокете, но он не будет работать в основном php.conf... :s Как описано в developers.redhat.com/blog/2017/10/25/php-configuration-tips   -  person Remi Collet    schedule 07.01.2019
comment
SElinux в этой конфигурации отсутствует. Тот факт, что он работает в основной конфигурации, но не на VHost, действительно вызывает недоумение. Наверняка все это часть одного и того же процесса.   -  person zkarj    schedule 07.01.2019
comment
Хотя теперь мне интересно, проблема в том, что в игре одновременно есть два разных порта? Когда я переключил основной php.conf на использование 9073, это был бы единственный работающий порт. Я попытаюсь изменить ситуацию, чтобы увидеть, не получится ли так.   -  person zkarj    schedule 07.01.2019
comment
Ну это не помогло. Я переключил оба на 9000 - ошибки нет, как я и ожидал. Я переключил основной на 9073, оставив конкретный VHost как 9000. Никаких ошибок, а также сайт работал на PHP 7.3, хотя должен был быть 5.4. Странный. Итак, я вернул его к конфигурации, как указано выше, и... никаких ошибок не было написано! Но он также не запускает сайт на PHP 7.3. Проклятая вещь даже не последовательна!!   -  person zkarj    schedule 07.01.2019


Ответы (1)


Проблема была в http и https. Мой конфигурационный файл определял *:80, но я бездумно просматривал https-версию тестовой страницы. Виртуальный хост *:443 находился в отдельном файле конфигурации, который был добавлен после установки инструментом certbot. Ручное редактирование этого дополнительного файла решило проблему.

Я все еще не совсем уверен, почему ошибки в журнале появляются в начале, а не позже, но, возможно, это было связано с тем, что определенные страницы запрашивались через http и / или https в разное время.

person zkarj    schedule 07.01.2019