Web-сервер

Материал из SoftTimeINFO
Перейти к: навигация, поиск

В статье описывается развертывание Web-сервера под Ubuntu, для которого необходим собственно сам Web-сервер (apache или nginx или их связка), и иногда ряд компонентов, вроде базы данных или возможности отправки почтовых сообщений (впрочем последние могут быть вынесены на отдельные специализированные сервера).

Содержание

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

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

Установить часовой пояс удобнее всего при помощи утилиты dpkg-reconfigure

dpkg-reconfigure tzdata

По мере работы сервера, время, может отставать или наоборот убегать вперед, что затрудняет анализ логов распределённых сервисов. Поэтому, как правило, сразу после установки часового пояса устанавливают сервер точного времени ntp, который синхронизирует время на сервере с серверами точного времени в Интернет. Особенностью данного сервера является то, что он подстраивает время постепенно, исключая скачки и длительные разрывы, неизбежные при установке «точного» времени вручную. Установить время можно при помощи следующей команды

sudo apt-get install ntp

За настройку сервера отвечает конфигурационный файл /etc/ntp.conf. При помощи директив server можно задать список серверов, с которыми сервер осуществляет синхронизацию. Можно оставить сервера по умолчанию

...
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org
...

Можно, установить любые другие сервера точного времени

...
server time.nist.gov
server ntp.ubuntu.com
...

После изменения конфигурационного файла /etc/ntp.conf, его следует либо перечитать (reload) либо перезагрузить сервер ntp полностью (restart).

sudo service ntp reload

или

sudo service ntp restart

Все сервера, описываемые в этой и связанных статьях, управляются при помощи команды service, помимо неё в описаниях может встречаться альтернативный синтаксис с использованием /etc/init.d

sudo /etc/init.d ntp restart

который также работает, но является устаревшим и не рекомендуемым в использовании.

[править] Установка Web-сервера Apache

Для установки Web-сервера Apache следует выполнить следующую команду

sudo apt-get install apache2

Управление сервером осуществляется при помощи команды service, следующая команда запускает сервер

sudo service apache2 start

Для остановки сервера следует выполнить

sudo service apache2 stop

Для перезапуска следует передать параметр restart

sudo service apache2 restart

Если в полном перезапуске сервера нет необходимости, можно лишь перечитать конфигурационные файлы, воспользовавшись параметром reload

sudo service apache2 reload

Конфигурационные файлы Web-сервера Apache в Ubuntu сосредоточены в папке /etc/apache2. Главный конфигурационный файл apache2.conf, обычно практически не требует настройки, особенно, если речь идет о конфигурировании машины разработчика, а не о production-сервере. Такое положение дел связано с тем, что часто-изменяемые директивы, настройки модулей и виртуальных хостов вынесены в отдельные файлы, которые подключаются к основному конфигурационному файлу при помощи директивы include.

[править] Подключение модулей к Web-серверу Apache

Дополнительные модули устанавливаются в папку /etc/apache2/mods-available, при этом доступными они становятся только после того, как в соседней папке /etc/apache2/mods-enabled появляется символическая ссылка. Например, по умолчанию модуль преобразования адресов ReWrite отключен, однако, в папке /etc/apache2/mods-available имеется модуль rewrite.load. Для того, чтобы включить его на сервере, необходимо перейти в папку /etc/apache2/mods-enabled и создать там соответствующую символическую ссылку, после чего перезагрузить сервер Apache:

cd /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/rewrite.load
sudo service apache2 restart

Команда cd осуществляет переход в каталог /etc/apache2/mods-enabled, ln — создает символическую ссылку на модуль rewrite.load, а service — перезапускает Web-сервер. Можно избежать первой команды, если вы уже находитесь в каталоге /etc/apache2/mods-enabled, или явно указываете путь к символической константе в третьем параметре команды ln

sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
sudo service apache2 restart

При установке PHP из пакетов, ссылки на модуль php5.load и его конфигурационный файл php5.conf создаются автоматически. Проверить так ли это можно при помощи команды ls -la, в списке должны быть следующие строчки

php5.conf -> ../mods-available/php5.conf
php5.load -> ../mods-available/php5.load

Если они отсутствуют, модуль PHP не подключен.

[править] Создание виртуальных хостов

