Статьи

Работа с Nginx

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

После установки Nginx каталог /etc/nginx/ будет иметь следующее содержимое:

Каталог конфигурации 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 записывается в файл в соответствии с директивой pid , например, pid /var/run/nginx.pid; , Этот основной процесс поддерживает следующие сигналы:

СРОК, ИНТ Быстрое отключение
УВОЛИТЬСЯ Изящное отключение
HUP Перезагрузка конфига + Работники изящного выключения + Перезагрузка
USR1 Повторно открыть файлы журнала
USR2 Обновление исполняемого файла на лету
лебедка Изящное отключение рабочих процессов

Чтобы перезагрузить Nginx, вы можете запустить kill -HUP <PID nginx master proc> .

Отдельные рабочие процессы также могут контролироваться с помощью сигналов.

СРОК, ИНТ Быстрое отключение
УВОЛИТЬСЯ Изящное отключение
USR1 Повторно открыть файлы журнала
лебедка ненормальное завершение для отладки
* требует точек отладки

Для этого вам нужно скомпилировать 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 , полной конфигурацией и журналом отладки.

Это достигается с помощью директивы 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 более продуктивно.

  1. Как nginx обрабатывает запрос
  2. Отладка Nginx