Первые две статьи этой серии дали обзор, а также рассказали о необходимых модулях для Nginx. Этот учебник поможет вам начать использовать Nginx, познакомив вас с некоторыми основными приемами управления файлами конфигурации и настройкой основных параметров в конфигурациях.
Разделение конфигурационных файлов
После установки Nginx каталог /etc/nginx/
будет иметь следующее содержимое:
-
nginx.conf
: основной файл конфигурации. -
conf.d
: используется для таких вещей, как загрузка модулей и для вещей, которые не относятся только к одному виртуальному хосту. -
sites-available
: хранение всех конфигураций виртуальных хостов, даже если они в данный момент не включены. -
sites-enabled
: все сайты, которые включены (символические ссылки на файлы в папке sites-available). -
mime.types
: сопоставляет расширения файлов с типами ответов MIME.
Этот рабочий сайт — папка делает все немного более организованным. В случае нескольких веб-сайтов, то есть виртуальных хостов, каждый виртуальный хост получает свой собственный файл конфигурации. sites-available
могут содержать все файлы конфигурации виртуального хоста, в то время как те, которые включены, могут быть символическими ссылками из sites-enabled
.
Эта конфигурация используется по умолчанию при установке Nginx. Вы можете увидеть, как include
разрешил включение внешних файлов конфигурации. Если в любом из этих включенных файлов есть ошибки, Nginx не загрузится.
Несколько виртуальных хостов
Nginx, как и любой другой веб-сервер, позволяет вам настроить более одного виртуального хоста.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
# sites-enabled/example.com.conf
server {
listen 80;
# both address and port, or only address or only port.
server_name example.com www.example.com;
# names of a virtual server.
access_log /var/log/nginx/example_com_access.log;
error_log /var/log/nginx/example_com_error.log;
# sets configuration depending on a request URI.
location / {
root /var/www/www.example.com;
index index.html index.htm;
}
}
|
Это делается через блок сервера . Директива listen описывает порт, который прослушивает веб-сервер, а директива server_name перечисляет все имена серверов. Внутри расположения вы можете определить, как работает виртуальный хост.
Перезагрузка Nginx
Идентификатор процесса основного процесса Nginx записывается в файл в соответствии с директивой pid , например, pid /var/run/nginx.pid;
, Этот основной процесс поддерживает следующие сигналы:
СРОК, ИНТ | Быстрое отключение |
УВОЛИТЬСЯ | Изящное отключение |
HUP | Перезагрузка конфига + Работники изящного выключения + Перезагрузка |
USR1 | Повторно открыть файлы журнала |
USR2 | Обновление исполняемого файла на лету |
лебедка | Изящное отключение рабочих процессов |
Чтобы перезагрузить Nginx, вы можете запустить kill -HUP <PID nginx master proc>
.
Отдельные рабочие процессы также могут контролироваться с помощью сигналов.
СРОК, ИНТ | Быстрое отключение |
УВОЛИТЬСЯ | Изящное отключение |
USR1 | Повторно открыть файлы журнала |
лебедка | ненормальное завершение для отладки * требует точек отладки |
Nginx в режиме отладки
Для этого вам нужно скомпилировать Nginx с флагом отладки ( --with-debug
). После этого можно отлаживать соединения с определенных адресов с debug_connection
директивы debug_connection
.
1
2
3
4
|
error_log /var/log/nginx/errors;
events {
debug_connection 192.168.1.18;
}
|
Обращаясь за помощью к Nginx, не забудьте поделиться выводом nginx -V
, полной конфигурацией и журналом отладки.
404 и другие страницы ошибок
Это достигается с помощью директивы error_page
. Он определяет ресурс, который будет показан для ошибки.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
# 1
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# 2
error_page 404 =200 /empty.gif;
# change the response code to another using the “=response”
error_page 404 =301 http://example.com/notfound.html;
# use redirects for error processing
# 3
# error processing with a named location
location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
|
Существует также директива recursive_error_pages
которая позволяет выполнять несколько перенаправлений с помощью директивы error_page . Например:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
error_page 400 404 /404.html;
recursive_error_pages on;
location ~* ^/(404\.html|500\.html|503\.html)$ {
log_not_found off;
# Disables logging of errors about not found files.
error_page 404 = @default;
}
location @default {
log_not_found on;
root /var/www/default;
}
|
Справочник автоиндексирования
Запрос, где индексный файл не найден, направляется в этот модуль (ngx_http_autoindex_module). [Пример: общий доступ к локальной сети]
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
location / {
root /var/www/localdropbox;
autoindex on;
# Enables or disables the directory listing output.
autoindex_exact_size off;
# Exact file size vs rounding them to nearest KB, MB, GB.
autoindex_format html;
# format of a directory listing.
autoindex_localtime on;
# local TZ vs UTC.
}
|
Размер загрузки файла
«Слишком большой объект запроса» (413) является распространенным сообщением об ошибке, когда пользователь пытается загрузить файл. Этот размер файла контролируется переменной конфигурации Nginx:
variable client_max_body_size 10M;
# M обозначает мегабайт.
Это устанавливает максимальный размер тела запроса клиента, указанного в заголовке запроса «Content-Length». Чтобы получить отзывы пользователей об этих загрузках , вы также можете использовать nginx-upload-progress-module . Вам необходимо добавить X-Progress-ID, который помогает однозначно идентифицировать загружаемый файл.
Печенье
Nginx обладает очень полезной и изящной функциональностью предоставления файлов cookie для идентификации конечных пользователей. В ситуации, когда вы не хотите использовать внешнюю аналитику, модуль ngx_http_userid_module
может заполняться, передавая файлы cookie.
1
2
3
4
5
6
|
userid on;
userid_name uid;
userid_domain example.com;
userid_path /;
userid_expires 365d;
userid_p3p ‘policyref=»/w3c/p3p.xml», CP=»CUR ADM OUR NOR STA NID»‘;
|
При включении этого модуля становятся доступными переменные $uid_reset
, $uid_got
и $uid_set
. Они могут помочь вам написать еще более сложные правила переписывания.
Эти шаги определенно помогут вам начать работать с Nginx более продуктивно.