Раньше каждому сайту в сети интернет соответствовал один хост, что было крайне не удобно, так как один сервер зачастую способен обслуживать сотни сайтов. Поэтому была добавлена возможность обслуживания одним сервером множеством сайтов, виртуальных хостов. Виртуальный хост связывает доменное имя сайта и папку на сервере (DocumentRoot), где расположены обслуживающие его файлы. В протокол HTTP введен HTTP-заголовок Host, которые содержит доменное имя сайта, которому направлен запрос. Этот HTTP-заголовок обязан отправлять каждый клиент, запрашивающий сайт по доменному имени, а не по IP-адресу

GET / HTTP/1.1
Host: softtime.info

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

Схема подключения конфигурационных файлов виртуальных хостов аналогична схеме модулей. В папке /etc/apache2/sites-available хранятся конфигурационные файлы: один файл — один домен. В папке /etc/apache2/sites-enabled создаются символические ссылки на файлы в /etc/apache2/sites-available, которые необходимо подключить.

Ниже приводится типичное содержимое конфигурационного файла виртуального хоста

<VirtualHost *:80>
  ServerAdmin support@softtime.info
  ServerName softtime.info
  ServerAlias www.softtime.info
 
  DocumentRoot /home/www/softtime.info/www
  <Directory /home/www/softtime.info/www>
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>
 
  LogLevel warn
  CustomLog /home/www/softtime.info/log/apache.access.log combined
  ErrorLog /home/www/softtime.info/log/apache.error.log
</VirtualHost>

[править] Контейнер <VirtualHost>

Директивы внутри контейнера <VirtualHost> определяют свойства виртуального хоста. * может бы заменена на IP-адрес хоста, где расположен сервер

<VirtualHost 62.76.190.198:80>
...

В случае явного указании IP-адреса в контейнере <VirtualHost>, при смене IP-адреса потребуется редактирование всех виртуальных хостов, поэтому очень часто оставляют *, которая соответствует любому IP-адресу, и, как следствие, при смене IP-адреса сервера дополнительной настройки не требуется.

Цифра 80, указывает порт, который прослушивает Web-сервер, в данном случае это стандартный порт протокола HTTP. Если указывается порт, отличный от стандартного, его необходимо явно указывать в запросе http://softtime.info:8080/.

В каждый момент времени только один сервер может прослушивать порт на хосте. Поэтому нельзя запустить часть сайтов из под Web-сервера Apache, а часть из под nginx. Однако, манипулируя портами, можно передавать результаты от одного сервера другому. Например, очень часто запросы получаются легковесным сервером nginx на 80 порт, который может обслуживать запросы на статику (изображения, CSS, JS файлы), а запросы на динамический контент передавать дальше, Web-серверу Apache, который прослушивает 8080 порт. В случае такого тандема серверов, внутренний Apache часто вешают не только на нестандартный порт 8080, но еще и на локальный IP-адрес 127.0.0.1, доступ к которому можно получить только с того же сервера, где он расположен, однако, к которому нельзя получить доступ из сети.

<VirtualHost 127.0.0.1:8080>
...

IP-адрес 127.0.0.1 также часто используется Web-разработчиками для тестирования и работы над проектами в локальном режиме.

Один сервер можно заставить прослушивать сразу несколько портов, для этого каждый из используемых портов следует указать в конфигурационном файле /etc/apache2/ports.conf

NameVirtualHost 127.0.0.1:80
NameVirtualHost 127.0.0.1:8080
Listen 80
Listen 8080

Директивы Listen указывают порты, которые слушает Web-сервер. Директивы NameVirtualHost указывают IP-адреса и порты, которые могут прослушивать виртуальные хосты. В каждой из этой директив вместо порта или IP-адреса можно использоваться символ *, обозначающий любой порт или IP-адрес.

[править] Директива ServerAdmin

Директива ServerAdmin задает e-mail, который выводится на страницах ошибок. Вывод e-mail происходит, если значение директивы ServerSignature в файле /etc/apache2/conf.d/security принимает значение On или EMail (в первом случае дополнительно выводится версия Apache, во втором — только e-mail).

ServerAdmin support@softtime.info

[править] Директива ServerName

Директива ServerName задает доменное имя, за которое несет ответственность виртуальный хост. Директива ServerAlias позволяет задать псевдоним для виртуального хоста, очень часто в качестве такого псевдонима выступает поддомен www

