
Nginx стал одним из самых популярных решений для веб-серверов и обратных прокси-серверов, известным своей высокой производительностью, масштабируемостью и простотой использования. Опрос W3Techs 2025 года показал, что nginx обеспечивает функциональность более 33% веб-сайтов во всем мире. Это делает его жизненно важным инструментом для современных конфигураций серверов.
В этом подробном руководстве мы познакомимся с nginx и его основными характеристиками, рассмотрим основные этапы настройки nginx на вашем сервере для улучшения его производительности и гарантии безопасной и эффективной работы. Это руководство поможет вам использовать nginx для удовлетворения потребностей вашего веб-сервера, независимо от того, являетесь ли вы новичком или опытным пользователем.
Что такое nginx?
Веб-сервер является важным компонентом Интернета и предназначен для доставки запрошенной веб-страницы. Для того чтобы превратить свой компьютер в веб-сервер, вы должны установить программное обеспечение (ПО) веб-сервера, такое, как nginx, XAMPP, Apache, Tornado, Caddy или Microsoft Internet Information Services (IIS). Nginx и Apache – два самых широко используемых в мире веб-сервера. Сегодня мы сосредоточимся именно на nginx.
Nginx (произносится как «Engine-X») – это ПО веб-сервера с открытым исходным кодом, который часто используется как обратный прокси-сервер или HTTP-кэш. Он предназначен для максимальной производительности и стабильности и предоставляет возможности HTTPS-сервера. Кроме того, он может использоваться в качестве прокси-сервера для протоколов электронной почты, таких как IMAP, POP3 и SMTP.
История и эволюция nginx
Nginx был разработан в 2002 году системным администратором «Рамблера» Игорем Сысоевым с целью решить проблему с проседанием под нагрузкой. Продукт был доступен широкому кругу пользователей и уже в 2004 году и получил одобрение. С 2011 года выпуском занимается собственная фирма Игоря, которая через 2 года представила расширенную платную версию продукта под названием Nginx Plus.
Архитектура nginx
Nginx имеет следующий характер архитектуры:
- Асинхронная. Это значит, что все запросы обрабатываются на разных этапах, что повышает скорость обработки.
- Модульная. Это характеристика внутреннее устройства nginx. Nginx состоит из ядра и целого ряда модулей:
Ядро отвечает за создание основы веб-сервера, а также за работу функций веб-сервера и обратного прокси. Однако большинство функций протоколов и приложений реализуются с помощью модулей, а не ядра. Именно модули протоколов позволяют nginx работать через HTTPS, TLS/SSL, SMTP, POP3 и IMAP. - Событийно-ориентированная. Это значит, что nginx использует мультиплексирование и уведомления о событиях, назначая конкретные задачи отдельным процессам
- Модель «Master-slave».
«Masters» считывают и проверяют конфигурации, создавая, привязывая и пересекая сокеты. Кроме того, они отвечают за запуск, завершение и поддержание большого количества настроенных рабочих процессов. Главный узел может изменить рабочий процесс, не прерывая обслуживание.
Соединения обрабатываются с помощью определенного количества однопоточных процессов, называемых «worker’ами». Внутри каждого worker nginx может обрабатывать множество одновременных соединений и запросов
Прокси-кеши – это уникальные операции. У них есть менеджер кэша и загрузчик. Загрузчик кэша проверяет элемент кэша на диске и добавляет метаданные кэша в базу данных движка в память. Он подготавливает копии nginx для работы с файлами, которые уже сохранены на диске, в уникальной структуре. Менеджер кэша отвечает за аннулирование и истечение кэша.
Основные характеристики nginx
Nginx имеет следующие особенности:
- Высокая скорость
Особенно заметна при работе со статическим контентом, который не нужно постоянно обновлять. Когда пользователь загружает страницу сайта, сначала веб-сервер nginx кэширует данные у себя, а потом возвращает результат. При следующих запросах страницы ответ происходит в несколько раз быстрее.
- Возможности балансировки нагрузки
Некоторые из алгоритмов балансировки нагрузки, поддерживаемых Nignix, включают циклический перебор, наименьшее количество подключений и хэш IP. Эти алгоритмы позволяют распределять трафик по нескольким серверам для обеспечения высокой доступности и улучшения использования ресурсов.
- Производительность и масштабируемость
Nginx отлично справляется со статическим контентом, таким как HTML, CSS и изображения. Известный своей простой, управляемой событиями архитектурой, nginx может обрабатывать тысячи одновременных подключений с минимальным использованием памяти. Это делает его высокомасштабируемым и производительным даже при больших объемах трафика.
- Гибкость
Программное обеспечение nginx легко настраивается и конфигурируется под требования инфраструктуры.
- Малое потребление памяти
Чтобы сократить потребление оперативной памяти и уменьшить на нее нагрузку, nginx использует выделенный сегмент памяти – «пул» (pool). Он динамический и может расширяться по мере роста запроса.
- Функциональность обратного прокси-сервера
Nginx работает как обратный прокси-сервер, перенаправляя запросы клиентов на внутренние серверы и предоставляя клиентам ответ. Это повышает безопасность, скрывает внутренние данные серверов и улучшает обработку трафика.
- Мультиплатформенность
Nginx универсален и работает на различных операционных системах (ОС). Некоторые из самых распространенных операционных систем, на которых можно установить и запустить nginx: Linux и Linux-дистрибутивы (Ubuntu, Debian, CentOS, Red Hat Enterprise Linux (RHEL), Fedora, openSUSE и многие другие), Unix (BSD), macOS, Windows, Docker, облачные платформы (Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP) и другие).
- Хорошая поддержка
Nginx имеет активное сообщество и хорошую поддержку клиентов, а документация доступна на английском и русском языке.
- Доступность
Программа бесплатная и имеет открытый программный код, поэтому любой разработчик может адаптировать nginx под себя.
Установка и настройка nginx
Установка nginx вне зависимости от операционной системы (ОС) не представляет каких-то сложностей. Все, что касается настройки и установки вы можете найти в официальной документации nginx.
В нашей статье мы не будем привязываться к конкретным ОС, так как настройка nginx почти везде одинакова. Формат файла идентичен, поэтому конфигурация может легко мигрировать на различные ОС. Изменять понадобится только пути к файлам и директориям. Мы уже упоминали, что nginx является основным выбором для многих Linux-дистрибутивов, поэтому мы расскажем, как выполнить установку на популярные дистрибутивы Linux.
Виртуальные приватные серверы — эффективная работа по приятной цене. Быстрые NVMe, более 40 локаций, поддержка 24/7.
Установка nginx
Если nginx ещё не установлен в вашей системе, сделать это очень просто, выполняя следующие шаги:
1. Откройте командную строку на вашем устройстве. Для того чтобы вызвать командную строку, нажмите сочетание клавиш «Win + R» (Windows), «Ctrl+Alt+T» (Linux) или нажмите кнопку терминала на вашем устройстве (macOS).
2. В появившемся окне введите «cmd» и нажмите «OK».
3. В появившейся командной строке введите следующую команду:
apt-get install nginx -y
Для deb-based дистрибутивов (Debian и другие), введите:
sudo apt update && sudo apt install nginx
Для rpm-based (CentOS и прочие), введите:
sudo dnf update && sudo dnf install nginx
4. Перезагрузите nginx.
service nginx restart
Запуск nginx
Для того чтобы запустить nginx, выполните следующие команды:
1. Запустите nginx после установки.
apt-g
2. Автозапуск nginx после перезагрузки системы включается так:
sudo systemctl enable
3. Проверьте статус службы следующей командой:
sudo systemctl status nginx
4. В случае успешного запуска nginx, вы увидите следующее:
...
Loaded: loaded
Active: active (running)
...
5. Если в браузере ввести адрес вашего сервера (http://localhost в случае локальной установки и замените localhost на IP-адрес или доменное имя вашего сайта в случае удаленной настройки), вы увидите страницу приветствия:
6. Если при запуске nginx возникли как-то проблемы, возможно, придётся добавить необходимое правило для вашего брандмауэра.
7. Увидеть подробный отчет о работе nginx можно в журналах службы (об этом чуть позже), в терминале или с помощью следующей команды:
sudo journalctl -u nginx
Nginx в Docker
Запуск внутри контейнера особенно удобен для разработки, потому что позволяет отлаживать неограниченное количество копий сайта с различными настройками и версиями программ.
Для того чтобы запустить nginx в новом контейнере, выполните следующие шаги:
1. Если ваш сайт будет работать в контейнере и у вас уже установлен Docker, запустить nginx в новом контейнере можно следующей командой:
docker run -p 80:80 nginx
Эта команда также автоматически скачает и установит nginx из официального образа, если он еще не установлен.
2. Посмотрите список запущенных контейнеров:
docker ps
3. В выводе этой команды должна появится следующая строка:
... nginx ... 0.0.0.0:80->80/tcp ...
Это говорит о том, что nginx готов принимать входящие HTTP соединения по IP-адресу вашего сервера. Например, если docker установлен локально, то по адресу http://localhost в браузере появится страница приветствия:
Это значит, что вы успешно запустили nginx, конфигурация по умолчанию сделала за нас всю основную работу.
Настройка nginx
Для того чтобы настроить nginx и управлять его конфигурациями, выполните следующие шаги:
1. Введите следующую команду для получения основного файла конфигурации:
/etc/nginx/nginx.conf
2. Появится общая структура конфигурации nginx, где блок server содержит основные настройки вашего сайта, а location обрабатывает конкретные пути (URI) в адресах запросов
...
http {
...
server {
...
location ... {
...
}
}
}
Внутри и снаружи блоков могут находиться директивы – строки, содержащие имя директивы и её параметры и завершающиеся точкой с запятой.
При работе с настройками желательно руководствоваться правилом «один сайт – один файл конфигурации». Вносить все настройки прямо в файл nginx.conf нежелательно по нескольким причинам:
- Если у вас несколько сайтов и несколько блоков сервера, файл становится слишком большим и его трудно прочитать
- Повторяющиеся в различных блоках настройки обычно выносятся в отдельные файлы и подключаются директивой include в нужных местах
- Если настройки каждого блока сервера вынесены в отдельную конфигурацию, то можно легко подключать и отключать сайты, просто переименовывая или перенося один файл.
- В перечне нескольких файлов всегда видно, какой именно файл был изменён последним по времени.
- Если настройки сайта хранятся в отдельном файле, они не повредят общую конфигурацию при редактировании
Ниже представлена полная настройка файла nginx.conf в Debian, которая была выполнена автоматически при установке пакета:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Также полная настройка файла nginx.conf в CentOS, выполненная автоматически при установке пакета:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
Разница настройка файла nginx.conf только в том, что в отличие от Debian, основная конфигурация CentOS включает блок сервера сайта по умолчанию, который в Debian помещается в отдельный файл в каталоге /etc/nginx/sites-enabled/ и включается директивой include.
После завершения установки, вам будет представлен файл «default» (на самом деле, являющийся ссылкой на файл /etc/nginx/sites-available/default), который принимает входящие соединения на порту 80. Это порт по умолчанию для протокола HTTP.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
Далее, для того чтобы при помощи редактора nano создать в каталоге /etc/nginx/conf.d/ файл example.conf с настройками вашего первого сайта, или, в терминах nginx, «виртуального сервера», выполните следующую команду:
sudo nano /etc/nginx/conf.d/example.conf
Впишите в файл следующие строки:
server {
listen 8080;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Заметно, что т.к. порт 80 уже занят сервером по умолчанию, новый виртуальный сервер слушает порт 8080.
Для того чтобы сохранить настройки, перезапустите nginx конфигурацию.
sudo systemctl restart nginx
Для того чтобы проверить результат, введите в адресной строке браузера http://localhost:8080/. Если все сделано верно, должна появиться уже знакомая страницу приветствия.
Далее, для того чтобы nginx перенаправлял, входящие соединения службе php-fpm, необходимо отредактировать example.conf, добавив в блоке server ещё один блок location:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
Если ваши службы работают на разных физических серверах, вы можете везде заменить 127.0.0.1 на их IP-адреса в сети.
Полная версия конфигурации сайта теперь должна выглядеть так:
server {
listen 8080;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
Для вступления изменений настроек в силу, перезапустите nginx:
sudo systemctl restart nginx
Настройка безопасного соединения
Если ваш сервер принимает или передает конфиденциальные данные пользователя, такие как данные авторизации или платежная информация, для безопасного соединения необходимо включить и установить вв nginx SSL-сертификаты, а также использовать протокол безопасной передачи данных HTTPS. По умолчанию этот протокол использует порт 443
Включение SSL в nginx
Для того чтобы использовать SSL в nginx, необходимо:
1. Изменить настройки блока сервера, чтобы разрешить прослушивание порта 443
listen 443 ssl;
2. Указать пути к файлам ключей и сертификату SSL. Это позволяет nginx обрабатывать HTTPS безопасно.
ssl_certificate example.ru.crt
ssl_certificate_key example.ru.key;
Эти действия позволяют nginx обрабатывать HTTPS безопасно.
Получение и установка SSL-сертификатов
Сертификаты SSL вы можете получить у коммерческих поставщиков или у доверенного центра сертификации (CA), такого как Let's Encrypt, который предлагает их бесплатно. После получения сертификата необходимо установить его на сервере, пометив его в соответствующий каталог и указав в конфигурации nginx.
Для установки SSL-сертификатов, выполните следующие шаги:
1. Получив сертификат, добавьте строки сертификатов Let’s Encrypt:
ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
2. Ограничьте права доступа к файлу с секретным ключом и получите следующую рабочую конфигурацию сайта:
server {
listen 8080;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
server {
listen 443 ssl;
server_name example.ru www.example.ru;
root /var/www/html;
index index.html index.htm;
charset UTF-8;
ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
Для автоматического обновления SSL-сертификатов Let’s Encrypt вы можете использовать клиент certbot. Документацию по его настройке можно найти на официальном сайте.
Идеальное решение для масштабных проектов. Безупречная защита, высокая производительность и гибкая настройка.
Настройка HTTPS для безопасной связи
Для того чтобы пользователи не могли случайно попасть на страницу авторизации по протоколу http, после установки SSL-сертификата перенаправьте трафик HTTP на HTTPS и настройте надежные параметры SSL. Для этого необходимо выполнить следующи шаги:
1. Добавьте в файл конфигурации вашего сайта в блок server, прослушивающий порт 80, следующую директиву:
return 301 https://$host$request_uri;
2. Перезапустите nginx и получите новую версию файла:
server {
listen 80;
server_name example.ru www.example.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.ru www.example.ru;
root /var/www/html;
index index.html index.htm;
charset UTF-8;
ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
}
}
При необходимости изменять основной файл настройки nginx, сделайте резервную копию:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig
После включения протокола HTTPS следует проверить, соответствуют ли ваши настройки современным стандартам безопасности. Для этого легко использоватьонлайн-сервисы, такие как HTTP Observatory, Wormly и другие.
Примечание:
- С полным перечнем директив, используемых в этом руководстве можно ознакомиться на официальном сайте Nginx.
Важно, что параметры nginx, которые вы установили с помощью этих директив в главном файле конфигурации, наследуются файлами виртуальных серверов, но вы всегда можете переопределить их там. Иначе говоря, nginx возьмёт из файла nginx.conf все параметры, которые не указаны в конфигурации сайта.
- Также в файлах конфигурации можно использовать встроенные переменные, с полным списком которых вы также можете ознакомиться в официальной документации Nginx
Распространенные ошибки nginx и их устранение
При настройке nginx на вашем собственном сервере пользователи сталкиваются с неизбежно возникающими проблемами и ошибками. Несмотря на то, что лучшие практики при отладке служб – это анализ журналов (логов), проверка статусов и состояний служб, важно еще знать о характере и потенциальном решении этих ошибок. В этом разделе мы рассмотрим распространенные коды ошибок, которые предоставляет нам nginx.
502 Bad Gateway
Когда nginx не может подключиться к серверу верхнего уровня, возникает эта ошибка. Чтобы исправить это, проверьте, запущен ли сервер верхнего уровня, и проверьте правильные настройки конфигурации nginx.
503 Service Unavailable
Когда nginx не может связаться с сервером внутреннего уровня из-за перегрузки или технического обслуживания, возникает ошибка «503 Service Unavailable». Убедитесь, что сервер внутреннего уровня работает правильно и что его ресурсы используются.
504 Gateway Time-out
504 Gateway Time-out указывает на то, что nginx уже не может ждать ответа от сервера верхнего уровня. Проверьте настройки времени ожидания в конфигурации nginx и убедитесь, что сервер внутреннего уровня не отвечает слишком долго.
403 Forbidden
Ошибка 403 обычно указывает на то, что nginx блокирует доступ из-за неправильных прав доступа к файлам или ограничений конфигурации. Убедитесь, что установлены правильные разрешения для корневого каталога веб-сайта, а также проверьте все настройки безопасности в конфигурации nginx.
413 Request Entity Too Large
Когда клиент отправляет запрос с размером тела, превышающим установленный предел, он называется запросом «Entity Too Large». Чтобы разрешить большие запросы, увеличьте директиву client_max_body_size в конфигурации nginx.
404 Not Found
Эта ошибка указывает на то, что запрошенный ресурс не найден. Проверьте наличие ошибок в URL, убедитесь, что файл находится в правильном месте и проверьте наличие правильного корневого каталога в конфигурации nginx.
Определив основную причину каждой ошибки и соответствующим образом настроив параметры nginx или сервера, вы сможете быстро решить эти распространенные проблемы.
is*hosting придет на помощь в любое время дня и ночи. Задавайте вопросы, обращайтесь с трудностями — мы ответим.
10 лучших практик настройки nginx для оптимальной производительности
В этом разделе представлены лучшие практики настройки nginx для оптимальной производительности. Следуя этим рекомендациям, вы можете настроить nginx для эффективной обработки большего количества трафика, сокращения задержек и обеспечения высокой производительности даже при большой нагрузке.
- Грамотно используйте рабочие процессы и соединения.
Чтобы обеспечить эффективную обработку запросов, настройте worker_processes и worker_connections на основе ресурсов сервера и объема трафика. Для worker_processes обычно указывается количество ядер ЦП.
- Включите сжатие Gzip.
Сжимайте текстовые файлы (HTML, CSS и JavaScript) с помощью Gzip, чтобы сократить использование полосы пропyскания и время загрузки.
- Обслуживайте статические файлы.
Чтобы ускорить доставку, используйте nginx для прямого управления статического контента (изображения, CSS и JavaScript). Для эффективной обработки статических файлов и снижения нагрузки на сервер используйте директиву location.
- Оптимизируйте настройки буфера и кэша.
Включите директивы proxy_cache и fastcgi_cache nginx для кэширования динамического и статического контента, чтобы снизить нагрузку на бэкэнд и улучшить время отклика. Установите правила истечения срока действия кэша, чтобы они были максимально эффективными и свежими.
- Используйте Keep-Alive Connections.
Включите keepalive_timeout для постоянного соединения между клиентом и сервером. Это поможет сократить накладные расходы и повысить производительность для нескольких запросов.
- Балансируйте нагрузку.
Чтобы повысить масштабируемость и надежность, используйте встроенные функции балансировки нагрузки nginx для распределения трафика между несколькими внутренними серверами
- Включите HTTP/2.
Чтобы повысить производительность, особенно для обслуживания статического контента, активируйте HTTP/2, уменьшив задержки и разрешив мультиплексирование запросов.
- Минимизируйте ведение журнала.
Чтобы сократить накладные расходы ввода-вывода, установите соответствующие уровни ведения журнала и избегайте чрезмерного ведения журнала, особенно в производственных условиях.
- Проводите регулярный мониторинг nginx.
Для отслеживания производительности сервера, частоты ошибок и шаблонов трафика используйте инструменты мониторинга, такие как Nginx Amplify или Prometheus. Регулярный мониторинг улучшает производительность сервера и находит слабые места.
- Ограничьте частоту запросов.
Используйте ограничение частоты, чтобы обеспечить справедливое распределение ресурсов сервера между клиентами и предотвратить злоупотребления.
Следуя этим рекомендациям, вы можете настроить nginx для эффективной обработки большего количества трафика, сокращения задержек и обеспечения высокой производительности даже при большой нагрузке.
Заключение
Настройка nginx на вашем собственном сервере обеспечивает надежную безопасность и оптимальную производительность. Вы можете максимизировать как скорость, так и безопасность, следуя лучшим практикам, таким как эффективная балансировка нагрузки, правильные конфигурации SSL и эффективное обслуживание статического контента. Регулярное обслуживание и обновления гарантируют совместимость nginx с новыми функциями и исправлениями безопасности. Будущие тенденции, такие как поддержка HTTP/3 и интеграция с облачными архитектурами, расширят возможности nginx, сделав его важным инструментом для современного управления веб-серверами.
Выделенный сервер
Бесперебойная работа, высокая производительность и удобная настройка — все для вас.
От $70.00/месяц