Arch linux установка Apache + PHP

Установка:

# pacman -S apache php php-apache

Далее нужно включить юнит апача и можно запустить его:

# systemctl enable httpd
# systemctl start httpd

У пыха в /etc/php/php.ini в директиве open_basedir прописать путь в корень сервера! И если нужно поправить остальные настройки, например выставить таймзону:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Moscow

Далее необходимо поправить файл: /etc/httpd/conf/httpd.conf Комментируем эту строку

#LoadModule mpm_event_module modules/mod_mpm_event.so

И раскомментируем эту:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Раскомментируем эту для ссылок ЧПУ:

LoadModule rewrite_module modules/mod_rewrite.so

Далее раскомментируем эту что бы помещать виртуальные хосты в отдельный файл:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Подключим где-нибудь в конце после LoadModule rewrite_module modules/mod_rewrite.so модуль PHP:

LoadModule php7_module modules/libphp7.so

И пропишем путь к конфигу модуля PHP где-нибудь после Include conf/extra/httpd-default.conf

# PHP
Include conf/extra/php7_module.conf

MPM_ITK

На этом впринципе все но можно добавить модуль mpm_itk для разруливания прав доступа:

Тащим из AUR или напрямую с репы пакет модуля

git clone https://aur.archlinux.org/mod_itk.git

Просматриваем PKGBUILD на предмет криминала:

vim PKGBUILD

Если все норм - собираем модуль:

cd mod_itk
makepkg -sri

Затем в конфиге апача /etc/httpd/conf/httpd.conf где нибудь после LoadModule php7_module modules/libphp7.so подключаем модуль:

LoadModule mpm_itk_module modules/mpm_itk.so

Далее создаем виртуальный хост например test.loc в файле: /etc/httpd/conf/extra/httpd-vhosts.conf В котором в директиве AssignUserID мы можем указать юзера и группу:

<VirtualHost *:80>
    ServerName test.loc
    ServerAlias www.test.loc
    ServerAdmin webmaster@test.loc
    DocumentRoot "/home/user/web/test.loc/www"

    # MPM
    AssignUserID user users

    <Directory "/home/user/web/test.loc/www">
        Require all granted
        AllowOverride All
        Options -Indexes +FollowSymlinks
    </Directory>

    ErrorLog "/home/user/web/test.loc/error_log"
    CustomLog "/home/user/web/test.loc/access_log" common
</VirtualHost>

Про pmp_itk подробнее можно почитать тут: The Apache 2 ITK MPM

После не забыть создать директорию виртуального хоста /home/user/web/test.loc/www и описать хост в файле /etc/hosts

127.0.0.1 test.loc www.test.loc

После этого

# systemctl reload httpd

Все можно юзать. более подробно здесь: ArchWiki Apache HTTP Server

Поддержка HTTPS

Для поддержки HTTPS хостов в конфиге апача /etc/httpd/conf/httpd.conf найдем строку Listen 80 и добавим после неё

...
Listen 80
Listen 443

Там же, в конфиге раскомментируем строку для загрузки модуля SSL:

LoadModule ssl_module modules/mod_ssl.so

Проверить какие модули подгрузились можно при помощи команды:

# apachectl -t -D DUMP_MODULES

Проверить какие конфиги виртуальных хостов подгрузились можно при помощи команды:

# apachectl -t -D DUMP_VHOSTS

Проверить что конфиги виртуальных хостов составлены без синтаксических ошибок:

# apachectl -t

Далее в файле: /etc/httpd/conf/extra/httpd-vhosts.conf создадим 2 хоста. Для 80 порта, который будет просто редиректить на HTTPS:

<VirtualHost *:80>
    ServerName mydomain.loc
    ServerAlias www.mydomain.loc
    ServerAdmin webmaster@mydomain.loc
    DocumentRoot "/home/user/web/mydomain.loc/www"

    AssignUserID user users

    ErrorLog "/home/user/web/mydomain.loc/error.log"
    CustomLog "/home/user/web/mydomain.loc/access.log" common

    Redirect / https://mydomain.loc/
</VirtualHost>

Второй собственно для HTTPS:

<VirtualHost *:443>
    ServerName mydomain.loc
    ServerAlias www.mydomain.loc
    ServerAdmin webmaster@mydomain.loc
    DocumentRoot "/home/user/web/mydomain.loc/www"

    AssignUserID user users

    SSLEngine On
    SSLCertificateFile "/etc/httpd/conf/mydomain.crt"
    SSLCertificateKeyFile "/etc/httpd/conf/mydomain.key"

    <Directory "/home/user/web/mydomain.loc/www">
        Require all granted
        AllowOverride All
        Options -Indexes +FollowSymlinks
    </Directory>

    ErrorLog "/home/user/web/mydomain.loc/error.log"
    CustomLog "/home/user/web/mydomain.loc/access.log" common
</VirtualHost>

Файлы сертификатов генятся так:

# cd /etc/httpd/conf
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mydomain.key -out mydomain.crt

Это "заклинание" будет задавать глупые вопросы на которые надо дать правильные ответы, особенно когда попросит указать Common Name - нужно указать полное имя хоста для которого генерится сертификат.