ServerName softtime.info
ServerAlias www.softtime.info

Для основного доменного имени и для псевдонима (в данном случае поддомен третьего уровня www.softtime.info) должны существовать A записи на уровне DNS-сервера

softtime.info.       A     62.76.190.198     86400
www.softtime.info.   A     62.76.190.198     86400

Именно благодаря служба DNS будет перенаправлять запросы Web-серверу, расположенному на том IP-адресе, где расположен сервер. Сам же сервер, будет ориентироваться на HTTP-заголовок Host, чтобы выбрать верный виртуальный хост.

В том случае, если Web-сервер разворачивается для локального использования, то есть запросы отправляются с браузера текущей машины на Web-сервер, расположенный на ней же (IP-адрес 127.0.0.1), служба DNS, как правило, не используется. В этом случае доменное имя можно прописать в файле /etc/hosts

127.0.0.1 softtime.dev
127.0.0.1 www.softtime.dev

В качестве доменного имени первого имени, как правило, выбирают несуществующую зону, например, dev. Это позволяет прописывать в /etc/hosts имена, без опасения затереть домен в сети интернет (который будет не доступен, так как запросы будут перенаправляться локально, а не на IP-адрес хоста, где расположен сайт).

[править] Директива DocumentRoot

Данная директива определяет физическое расположение виртуального хоста на жестком диске.

DocumentRoot /home/www/softtime.info/www

Файл /home/www/softtime.info/www/index.html будет доступен по адресу http://softtime.info/index.html

[править] Контейнер <Directory>

Контейнер <Directory> позволяет задать поведение Web-сервера применительно к папке, например, корневой папке сайта. Директивы, расположенные внутри этого контейнера будут применены к папке. Можно использоваться несколько контейнеров <Directory> для определения поведения различных подкаталогов сайта.

[править] Директива Options

Директива Options управляет свойствами каталога и может принимать следующие значения:

  • ExecCGI — включает или отключает выполнение CGI-скриптов;
  • FollowSymLinks — разрешает или запрещает Web-серверу следовать по символическим ссылкам;
  • SymLinksIfOwnerMatch — разрешает следование символической ссылке только в том случае, если у ссылки и файла на который ссылка ссылается одинаковые владельцы;
  • Includes — включает или выключает SSI (модуль mod_include);
  • IncludesNOEXEC — выключает SSI, без директив #exec cmd и #exec cgi;
  • Indexes — данная директива (модуль mod_autoindex) включает или выключает отображение содержимого директории в случае отсутствия индексного файла (как правило, index.html или index.php);
  • MultiViews — включает или выключает возможность поиска наиболее подходящего ответа из нескольких возможных (модуль mod_negotiation). Например, можно задать для документа index.html разные языковые версии index.html.ru, index.html.de, index.html.es. При включенной директиве, Web-сервер, получив от клиента HTTP-заголовок Accept-Language: ru, автоматически отправит документ index.html.ru, при выключенной директиве языковую версию документа необходимо будет указать явно index.html.ru.
  • All — включает все вышеперечисленные директивы;
  • None — отключает все вышеперечисленные директивы;

Допускается указание нескольких директив из приведенного выше списка (разделяются пробелом). При помощи символов + и — можно включать и выключать отдельные параметры из приведенного выше списка. Например, следующая директива отключает MultiView, Indexes и включает Includes.

Options -MultiView -Indexes +Includes

[править] Директива AllowOverride

Свойства каталога можно определять не только на уровне виртуального хоста или главного конфигурационного файла, но и при помощи конфигурационного файла .htaccess, расположенного прямо в папке сайта. Директивы из файла .htaccess действуют не только на текущий каталог, но и на все подкаталоге данного каталога. Имя файла .htaccess задается в конфигурационном файле /etc/apache2/apache2.conf при помощи директивы AccessFileName

AccessFileName .htaccess

В UNIX-подобных операционных системах файлы, начинающиеся с точки, считаются скрытыми, что впрочем не защищает их от просмотра через браузер. Для предотвращения просмотра файлов .htaccess в конфигурационный файл /etc/apache2/apache2.conf добавляется контейнер <Files>, который при помощи регулярного выражения отбирает все файлы, начинающиеся на .ht и запрещает к ним доступ при помощи директивы Deny

