Apache 2.4, ошибка директивы .htaccess и php

Я обновился до Centos 8 и обнаружил, что мне приходится справляться с изменениями в Apache 2.4. Я начал получать его работу, но у меня есть непонятная ошибка с простой настройкой в ​​.htaccess:

#   .htaccess
#   PHP Time Zone
    php_value date.timezone Australia/Melbourne

Я получаю ужасную ошибку:

Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос.

Нет смысла связываться с администратором сервера, потому что это я.

В файле error_log есть это:

Недопустимая команда 'php_value', возможно, написана с ошибкой или определена модулем, не включенным в конфигурацию сервера.

Это всегда работало в прошлом на Apache 2.4, а также работает, когда я использую Apache 2.4 на XAMPP. Так что очевидно, что в какой-то другой конфигурации, возможно, в httpd.conf есть что-то, что вызывает сбой.

Какой настройки мне не хватает, или я должен изменить?

Обновить

Как ответил @Chi.C.J.RajeevaLochana ниже, решение заключается в использовании правильного MPM. В моем случае в файле 00-mpm-conf:

  • Закомментировать

    LoadModule mpm_event_module modules/mod_mpm_event.so

  • Раскомментировать

    LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Для получения дополнительной информации см.:


person Manngo    schedule 29.04.2020    source источник
comment
См. файл error_log. И просто вставьте некоторые из последних выходных данных здесь.   -  person Example person    schedule 29.04.2020
comment
Почему бы и нет? Он просто есть по умолчанию, и проблема не в самой настройке часового пояса.   -  person Manngo    schedule 29.04.2020
comment
В любом случае вы можете просто установить его в файле php.ini. См. файл error_log. И просто вставьте некоторые из последних выходных данных здесь.   -  person Example person    schedule 29.04.2020
comment
Вы используете php в качестве модуля apache? Если вы используете что-то вроде PHP-FPM, вам нужно использовать файлы php.ini.   -  person Enrico Dias    schedule 29.04.2020
comment
@EnricoDias Вы правы. Я собирался сказать, что php.net/manual/en/configuration.changes. php   -  person Example person    schedule 29.04.2020
comment
php_value не работает. Потому что в вашем случае PHP не является модулем apache.   -  person Example person    schedule 29.04.2020
comment
@EnricoDias Я думал, что он работает как модуль Apache. Конечно, он читает файл .htaccess, потому что, когда я закомментирую директиву, проблема исчезнет.   -  person Manngo    schedule 29.04.2020
comment
Какой МПМ вы используете?   -  person Example person    schedule 29.04.2020
comment
про МПМ не знаю. Что это?   -  person Manngo    schedule 29.04.2020
comment
Вы знаете, как mod_mpm_worker, mod_mpm_prefork, mod_mpm_event?   -  person Example person    schedule 29.04.2020
comment
https://httpd.apache.org/docs/2.4/mpm.html   -  person Example person    schedule 29.04.2020
comment
@Chi.C.J.RajeevaLochana Это строка из 00-mpm-conf: LoadModule mpm_event_module modules/mod_mpm_event.so   -  person Manngo    schedule 29.04.2020
comment
Когда вы используете либо mod_mpm_event, либо mpm_mpm_worker вместо mod_mpm_prefork, вы не сможете использовать модуль PHP.   -  person Example person    schedule 29.04.2020
comment
@Chi.CJRajeevaLochana Кажется, это исправлено. Можете ли вы поместить комментарий о mod_mpm_prefork в ответ, чтобы я мог его принять?   -  person Manngo    schedule 29.04.2020


Ответы (2)


Когда вы используете либо mod_mpm_event, либо mod_mpm_worker вместо mod_mpm_prefork, вы не сможете использовать модуль PHP. Это связано с тем, что mod_mpm_event и mod_mpm_worker являются многопоточными модулями. И модуль PHP не является потокобезопасным.

Если вы не знаете, как это сделать, ознакомьтесь с руководством Soufiane ELH, которое должно быть выше/ниже этого ответа.

person Example person    schedule 29.04.2020
comment
Когда я собираю httpd-2.4.46, у меня нет ни mod_mpm_event.so, ни mod_mpm_prefork.so в папке модулей. Означает ли это, что сборка пошла не так? Предполагается построить из prefork.c в папке сервера правильно? - person Brian Wiley; 15.12.2020
comment
@Brian Wiley, какая у тебя была команда configure? - person Example person; 15.12.2020
comment
stackoverflow.com/questions/65219046/, см. этот ответ, он может вам как-то помочь - person Example person; 15.12.2020
comment
Поэтому я попробовал этот первый ./configure --prefix=/usr/local --with-module=mpm-prefork --with-mpm=prefork, который должен был работать на основе документации здесь и configure -h, но затем у него возникла проблема с созданием «mpm-prefork» (предполагалось удалить mod_ и заменить символы подчеркивания на -). Но это работает, если вы просто удалите --with-module=mpm-prefork. Так что это должно работать для всех остальных ./configure --with-mpm=prefork - person Brian Wiley; 15.12.2020
comment
Я уверен, что --with-module=mpm-prefork недействителен... Хорошая работа, вы исправили проблему. - person Example person; 15.12.2020
comment
Включите все моды, чтобы действительно все могло работать, вероятно. Я тоже видел этот вариант в справке - person Brian Wiley; 15.12.2020
comment
Я обычно всегда использую sudo ./configure --prefix=/usr/local/apache2 --enable-mods-shared="reallyall" --enable-mpms-shared="all", который я упомянул в ссылке, которую отправил два часа назад. Это дает мне возможность редактировать и отключать любые модули в любое время. - person Example person; 15.12.2020

модуль событий включен по умолчанию в centos 8.. чтобы проверить, какой модуль у вас есть:

#sudo httpd -V | grep -i mpm

если у вас включен модуль enent, отключите его и включите модуль prefork:

  • Отредактируйте файл /etc/httpd/conf.modules.d/00-mpm.conf.
  • Закомментируйте строку для модуля событий
  • раскомментируйте строку для модуля prefork
  • перезапустить апач

проверьте еще раз модуль, включенный apache, и вы найдете prefork:

# sudo httpd -V | grep -i mpm
Server MPM:     prefork
person Soufiane ELH    schedule 15.12.2020
comment
Хорошая работа ???? по предоставлению учебника. - person Example person; 16.12.2020
comment
Обратите внимание, что это тот же учебник для рабочего модуля, кстати. - person Example person; 16.12.2020