Debian.pro/

Про Debian


Большой мануал: часть 19. Создаём конфиг для нашего сайта в apache2.

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian.

Предыдущая часть цикла — Подготавливаем apache2.

Следующая часть цикла — Создаём конфиг для нашего сайта в nginx.

Вот и подошло время (блеать, спустя 18(!) частей), когда мы начинаем «запускать» наш сайт.

Для начала немного экскурса в терминологию, чтобы не путаться дальше.
— У вебсерверов существует понятие «VirtualHost» (в nginx — server{}). Это конфигурация одного «сайта» со всеми его доменными именами/алиасами и прочим. По сути — один конфиг для сайта.
— DocumentRoot (он же — docroot/докрут) — каталог, который с точки зрения будет / для нашего сайта. Остальные пути будут браться относительно докрута (впрочем, php-код может лежать каталогом выше докрута, ему никто не запрещает).
— location — это конфигурация для отдельного паттерна урла (например, для отдельной «директории» на сайте). У каждого location могут быть свои настройки, свой докрут и прочее. Подробнее про это мы увидим в следующей статье про nginx.

Так же напоминаю, что в части 9 Мануала мы создавали правильные каталоги для нашего сайта. В нашем примере докрутом сайта будет /home/username/data/www/example.com

Ну поехали. Сайт у нас будет example.com, который будет открываться по двум доменам — example.com и www.example.com. Создаём конфиг для вхоста /etc/apache2/sites-available/example.com.conf
Рассмотрим тот бред, который мы будем писать в конфиг. Если у вас apache2.4+ (debian 8+), то сначала добавляем такое:

# разрешаем доступ к файлам в каталоге /home/username/data/www/example.com через апач
# внешним пользователям.
# Начиная с 2.4 апач запрещает (из коробки) обращаться по http к любым файлам на диске.
<Directory /home/username/data/www/example.com>
    Options Indexes FollowSymLinks
    Require all granted
    # так же включаем возможность использования htaccess-ов в указанном каталоге
    AllowOverride All
</Directory>

Следующий кусок актуален для любых апачей с 2.0 (собственно, это и есть конфиг вхоста нашего):

# апач слушает у нас 81й порт на локалхосте, чтобы nginx мог к нему обратиться
# а внешние пользователи не могли
<VirtualHost 127.0.0.1:81>
    # Это "основное" доменное имя, по которому сайт доступен
    ServerName example.com
    # Доменные имена-алиасы (по ним сайт тоже будет открываться, если настроим их в dns)
    ServerAlias www.example.com
    # Имя пользователя и группы, от которых mpm-itk будет запускать процессы для обработки запросов к этому вхосту
    AssignUserID www-data www-data
    # Как вариант (нужно для битрикса, например), мы можем запускать отдельный вхост от имени пользователя, которому сайт принадлежит
    # ради этой возможности у нас mpm-itk и вкорячен
    # можно указать имя нашего пользователя и группу secure, если вы не забыли её создать
    #AssignUserID username secure
    # Указываем докрут для нашего вхоста
    DocumentRoot /home/username/data/www/example.com
    # Указываем "почту админа". Она будет фигурировать на страницах ошибок как контактный email, если мы не заменим все страницы ошибок для этого вхоста на собственные.
    ServerAdmin webmaster@example.com
    # На всякий случай включаем обработку php-файлов модулем php
    AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
    AddType application/x-httpd-php-source .phps
    # включаем basedir.
    # этот параметр запрещает php-скриптам выходить за пределы указанных каталогов (в том числе - и запрещает читать файлы из других каталогов), если к скрипту "обратились" по http(s)
    php_admin_value open_basedir "/home/username/data/www:/home/username/data/mod-tmp:."
    # Указываем каталог для временного хранения upload-ов от пользователей
    # это, например, файлы, который закачиваются, но ещё не закачались до конца со стороны пользователей.
    php_admin_value upload_tmp_dir "/home/username/data/mod-tmp"
    # Каталог для хранения файлов сессий.
    # учтите, что если на ваш сайт ходит много пользователей (а тем более - ботов) - то этот каталог нужно иногда чистить от старых файлов, иначе их там будут миллионы
    php_admin_value session.save_path "/home/username/data/mod-tmp"
    # Указываем каталог для временных файлов.
    # большинство фреймворков корректно умеют хранить временные файлы по этой переменной.
    php_admin_value sys_temp_dir "/home/username/data/mod-tmp"
    # запрещаем отправку с этого вхоста через локальный sendmail (если почту отправлять не нужно, или она отправляется через внешний smtp - весьма разумно так и оставить).
    php_admin_value sendmail_path "/bin/false"
</VirtualHost>

Если вы уверены, что локальный почтарь (по моему мануалу — exim или ssmtp) вы настроили, то пасхалку про то, как включить отправку, ищите в этой статьей. Правда, лучше всю статью просмотрите — там много полезного, даже если exim у вас уже настроен и отправляет письма.

Теперь тот же конфиг, но без моих укуренных комментариев:

# добавьте вначале только если у вас apache2.4+ (debian 8+)
<Directory /home/username/data/www/example.com>
    Options Indexes FollowSymLinks
    Require all granted
    AllowOverride All
</Directory>

# для всех апачей2+
<VirtualHost 127.0.0.1:81>
    ServerName example.com
    ServerAlias www.example.com
    AssignUserID www-data www-data
    DocumentRoot /home/username/data/www/example.com
    ServerAdmin webmaster@example.com
    AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
    AddType application/x-httpd-php-source .phps
    php_admin_value open_basedir "/home/username/data/www:/home/username/data/mod-tmp:."
    php_admin_value upload_tmp_dir "/home/username/data/mod-tmp"
    php_admin_value session.save_path "/home/username/data/mod-tmp"
    php_admin_value sys_temp_dir "/home/username/data/mod-tmp"
    php_admin_value sendmail_path "/bin/false"
</VirtualHost>

Теперь осталось включить наш вхост:

root@server:~# ln -s /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-enabled/example.com.conf

И ребутнуть индейца:

root@server:~# apachectl restart
04.07.2016 byinkvizitor68sl|big-manual

Комментарии (4):

  1. Андрей :

    root@vm113579:/# service apache2 restart
    Syntax error on line 4 of /etc/apache2/sites-enabled/freak-house.ru.conf:
    Invalid command ‘AssignUserID’, perhaps misspelled or defined by a module not included in the server configuration
    Action ‘configtest’ failed.
    The Apache error log may have more information.
    failed!

  2. Ну бл*, придти, прочитать одну статью из 20 и надеяться, что «всё и так заработает»? Гениально!

    https://debian.pro/2174
    https://debian.pro/2258
    Пропустили.

  3. drcrazy :

    А как правильнее чистить? А то показания расходятся в этих ваших интернетах. Кто-то советует вернуть gc_probability обратно в 1, кто-то свой скрипт для крона.

  4. Если речь про <1RPS - то вообще без разницы.
    Если нагрузка какая-никакая есть - то лучше делать кроном в наименее нагруженное время. Если gc проснется в пике нагрузки - время ответа взлетит в небеса.

Написать комментарий