<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
  Satisfy all
</Files>

Директива AllowOverride позволяет задать группы директив, которыми можно управлять через конфигурационный файл .htaccess и может принимать следующие значения:

  • AuthConfig — Директива разрешает использование в конфигурационном файле .htaccess директив аутентификации и управления доступом (таких как AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile и Require);
  • FileInfo — Директива разрешает использование в конфигурационном файле .htaccess директив, управляющих типами документов (AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument и LanguagePriority);
  • Indexes — Директива разрешает использование в конфигурационном файле .htaccess директив, управляющих индексами каталогов (AddDescription, AddIcon, AddiconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions и RenameName);
  • Limit — Директива разрешает использование в конфигурационном файле .htaccess директив, управляющих доступом к файлам и папкам (Allow, Deny и Order);
  • Options — Директива разрешает использование в конфигурационном файле .htaccess директив, управляющих свойствами каталогов (Options);

[править] Установка PHP

Установить PHP можно при помощи следующей команды

sudo apt-get install php5 php5-mysql php5-curl php5-gd php-pear php5-imagick php5-mcrypt php5-memcache php5-xmlrpc php5-xsl

Собственно сам php5 устанавливается при помощи php5, далее перечисляются расширения, чем их больше, тем больше возможностей и тем больше PHP потребляет оперативной памяти. Поэтому, если можно устанавливать расширения не сразу, а по мере необходимости выполняя отдельные команды apt-get install

sudo apt-get install php5
sudo apt-get install php5-mysql
sudo apt-get install php5-curl
...

Для того, чтобы связать PHP c Web-сервером Apache необходимо поставить следующий пакет

sudo apt-get install libapache2-mod-php5

Для проверки работоспособности PHP, в папке виртуального хоста следует создать файл index.php следующего содержания

<?php
  echo "Hello world!<br />";
  echo date("d.m.Y H:i:s");
?>

Обращение к доменному имени, указанному в виртуальном хосте, http://softtime.dev/index.php должно выводить фразу «Hello world!», а строчкой ниже — текущее время.

[править] Установка MySQL

Базы данных используются для хранения и быстрого доступа к массиву информации. Они организуют очередь для множества параллельных запросов, кэшируют часто используемые фрагменты базы данных в оперативной памяти, тем самым сильно облегчая разработку программного обеспечения, особенно, в средах с большим количеством параллельных запросов, таких как Web. Ни один более или менее сложный сайт не обходится без базы данных. Одной из наиболее популярных баз данных является MySQL, которую можно установить в Ubuntu при помощи следующей команды

sudo apt-get install mysql-server

СУБД MySQL обладает многочисленными настройками и режиме работы, ознакомиться с которыми можно в основной статье MySQL.

[править] Установка phpMyAdmin

Управление MySQL из командной строки может быть довольно утомительным занятием, которое требует хорошего знания SQL и основ администрирования. Большинство Web-разработчиков предпочитают использовать Web-интерфейс phpMyAdmin, который можно установить из репозитария при помощи следующей команды.

sudo apt-get install phpmyadmin

Для удобства, для phpmyadmin можно создать отдельный виртуальный хост, например, phpmyadmin.dev. Будем считать, что речь идет об локальной машине. Пропишем домен phpmyadmin.dev в файле /etc/hosts

127.0.0.1  phpmyadmin.dev

После чего создадим в каталоге /etc/apache2/sites-available конфигурационный файл phpmyadmin.dev следующего содержания

<VirtualHost 127.0.0.1:80>
    DocumentRoot /usr/share/phpmyadmin
    <Directory /usr/share/phpmyadmin>
	Options FollowSymLinks
	AllowOverride All
	Order allow,deny
	allow from all
    </Directory>
    ServerName phpmyadmin.dev
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Переменная APACHE_LOG_DIR указывает на каталог /var/log/apache2 (при необходимости можно указать другой путь). После создания файла /etc/apache2/sites-available/phpmyadmin.dev следует создать символическую ссылку в каталоге /etc/apache2/sites-enabled

sudo ln -s /etc/apache2/sites-available/phpmyadmin.dev /etc/apache2/sites-enabled/phpmyadmin.dev

и перечитать конфигурационные файлы Web-сервера Apache

sudo service apache2 reload
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты