Продолжая тему о веб-сервере Nginx,
сегодня рассмотрим настройку виртуального хоста, обслуживающего сайт со
статическим контентом. То бишь, никаких CGI, Perl, PHP и еже с ними.
Все примеры, упоминающиеся в статье, относятся и проверялись на Debian Linux 5.0 Lenny.
Владельцев других систем это никак не должно смущать, поскольку
меняться могут только пути к файлам конфигурации, в то время как их
содержимое применимо к любой системе, на которой работает Nginx.

Способ хранения файлов конфигурации
Как вы можете помнить из предыдущей статьи, в файлах конфигурации Nginx можно использовать директиву include,
которая умеет включать в в основной файл конфигурации содержимое других
файлов. Такой подход снабжает администраторов дополнительной гибкостью
конфигурирования сервера, что зачастую экономит время и силы.
Если вы обратили внимание, в основном файле конфигурации /etc/nginx/nginx.conf
нет ни слова о конфигурации виртуальных серверов. Совсем ничего не
сказано о том, где находится корень документов сервера, на каком порту
сервер должен ожидать входящих соединений и прочее. Однако предпоследней
строкой в файле конфигурации записано следующее:
То есть, из каталога /etc/nginx/sites-enabled
считывается содержимое всех файлов и применяется к текущей конфигурации
сервера. Заглянув в упомянутый каталог, вы увидите там один файл default, являющийся символической ссылкой на файл /etc/nginx/sites-available/default.
Тоже очень удобный подход: вам вдруг понадобилось отключить какой-то
виртуальный хост, вы просто удаляете символическую ссылку, а на
заморачиваетесь с перемещением файла туда-сюда.
Создание виртуального сервера
Для «чистоты эксперимента» предлагаю удалить поставляемую с дистрибутивом символическую ссылку /etc/nginx/sites-enabled/default и начать, так сказать, с чистого листа.
Создайте файл /etc/nginx/sites-available/myvhost со следующим содержимым:
Это и есть сама простая конфигурация виртуального сервера в Nginx. Теперь об используемых параметрах по порядку.
Первая опция server, за которой следует фигурная скобка, начинает новую секцию. Именно в секциях server и описываются конфигурации всех виртуальных серверов в Nginx.
Опцией listen мы
сообщаем Nginx номер порта, на котором наш виртуальный сервер должен
ожидать соединений. По умолчанию значение этой опции равно 80,
и в приведённом примере значение определено лишь для наглядности. Также
при помощи этой опции можно указать не только номер порта, но и адрес
сетевого интерфейса, к которому нужно «прицепить» данный сервер.
Например следующие два примера «вешают» сервер на все доступные в
системе TCP/IP-интерфейсы, на порт 8080:
Следующий пример связывает виртуальный
сервер с определённым сетевым интерфейсом с IP-адресом 192.168.0.1,
ожидая входящих соединений на порту 8080:
Опция server_name определяет имя виртуального сервера, которое используется при анализе веб-сервером HTTP-заголовка Host,
приходящего от клиента. Именно эта опция и реализует настройку
виртуальных хостов, базирующихся на имени. Например, вот так будет
выглядеть фрагмент конфигурации двух виртуальных хостов на одном
сервере:
Параметров у опции server_name может быть более одного, таким образом вы можете определить псевдонимы вашего сервера, например:
Также, можно использовать символ звёздочки, заменяющий любую последовательность символов в имени сервера:
Опция location
заслуживает рассмотрения в отдельной заметке, поэтому в данной статье мы
коснёмся её значения и возможностей лишь слегка, в объёме достаточном
для конфигурирования статического веб-сервера. Использование опции
location позволяет вам настраивать поведение сервера в зависимости от
значения URI, полученного от клиента. Таким образом, секция server
может содержать несколько вложенных секций location, описывающих
конфигурацию на основе части URI. В примере, приведённом в начале статьи
определён всего один location, которому будет соответствовать любой
URI, полученный от клиента, поскольку любой URI содержит символ прямого
слэша.
Например, если вам необходимо, чтобы при обнаружении в URI подстроки /images/, Nginx не обращался в корневой каталог сервера, а искал файлы в каталоге /mnt/server2/var/www/images/, можно определить следующие два location:
В приведённых выше примерах использования location используется поиск подстроки в строке URI. То есть, подстрока /images/ будет найдена как в http://server/images/, так и http://server/my/images/. Если вам необходимо, чтобы Nginx выполнял поиск точного соответствия, для этого можно воспользоваться символом '=', который и заставляет сервер вести поиск таким образом:
Также вы можете определить подстроку, с которой должен начинаться URI. Для этого используется конструкция из двух символов '^~':
Ну и регулярные выражения, само-собой,
поддерживаются и дают большую гибкость при описании location. Следующий
location будет соответствовать всем URI, содержащим в конце имена
графических файлов (без учёта регистра):
То же самое, но с учётом регистра:
И немного о порядке очереди обработки
опций location в Nginx. Вопреки тому, что многим кажется на первый
взгляд, совершенно не имеет значения (кроме регулярных выражений,
само-собой) в каком порядке определены location в конфигурационном
файле. Как ни меняйте их местами, результат будет один и тот же. При
поиске нужного локейшена, Nginx следует следующему алгоритму:
- Выполняется поиск правила, начинающегося с '='. Как только такое правило будет найдено, дальнейший поиск будет прекращён.
- Выполняется поиск «обычных» правил, т. е. не регулярных выражений. Если среди них будет найдено правило, начинающееся с '^~', дальнейший поиск будет прекращён.
- Обрабатываются регулярные выражения в том порядке, в котором они встречаются в файле конфигурации.
- Если будет найдено соответствие по п. 3, то будет использоваться именно этот location, в противном случае будет использоваться location, найденный в п. 2.
Опция root своим значением определяет путь к корню документов виртуального сервера на файловой системе.
При помощи опции index вы
можете определить имена файлов индексных документов, которые будет
«отдавать» клиентам Nginx, если был запрошен доступ к каталогу. Если в
каталоге такого файла не окажется и для данного location отключена опция
autoindex, то клиент в ответ получит HTTP-код 403, говорящий о том, что доступ запрещён.
Опция autoindex
настраивает поведение Nginx в случае, если в каталоге не найден
запрашиваемый индексный файл. Если значением опции autoindex, как
примере выше, является 'on', то сервер вернёт клиенту
содержимое каталога в виде HTML-списка файлов. По умолчанию autoindex
отключён, и будьте осторожны с ней, чтобы ненароком не вывесить на
всеобщее обозрение критически-важную информацию.
Перезапуск сервера
Теперь, когда конфигурационный файл готов, необходимо сделать на него символическую ссылку из каталога /etc/nginx/sites-enabled/, чтобы при перезапуске Nginx подключил его содержимое в свою конфигурацию:
Далее, создайте каталог, определённый в качестве корня документов сервера параметром root:
Осталось перезапустить сервер:
И, если все настройки были выполнены без
ошибок, вы сможете подключиться к вашему первому виртуальному серверу
Nginx при помощи веб-браузера и увидеть пустой индекс файлов корневого
каталога сервера. Попробуйте разместить пару статических html-файлов в
каталоге /var/www/myshost и затем получить доступ к ним из вашего браузера.
В следующей статье мы рассмотрим конфигурацию SSL-сервера в Nginx.
- Гость • месяц назад
- Alexander Shepetko • месяц назад
- Дмитрий • год назад
- Слава • год назад
Комментариев нет:
Отправить комментарий