Эта статья — часть Большого Мануала по настройке 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+), то сначала добавляем такое:
# внешним пользователям.
# Начиная с 2.4 апач запрещает (из коробки) обращаться по http к любым файлам на диске.
<Directory /home/username/data/www/example.com>
Options Indexes FollowSymLinks
Require all granted
# так же включаем возможность использования htaccess-ов в указанном каталоге
AllowOverride All
</Directory>
Следующий кусок актуален для любых апачей с 2.0 (собственно, это и есть конфиг вхоста нашего):
# а внешние пользователи не могли
<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 у вас уже настроен и отправляет письма.
Теперь тот же конфиг, но без моих укуренных комментариев:
<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@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!
Ну бл*, придти, прочитать одну статью из 20 и надеяться, что «всё и так заработает»? Гениально!
https://debian.pro/2174
https://debian.pro/2258
Пропустили.
А как правильнее чистить? А то показания расходятся в этих ваших интернетах. Кто-то советует вернуть gc_probability обратно в 1, кто-то свой скрипт для крона.
Если речь про <1RPS - то вообще без разницы.
Если нагрузка какая-никакая есть - то лучше делать кроном в наименее нагруженное время. Если gc проснется в пике нагрузки - время ответа взлетит в небеса.