Наконец-то после длительного перерыва я продолжаю серию статей про домашний сервер. Перечислю, что из задуманного уже сделано и некоторые планы на будущее:
Введение
Установка и настройка 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.
Третий способ, самый сложный. Сложный в плане начального понимания как оно устроено. Но зато очень удобный в плане настроек. Этот способ применяется чаще первых двух. Намного чаще. В статье Веб-сервер на Убунту за пять минут (советую прочитать его еще раз) я подробно описал, как их создавать, поэтому повторяться не буду.
Использование виртуальных хостов предпочтительней. В этом случае все настройки хостов у вас будут лежать в одном каталоге. И в любой момент всего одной командой вы сможете включать и отключать нужные хосты.
После того, как сделаете все необходимые настройки, не забудьте перезагрузить апач. Команды для управления апачем я написал в самом начале этой статьи.
Хорошего вам аптайма!
Немає коментарів:
Дописати коментар