UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

550 lines (347 loc) 33.8 kB
Ссылки по теме * [PHP](/index.php/PHP "PHP") * [MySQL (Русский)](/index.php/MySQL_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "MySQL (Русский)") * [PhpMyAdmin (Русский)](/index.php/PhpMyAdmin_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "PhpMyAdmin (Русский)") * [Adminer](/index.php/Adminer "Adminer") * [Xampp (Русский)](/index.php/Xampp_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Xampp (Русский)") * [mod_perl](/index.php/Mod_perl "Mod perl") [Apache HTTP Server](https://en.wikipedia.org/wiki/ru:Apache "wikipedia:ru:Apache"), или сокращенно Apache — популярный веб-сервер, разработанный Apache Software Foundation. Apache часто используется вместе с языком сценариев PHP и СУБД MySQL. Такую комбинацию обычно называют [LAMP](https://en.wikipedia.org/wiki/ru:LAMP "wikipedia:ru:LAMP") (**L**inux, **A**pache, **M**ySQL, **P**HP). Эта статья объясняет, как настроить Apache и как интегрировать с ним [PHP](/index.php/PHP "PHP") и [MySQL](/index.php/MySQL "MySQL"). Если вам нужно быстро создать окружение для разработки и тестирования, то можете просто установить [Xampp](/index.php/Xampp_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Xampp (Русский)"). ## Contents * [1 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0) * [2 Настройка](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0) * [2.1 Дополнительные опции](#.D0.94.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.BE.D0.BF.D1.86.D0.B8.D0.B8) * [2.2 Пользовательские каталоги](#.D0.9F.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B5_.D0.BA.D0.B0.D1.82.D0.B0.D0.BB.D0.BE.D0.B3.D0.B8) * [2.3 TLS/SSL](#TLS.2FSSL) * [2.4 Виртуальные хосты](#.D0.92.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D1.85.D0.BE.D1.81.D1.82.D1.8B) * [2.4.1 Управление большим количеством виртуальных хостов](#.D0.A3.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B1.D0.BE.D0.BB.D1.8C.D1.88.D0.B8.D0.BC_.D0.BA.D0.BE.D0.BB.D0.B8.D1.87.D0.B5.D1.81.D1.82.D0.B2.D0.BE.D0.BC_.D0.B2.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D1.85_.D1.85.D0.BE.D1.81.D1.82.D0.BE.D0.B2) * [3 Расширения](#.D0.A0.D0.B0.D1.81.D1.88.D0.B8.D1.80.D0.B5.D0.BD.D0.B8.D1.8F) * [3.1 PHP](#PHP) * [3.1.1 Дополнительные параметры](#.D0.94.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B) * [3.1.2 Использование php5 c php-fpm и mod_proxy_fcgi](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_php5_c_php-fpm_.D0.B8_mod_proxy_fcgi) * [3.1.3 Использование php5 c apache2-mpm-worker и mod_fcgid](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_php5_c_apache2-mpm-worker_.D0.B8_mod_fcgid) * [3.1.4 MySQL/MariaDB](#MySQL.2FMariaDB) * [4 Решение проблем](#.D0.A0.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC) * [4.1 Просмотр журнала и текущего состояния Apache](#.D0.9F.D1.80.D0.BE.D1.81.D0.BC.D0.BE.D1.82.D1.80_.D0.B6.D1.83.D1.80.D0.BD.D0.B0.D0.BB.D0.B0_.D0.B8_.D1.82.D0.B5.D0.BA.D1.83.D1.89.D0.B5.D0.B3.D0.BE_.D1.81.D0.BE.D1.81.D1.82.D0.BE.D1.8F.D0.BD.D0.B8.D1.8F_Apache) * [4.2 PID file /run/httpd/httpd.pid not readable (yet?) after start](#PID_file_.2Frun.2Fhttpd.2Fhttpd.pid_not_readable_.28yet.3F.29_after_start) * [4.3 Обновление с Apache 2.2 до 2.4](#.D0.9E.D0.B1.D0.BD.D0.BE.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81_Apache_2.2_.D0.B4.D0.BE_2.4) * [4.4 Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe](#Apache_is_running_a_threaded_MPM.2C_but_your_PHP_Module_is_not_compiled_to_be_threadsafe) ## Установка [Установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") пакет [apache](https://www.archlinux.org/packages/?name=apache), доступный в [официальных репозиториях](/index.php/Official_repositories_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Official repositories (Русский)"). ## Настройка Файлы настроек Apache находятся в `/etc/httpd/conf`. Основным файлом является `/etc/httpd/conf/httpd.conf`, который может по ссылкам включать в себя дополнительные файлы с настройками. В большинстве случаев будет достаточно стандартных настроек из этого файла. По умолчанию корневым каталогом веб-сервера является `/srv/http`. Для старта Apache [запустите](/index.php/%D0%97%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Запустите") службу `httpd.service`. После этих действий Apache должен запуститься. Проверьте работает ли он, набрав в адресной строке браузера `[http://localhost/](http://localhost/)`. Веб-сервер должен отправить вам простую тестовую страничку. При необходимости дальнейшей настройки сервера смотрите следующие разделы. ### Дополнительные опции Следующие опции (*директивы*) в `/etc/httpd/conf/httpd.conf` могут быть вам интересны: ``` User http ``` По соображениям безопасности при запуске сервера Apache от имени суперпользователя (напрямую или через скрипт инициализации) происходит смена идентификатора пользователя (UID), от имени которого выполняется процесс сервера. По умолчанию используется пользователь `http`, который не имеет привилегированных полномочий в системе. ``` Listen 80 ``` Это порт, через который Apache принимает входящие соединения. Если сервер имеет выход в интернет через маршрутизатор, необходимо будет настроить перенаправление этого порта. Если вы используете Apache для разработки и тестирования, вы можете разрешить только локальный доступ к нему. Для этого укажите `Listen 127.0.0.1:80`. ``` ServerAdmin you@example.com ``` Адрес электронной почты администратора, который будет выводиться, например, на странице ошибки Apache. ``` DocumentRoot "/srv/http" ``` Это корневая директория Apache, в которой можно разместить ваши веб-страницы. Измените ее, если нужно, но не забудьте также поменять путь в директиве `<Directory "/srv/http">` на новое расположение `DocumentRoot`, иначе вы, скорее всего, получите сообщение об ошибке **403 Error** (недостаточно полномочий) при попытке получить доступ к новому корневому каталогу Apache. Также не забудьте изменить строку `Require all denied` на `Require all granted`, иначе снова получите ошибку **403 Error**. Помните, что директория DocumentRoot и ее родительские папки должны иметь разрешения на запуск для всех (можно установить командой `chmod o+x /path/to/DocumentRoot>`), в противном случае вы получите ошибку **403 Error**. ``` AllowOverride None ``` Запрещает переопределение настроек. Если в секции `<Directory>` указана эта директива, Apache будет полностью игнорировать настройки в файле `.htaccess`. Обратите внимание, что теперь такая настройка для Apache 2.4 является настройкой по умолчанию, поэтому если вы планируете использовать `.htaccess`, вам необходимо дать соответствующие разрешения. Если вы собираетесь включить модуль `mod_rewrite` или использовать настройки в `.htaccess`, вы можете определить какие из директив, объявленных в этих файлах, могут перезаписывать конфигурацию сервера. Для получения дополнительной информации обратитесь к [документации Apache](http://httpd.apache.org/docs/current/mod/core.html#allowoverride). **Совет:** Вы можете проверить корректность настроек Apache без запуска сервера командой `apachectl configtest`. Дополнительные настройки можно найти в `/etc/httpd/conf/extra/httpd-default.conf`. Чтобы полностью отключить вывод версии Apache в генерируемых сервером страницах, добавьте: ``` ServerSignature Off ``` Чтобы подавить вывод такой информации, как версии Apache и PHP, добавьте: ``` ServerTokens Prod ``` ### Пользовательские каталоги По умолчанию доступ к каталогам пользователей возможен по адресу `http://localhost/~''user''/`, который показывает содержимое каталога `~/public_html` (его имя и расположение задается в файле `/etc/httpd/conf/extra/httpd-userdir.conf`). Если вы не хотите, чтобы пользовательские каталоги были доступны через web, закомментируйте следующую строку в `/etc/httpd/conf/httpd.conf`: ``` Include conf/extra/httpd-userdir.conf ``` Убедитесь, что права доступа к вашему домашнему каталогу и `~/public_html` позволяют получать доступ к файлам в них **всем** пользователям: ``` $ chmod o+x ~ $ chmod o+x ~/public_html $ chmod -R o+r ~/public_html ``` Однако с точки зрения безопасности вышеприведенное решение слишком фривольно. Правильнее поступить по-другому. Сначала добавьте пользователя **http** в группу, которой принадлежит ваша домашняя папка. Например, если ваша домашняя папка и все ее подкаталоги принадлежат группе **piter**, можно проделать следующее: ``` # usermod -aG piter http ``` или ``` # gpasswd -a http piter ``` После этого назначьте права на *чтение* и *исполнение* для каталогов `~/`, `~/public_html` и, рекурсивно, на остальные подкаталоги для `~/public_html` для членов группы (в нашем примере для членов группы **piter**). Опираясь на нижеприведенный шаблон, осуществите эти мероприятия: ``` $ chmod g+xr-w /home/*yourusername* $ chmod -R g+xr-w /home/*yourusername*/public_html ``` **Примечание:** Таким образом, только пользователь **http** и все потенциальные пользователи группы **piter** будут иметь разделяемый доступ к вашему домашнему каталогу. [Перезапустите](/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Перезапустите") службу `httpd.service`, чтобы изменения вступили в силу. Смотрите также [Umask#Set the mask value](/index.php/Umask#Set_the_mask_value "Umask"). ### TLS/SSL Для использования TLS/SSL необходимо установить [openssl](https://www.archlinux.org/packages/?name=openssl). Создайте закрытый ключ и запрос на получение сертификата (CSR). Также вы можете [самозаверить](https://en.wikipedia.org/wiki/ru:%D0%A1%D0%B0%D0%BC%D0%BE%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82 "wikipedia:ru:Самозаверенный сертификат") CSR (который создаст сертификат): **Примечание:** Вы можете настроить длину ключа в битах (`rsa_keygen_bits:2048`). Также вы можете убрать опцию `-sha256` для использования SHA-1 вместо SHA-2 или изменить время его действия в днях (`-days 365`). ``` # cd /etc/httpd/conf # openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key # chmod 600 server.key # openssl req -new -sha256 -key server.key -out server.csr # openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt ``` Теперь раскомментируйте следующие строки в `/etc/httpd/conf/httpd.conf`: ``` LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so Include conf/extra/httpd-ssl.conf ``` [Перезапустите](/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Перезапустите") службу `httpd.service`, чтобы изменения вступили в силу. ### Виртуальные хосты **Примечание:** Вам нужно будет добавить отдельную секцию `<VirtualHost dommainame:443>` для поддержки SSL на виртуальном хосте. Пример файла можно посмотреть ниже: [#Управление большим количеством виртуальных хостов](#.D0.A3.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B1.D0.BE.D0.BB.D1.8C.D1.88.D0.B8.D0.BC_.D0.BA.D0.BE.D0.BB.D0.B8.D1.87.D0.B5.D1.81.D1.82.D0.B2.D0.BE.D0.BC_.D0.B2.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D1.85_.D1.85.D0.BE.D1.81.D1.82.D0.BE.D0.B2). Если вы хотите, чтобы Apache обслуживал не один, а несколько хостов, раскомментируйте следующую строку в файле `/etc/httpd/conf/httpd.conf`: ``` Include conf/extra/httpd-vhosts.conf ``` Укажите свои виртуальные хосты в `/etc/httpd/conf/extra/httpd-vhosts.conf`. Файл уже содержит пример полностью рабочих настроек, что поможет вам быстро выполнить настройки под ваши нужды. Для проверки виртуальных хостов на локальной машине добавьте их виртуальные имена в ваш файл `/etc/hosts`: ``` 127.0.0.1 domainname1.dom 127.0.0.1 domainname2.dom ``` [Перезапустите](/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Перезапустите") `httpd.service`, чтобы изменения вступили в силу. #### Управление большим количеством виртуальных хостов Если Apache используется для обслуживания очень большого количества виртуальных хостов, вам может быть полезна возможность их легко включать и отключать. Для этого рекомендуется создавать собственный файл настроек на каждый хост и хранить все эти файлы в одном каталоге, например `/etc/httpd/conf/vhosts`. Сначала создайте каталог: ``` # mkdir /etc/httpd/conf/vhosts ``` Теперь создайте в нем отдельные конфигурационные файлы: ``` # nano /etc/httpd/conf/vhosts/domainname1.dom # nano /etc/httpd/conf/vhosts/domainname2.dom ... ``` И включите эти файлы в основной файл настроек `/etc/httpd/conf/httpd.conf`: ``` #Enabled Vhosts: Include conf/vhosts/domainname1.dom Include conf/vhosts/domainname2.dom ... ``` Теперь можно быстро включать/отключать требуемые виртуальные хосты, просто закомментировав или раскомментировав соответствующие директивы `Include` в основном файле настроек. Очень простой файл виртуального хоста будет выглядеть следующим образом: `/etc/httpd/conf/vhosts/domainname1.dom` ``` <VirtualHost domainname1.dom:80> ServerAdmin webmaster@domainname1.dom DocumentRoot "/home/user/http/domainname1.dom" ServerName domainname1.dom ServerAlias domainname1.dom ErrorLog "/var/log/httpd/domainname1.dom-error_log" CustomLog "/var/log/httpd/domainname1.dom-access_log" common <Directory "/home/user/http/domainname1.dom"> Require all granted </Directory> </VirtualHost> <VirtualHost domainname1.dom:443> ServerAdmin webmaster@domainname1.dom DocumentRoot "/home/user/http/domainname1.dom" ServerName domainname1.dom:443 ServerAlias domainname1.dom:443 ErrorLog "/var/log/httpd/domainname1.dom-error_log" CustomLog "/var/log/httpd/domainname1.dom-access_log" common <Directory "/home/user/http/domainname1.dom"> Require all granted </Directory> SSLEngine on SSLCertificateFile "/etc/httpd/conf/server.crt" SSLCertificateKeyFile "/etc/httpd/conf/server.key" </VirtualHost> ``` ## Расширения ### PHP [Установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") [PHP](/index.php/PHP "PHP") с пакетами [php](https://www.archlinux.org/packages/?name=php) и [php-apache](https://www.archlinux.org/packages/?name=php-apache), доступными в [официальных репозиториях](/index.php/Official_repositories_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Official repositories (Русский)"). **Примечание:** `libphp7.so` входящий в [php-apache](https://www.archlinux.org/packages/?name=php-apache), не работает с `mod_mpm_event` ([FS#39218](https://bugs.archlinux.org/task/39218)). Вместо него следует использовать `mod_mpm_prefork`. В противном случае, вы получите следующее сообщение об ошибке: ``` Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP. AH00013: Pre-configuration failed httpd.service: control process exited, code=exited status=1 ``` Для использования `mod_mpm_prefork`, откройте `/etc/httpd/conf/httpd.conf` и поменяйте строку `LoadModule mpm_event_module modules/mod_mpm_event.so` на `LoadModule mpm_prefork_module modules/mod_mpm_prefork.so` Также вы можете просто использовать `mod_proxy_fcgi` (смотрите [#Использование php7 c php-fpm и mod_proxy_fcgi](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_php7_c_php-fpm_.D0.B8_mod_proxy_fcgi)). Чтобы включить модуль PHP, добавьте следующие строки в `/etc/httpd/conf/httpd.conf`: * Поместите эту строку в любом месте после строки `LoadModule dir_module modules/mod_dir.so`: ``` LoadModule php7_module modules/libphp7.so ``` * Разместите эту строку в конце списка `Include`: ``` Include conf/extra/php7_module.conf ``` **Примечание:** Если вы не обнаружите библиотеку `libphp7.so` в каталоге (`/etc/httpd/modules`), то вероятнее всего, что вы не установили [php-apache](https://www.archlinux.org/packages/?name=php-apache). Если ваш корневой каталог `DocumentRoot` не `/srv/http`, добавьте его в список `open_basedir` в `/etc/php/php.ini`: ``` open_basedir=/srv/http/:/home/:/tmp/:/usr/share/pear/:*/путь/до/корневого/каталога* ``` [Перезапустите](/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Перезапустите") службу `httpd.service`, чтобы изменения вступили в силу. Чтобы убедиться в том, что PHP настроен корректно, создайте файл `test.php` в каталоге `DocumentRoot` (то есть в `/srv/http/` или `~/public_html`) и поместите в него следующий код: ``` <?php phpinfo(); ?> ``` По адресу http://localhost/test.php или http://localhost/''~пользователь''/test.php вы должны увидеть информационную страницу PHP. Если PHP-код не исполняется, а на странице браузера вы увидите содержимое `test.php`, проверьте добавили ли вы `Includes` в строку `Options` для вашего корневого каталога в `/etc/httpd/conf/httpd.conf`. Кроме того, убедитесь, что `TypesConfig conf/mime.types` раскомментирован в секции <IfModule mime_module>. Также можно попробовать добавить нижеследующую строку в секцию `<IfModule mime_module>` файла `httpd.conf`: ``` AddHandler application/x-httpd-php .php ``` Дополнительную информацию вы можете получить на странице [PHP](/index.php/PHP "PHP"). #### Дополнительные параметры Рекомендуется правильно настроить вашу временную зону ([список временных зон](http://www.php.net/manual/en/timezones.php)) в `/etc/php/php.ini` по примеру: `date.timezone = Europe/Moscow` По желанию включите режим показа ошибок при отладке PHP-кода, для этого измените значение опции `display_errors` на `On` в файле `/etc/php/php.ini`: ``` display_errors=On ``` Ежели вы хотите использовать модуль `libGD`, установите [php-gd](https://www.archlinux.org/packages/?name=php-gd) и раскомментируйте `extension=gd.so` в `/etc/php/php.ini`: **Примечание:** Пакет [php-gd](https://www.archlinux.org/packages/?name=php-gd) требует [libpng](https://www.archlinux.org/packages/?name=libpng), [libjpeg-turbo](https://www.archlinux.org/packages/?name=libjpeg-turbo) и [freetype2](https://www.archlinux.org/packages/?name=freetype2). ``` extension=gd.so ``` **Примечание:** Проверьте, какие расширения PHP вы раскомментируете. Подключайте только те расширения, которые необходимы и достаточны для работы. Для использования модуля `mcrypt` установите [php-mcrypt](https://www.archlinux.org/packages/?name=php-mcrypt) и раскомментируйте `extension=mcrypt.so` в `/etc/php/php.ini`: ``` extension=mcrypt.so ``` Не забудьте добавить индексные файлы `/etc/httpd/conf/extra/php7_module.conf`, если это необходимо: ``` DirectoryIndex index.php index.phtml index.html ``` Для дополнительной настройки, пожалуйста прочтите [PHP](/index.php/PHP "PHP"). #### Использование php5 c php-fpm и mod_proxy_fcgi **Примечание:** В отличие от широко распространенной установки с ProxyPass, конфигурация прокси с SetHandler использует директивы DirectoryIndex. Это обеспечивает лучшую совместимость с программным обеспечением, разработанным для libphp5, mod_fastcgi и mod_fcgid. Если вы хотите попробовать ProxyPass, используйте такую строку: `ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/srv/http/$1` * [Установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") [php-fpm](https://www.archlinux.org/packages/?name=php-fpm) * Задайте `listen` в `/etc/php/php-fpm.conf` следующим образом: ``` ;listen = 127.0.0.1:9000 listen = /run/php-fpm/php-fpm.sock listen.owner = http listen.group = http ``` * Добавьте следующие строки в `/etc/httpd/conf/httpd.conf`: ``` <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/" </FilesMatch> <IfModule dir_module> DirectoryIndex index.php index.html </IfModule> ``` * Если у вас добавлен модуль php, уберите его, так как он больше не нужен: ``` #LoadModule php5_module modules/libphp5.so ``` * [Перезапустите](/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Перезапустите") демон apache php-fpm: ``` # systemctl restart httpd.service php-fpm.service ``` #### Использование php5 c apache2-mpm-worker и mod_fcgid * Раскомментируйте следующую строку в `/etc/conf.d/apache`: ``` HTTPD=/usr/sbin/httpd.worker ``` * Раскомментируйте следующую строку в `/etc/httpd/conf/httpd.conf`: ``` Include conf/extra/httpd-mpm.conf ``` * [Установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") пакеты [mod_fcgid](https://www.archlinux.org/packages/?name=mod_fcgid) и [php-cgi](https://www.archlinux.org/packages/?name=php-cgi), доступные в [официальных репозиториях](/index.php/Official_repositories_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Official repositories (Русский)"). * Создайте файл `/etc/httpd/conf/extra/php5_fcgid.conf` со следующим содержимым: `/etc/httpd/conf/extra/php5_fcgid.conf` ``` # Required modules: fcgid_module <IfModule fcgid_module> AddHandler php-fcgid .php AddType application/x-httpd-php .php Action php-fcgid /fcgid-bin/php-fcgid-wrapper ScriptAlias /fcgid-bin/ /srv/http/fcgid-bin/ SocketPath /var/run/httpd/fcgidsock SharememPath /var/run/httpd/fcgid_shm # If you don't allow bigger requests many applications may fail (such as WordPress login) FcgidMaxRequestLen 536870912 PHP_Fix_Pathinfo_Enable 1 # Path to php.ini – defaults to /etc/phpX/cgi DefaultInitEnv PHPRC=/etc/php/ # Number of PHP childs that will be launched. Leave undefined to let PHP decide. #DefaultInitEnv PHP_FCGI_CHILDREN 3 # Maximum requests before a process is stopped and a new one is launched #DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000 <Location /fcgid-bin/> SetHandler fcgid-script Options +ExecCGI </Location> </IfModule> ``` * Создайте каталог и символическую ссылку в нем на *php-cgi*: ``` # mkdir /srv/http/fcgid-bin # ln -s /usr/bin/php-cgi /srv/http/fcgid-bin/php-fcgid-wrapper ``` * Отредактируйте `/etc/httpd/conf/httpd.conf`: ``` #LoadModule php5_module modules/libphp5.so LoadModule fcgid_module modules/mod_fcgid.so Include conf/extra/php5_fcgid.conf ``` и [перезапустите](/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Перезапустите") службу `httpd.service`. **Примечание:** Так же как и в Apache 2.4 вы можете использовать [mod_proxy_fcgi](http://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html) вместе с PHP-FPM. Пример конфигурации вы можете найти на странице [[1]](http://wiki.apache.org/httpd/PHP-FPM). #### MySQL/MariaDB Следуйте инструкциям на странице [PHP (Русский)#MySQL/MariaDB](/index.php/PHP_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#MySQL.2FMariaDB "PHP (Русский)"). После выполнения настройки, [перезапустите](/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Перезапустите") службу `mysqld`, чтобы изменения вступили в силу. ## Решение проблем ### Просмотр журнала и текущего состояния Apache Текущее состояние службы `httpd` вы можете вывести командой `systemctl status httpd`. Лог-файлы Apache вы найдете в каталоге `/var/log/httpd`. ### PID file /run/httpd/httpd.pid not readable (yet?) after start Если вы получаете такую ошибку, закомментируйте строку: ``` LoadModule unique_id_module modules/mod_unique_id.so ``` в файле настроек Apache. ### Обновление с Apache 2.2 до 2.4 Если вы используете `php-apache`, посмотрите инструкции к [Apache с PHP](#PHP) выше. Управление доступом было изменено. Приведите все директивы `Order`, `Allow`, `Deny` и `Satisfy` к новому синтаксису с `Require`. [mod_access_compat](http://httpd.apache.org/docs/2.4/mod/mod_access_compat.html) позволит использовать устаревший формат на время этапа перехода. Подробную информацию вы найдете на странице [Upgrading to 2.4 from 2.2](http://httpd.apache.org/docs/2.4/upgrading.html). ### Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe Если не удалось запустить `php5_module` при старте `httpd.service` и вы получаете следующее сообщение об ошибке: ``` Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP. ``` Это значит, что Apache работает c поточным MPM, но используется не потокобезопасная версия PHP. В этом случае, следует заменить `mpm_event_module` на `mpm_prefork_module`: `/etc/httpd/conf/httpd.conf` ``` # LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule mpm_prefork_module modules/mod_mpm_prefork.so ``` и перезапустить `httpd.service`. * [Официальный сайт веб-сервера Apache](http://www.apache.org/) * [Руководство по созданию самозаверенных сертификатов](http://www.akadia.com/services/ssh_test_certificate.html) * [Поиск и устранение неисправностей при настройке Apache](http://wiki.apache.org/httpd/CommonMisconfigurations) * [Официальный сайт MariaDB](https://mariadb.org/) * [Официальный сайт PHP](http://www.php.net/)