Наконец-то после длительного перерыва я продолжаю серию статей про домашний сервер. Перечислю, что из задуманного уже сделано и некоторые планы на будущее:
Введение
Установка и настройка SSH
Установка и настройка Transmission-daemon
Установка Samba
FTP-сервер
Веб-сервер (эта статья)
Домашняя система видеонаблюдения
Бекапы
Про установку веб-сервера (Apache, php и MySQL) написано в статье Веб-сервер на Убунту за пять минут, поэтому не буду повторно затрагивать процесс установки. Сейчас пройдемся по настройкам апача и созданию виртуальных хостов. Будем считать, что апач, пхп и мускул уже установлены, если нет, самое время это сделать. Управление апачем осуществляется следующими командами:
apache2ctl start – запуск
apache2ctl stop – остановка
apache2ctl restart – перезапуск. Если демон не запущен, он запускается. Эта команда автоматически проверяет файлы конфигурации, как в configtest перед началом перезагрузки.
apache2ctl status – показывает статус сервера.
apache2ctl fullstatus – отображает полный отчет о состоянии с mod_status (должен быть включен mod_status). В директиве STATUSURL нужно задать адрес страницы, где будет выводится отчет.
apache2ctl graceful – мягкий перезапуск. Если демон не запущен, он запускается. Открытые соединения не прерываются.
apache2ctl configtest – выполнить проверку синтаксиса файла конфигурации. Если есть ошибки выводится подробная информация о конкретной ошибке.
apache2.conf
Главный конфигурационный файл апача лежит в /etc/apache2.conf. Разберем его по пунктам. Строки, начинающиеся знаком #, являются комментариями и на работу сервера никак не влияют. Важное замечание: при указании путей – не добавляйте слэш в конце пути к каталогу.
Директивы конфигурации сгруппированы в три основных раздела:
- Директивы, управляющие работой сервера Apache как процесса в целом.
- Директивы, определяющие параметры главного сервера или сервера по умолчанию (default),
- Настройки виртуальных хостов.
# Корень сервера, изменять не рекомендуется
ServerRoot "/ etc/apache2"
#
# Файл блокировки, чтобы апач не запустился два или больше раз
LockFile /var/lock/apache2/accept.lock
#
# Путь к файлу, в котором будет записан id процесса апача. Переменная ${APACHE_PID_FILE} указана в файле /etc/apache2/envvars
PidFile ${APACHE_PID_FILE}
#
# Таймаут на прием и передачу, в секундах
Timeout 300
#
# Разрешить постоянные соединения
KeepAlive On
#
# Максимальное количество запросов. Чтобы убрать ограничение выставите 0.
MaxKeepAliveRequests 100
#
# Время ожидания следующего запроса от одного клиента в том же соединении
# в секундах
KeepAliveTimeout 15
##
## Далее идут настройки модуля MPM (ниже я напишу, что это такое)
##
# prefork MPM
# StartServers: количество процессов сервера при запуске
# MinSpareServers: минимальное количество процессов
# MaxSpareServers: максимальное количество процессов
# MaxClients: максимальное количество процессов при старте
# MaxRequestsPerChild: максимальное число запросов на процесс
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
#
# worker MPM
# StartServers: начальное количество серверных процессов при старте
# MaxClients: максимальное количество одновременных клиентских подключений
# MinSpareThreads: минимальное количество рабочих потоков
# MaxSpareThreads: максимальное количество рабочих потоков
# ThreadsPerChild: постоянное количество рабочих потоков в каждый серверный процесс
# MaxRequestsPerChild: максимальное количество запросов, обслуживающихся одним процессом
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
#
# event MPM
# StartServers: начальное количество серверных процессов
# MaxClients: максимальное количество одновременных клиентских подключений
# MinSpareThreads: минимальное количество рабочих потоков
# MaxSpareThreads: максимальное количество рабочих потоков
# ThreadsPerChild: постоянное количество рабочих потоков в каждом процессе
# MaxRequestsPerChild: максимальное количество запросов обслуживающихся одним процессом
<IfModule mpm_event_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
#
#
# От имени какого пользователя и группы запускается апач. Переменные можно установить в файле /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
#
# Стандартный файл .htaccess. Можно назвать его по-другому
AccessFileName .htaccess
#
#
# Запретить показ содержимого файлов .htaccess и .htpasswd в браузере
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy all
</Files>
#
#
# MIME тип файлов по умолчанию. Применяется, когда тип файла не указан явно
DefaultType text/plain
#
#
# Распознавать хосты по именам или по айпи адресам. Лучше отключить если не критично, чтобы не нагружать сервер лишний раз.
# on - по айпи адресам
# off - по именам
HostnameLookups Off
#
# Расположение файла журнала ошибок
ErrorLog /var/log/apache2/error.log
#
# Уровень детализации ошибок. По умолчанию уровень - warn
# Возможные варианты:
# debug - отладочная информация,
# info - просто информация (?),
# notice - уведомления,
# warn - предупреждения,
# error - ошибки,
# crit - критические ошибки,
# alert
# emerg
LogLevel warn
#
# Подключаемые модули:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
#
# Подключение пользовательских конфигураций:
Include /etc/apache2/httpd.conf
#
# Подключить файл со списком портов
Include /etc/apache2/ports.conf
#
# Форматы журнала доступа
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
#
# Журнал доступа для виртуальных хостов, если эти параметры для них отдельно не определены
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
#
# Подключение доп. конфигов
Include /etc/apache2/conf.d/
#
# Подключение виртуальных хостов
Include /etc/apache2/sites-enabled/
Выше я упомянул об MPM – мультипроцессорной модели. Вкратце, это вот что (из Википедии):
[...] архитектура многопроцессорных компьютеров, в которой два или более одинаковых процессоров подключаются к общей памяти. [...] SMP системы позволяют любому процессору работать над любой задачей независимо от того, где в памяти хранятся данные для этой задачи; при должной поддержке операционной системой SMP-системы могут легко перемещать задачи между процессорами, эффективно распределяя нагрузку.
В общем, штука нужная. Но для домашнего тестирования сайтов практической пользы от этого я не вижу. Просто оставьте настройки как есть и все будет работать как надо. Если вы собираетесь применять апач в высоконагруженных или требующих высокой степени безопасности проектах, то в этом случае можете углубиться в эти настройки.
В файле /etc/apache2/envvars прописаны глобальные переменные упомянутые в настройках выше – APACHE_RUN_USER, APACHE_RUN_GROUP и APACHE_PID_FILE. Повторю, что это пользователь и группа, от имени которого запускается апач, а третья переменная это id процесса запущенного апача. Его лучше не изменять. А вот с пользователем и группой нужно немного разобраться.
По умолчанию апач запускается от имени пользователя www-data. Файлы и папки сайта вы скорее всего будете создавать от своего имени. Поэтому апач не сможет ими воспользоваться. В процессе работы сайта кроме чтения файлов понадобиться создавать, изменять и удалять файлы. А для этого потребуются необходимые права.
Допустим вы работаете под пользователем vasya, ваша группа по умолчанию тоже будет называться vasya. Если вы не знаете свои имя, наберите в терминале: whoami и нажмите энтер, в ответ вы увидите свое имя. Чтобы узнать свою группу, наберите команду: groups vasya (вместо vasya подставьте свое имя пользователя). В ответ получите список групп, в которых вы состоите. Если там будет группа с таким же названием как ваше имя пользователя, значит все гуд. Идем дальше.
Как я уже сказал, апач запускается от имени пользователя www-data. Теперь нам нужно добавить этого пользователя в ту же группу, в которой состоите вы. Делается это очень просто. Наберите в терминале следующую команду: sudo usermod -a -G vasya www-data (вместо vasya подставьте свою группу). Если все прошло успешно,остается только раздать права для доступа к папкам и файлам, где лежит наш сайт или сайты. Делается это следующей командой в терминале: sudo chmod -R 770 /home/username/www/. В данном случае сайты лежат в домашней папке пользователя в папке www. Измените этот путь на свой. Права для владельца и для группы (первые две цифры 77) на чтение, выполнение и запись, т. е. полные права. Для всех остальных прав не назначили (третья цифра 0). Параметр -R означает рекурсивное назначение прав. Права естественно вы можете назначить по своему усмотрению и по своим меркам безопасности, я только привел пример. Но обязательно нужно дать права для выполнения, если вы хотите, чтобы ваши скрипты работали.
Продолжаем настройки. В папке conf.d есть файл charset. В нем можно прописать, какая кодировка будет использоваться по умолчанию. Также в этой папке вы найдете файл security. Как понятно из названия, он отвечает за безопасность сервера. Рассмотрим его подробней.
# ServerTokens # Настройте, какие данные должен передавать сервер в своих ответах # Доступные варианты: Full | OS | Minimal | Minor | Major | Prod #ServerTokens Minimal ServerTokens OS #ServerTokens Full # # Подпись сервера на выдаваемых страницах (внутренние страницы ошибок, просмотр фтп-папок, mod_status и mod_info). # Также можно включить в подпись эл. почту администратора сервера # Доступные варианты On | Off | EMail ServerSignature On # # Трассировка # Вкл | Выкл | расширенная: On | Off | extended # TraceEnable Off #TraceEnable On
С настройками закончили. Теперь вы можете настроить апач под свои конкретные нужды.
Очень кратко о том, как подключать модули: a2enmod rewrite. Как видите синтаксис очень простой. Команда a2enmod активирует указанный модуль, в данном случае это модуль rewrite.
Перейдем к хостам. В апаче есть три способа настройки хостов.
Способ первый, самый простой: создаем подкаталог с названием сайта в корне веб-сервера. Например, /var/www/mywebsite. Он будет доступен по адресу http://localhost/mywebsite.
Способ второй, чуть сложнее: создаем в домашней папке каталог www (или любой другой на ваше усмотрение). Активируем модуль UserDir. Для этого в файле apache2.conf нужно добавить строку UserDir www. Здесь www это каталог, который мы создали в своей домашней папке. В ней будет размещаться наш сайт. Активируем модуль UserDir командой sudo a2enmod userdir. Теперь добавим в файл apache2.conf такие строки:
LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so <UserDir www> UserDir disabled root <Directory /home/*/www> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec </Directory> </IfModule>
Сайт будет доступен по адресу http://localhost/~username.
Третий способ, самый сложный. Сложный в плане начального понимания как оно устроено. Но зато очень удобный в плане настроек. Этот способ применяется чаще первых двух. Намного чаще. В статье Веб-сервер на Убунту за пять минут (советую прочитать его еще раз) я подробно описал, как их создавать, поэтому повторяться не буду.
Использование виртуальных хостов предпочтительней. В этом случае все настройки хостов у вас будут лежать в одном каталоге. И в любой момент всего одной командой вы сможете включать и отключать нужные хосты.
После того, как сделаете все необходимые настройки, не забудьте перезагрузить апач. Команды для управления апачем я написал в самом начале этой статьи.
Хорошего вам аптайма!
Немає коментарів:
Дописати коментар