середу, 22 лютого 2012 р.

Домашний сервер на Ubuntu Server (часть 5). Веб-сервер

Наконец-то после длительного перерыва я продолжаю серию статей про домашний сервер. Перечислю, что из задуманного уже сделано и некоторые планы на будущее:

Введение
Установка и настройка 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. Разберем его по пунктам. Строки, начинающиеся знаком #, являются комментариями и на работу сервера никак не влияют. Важное замечание: при указании путей – не добавляйте слэш в конце пути к каталогу.

Директивы конфигурации сгруппированы в три основных раздела:

  1. Директивы, управляющие работой сервера Apache как процесса в целом.
  2. Директивы, определяющие параметры главного сервера или сервера по умолчанию (default),
  3. Настройки виртуальных хостов.
# Корень сервера, изменять не рекомендуется
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.

Третий способ, самый сложный. Сложный в плане начального понимания как оно устроено. Но зато очень удобный в плане настроек. Этот способ применяется чаще первых двух. Намного чаще. В статье Веб-сервер на Убунту за пять минут (советую прочитать его еще раз) я подробно описал, как их создавать, поэтому повторяться не буду.

Использование виртуальных хостов предпочтительней. В этом случае все настройки хостов у вас будут лежать в одном каталоге. И в любой момент всего одной командой вы сможете включать и отключать нужные хосты.

После того, как сделаете все необходимые настройки, не забудьте перезагрузить апач. Команды для управления апачем я написал в самом начале этой статьи.

Хорошего вам аптайма! :-)

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments