Nginx на VPS: зачем нужен и как настроить веб-сервер

Когда сайт переезжает на VPS, встаёт вопрос: что именно принимает запросы из интернета и отдаёт страницы? На хостинге это работало само, а на своём сервере веб-сервер нужно поставить и настроить. Самый распространённый выбор - Nginx: быстрый, экономичный, стоит почти на каждом втором сайте в интернете.

Разберём, что такое Nginx, зачем он на сервере, как его установить, поднять сайт, использовать как reverse proxy для приложений и выпустить бесплатный SSL.

Что такое Nginx и зачем он нужен

Nginx - это веб-сервер: программа, которая принимает запросы браузеров и отдаёт им содержимое сайта. Плюс к этому он умеет работать как прослойка перед приложением, распределять нагрузку и раздавать статику.

Что делает Nginx на сервере:

  • Принимает запросы из интернета и направляет их куда нужно;
  • Отдаёт статику (картинки, стили, скрипты) быстро и экономично;
  • Работает как reverse proxy - прослойка перед приложением на Node, Python, любым другим;
  • Терминирует SSL - обслуживает HTTPS-соединения;
  • Распределяет нагрузку между несколькими копиями приложения.

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

Nginx или Apache

Второй популярный веб-сервер - Apache. Коротко о разнице:

NginxApache
Раздача статикиБыстрееМедленнее
Много соединенийДержит экономичноТребовательнее к ресурсам
Гибкость на уровне папкиНет .htaccessЕсть .htaccess
Типичная рольФронт, reverse proxy, статикаОбработка динамики, legacy-проекты

На практике часто ставят Nginx впереди как быстрый фронт, а обработку динамики отдают приложению за ним. Для нового проекта Nginx - выбор по умолчанию.

Установка Nginx

Сначала базовая подготовка сервера - обновление и безопасность, как в статье настройка VPS с нуля. Затем ставим Nginx из репозитория:

sudo apt update
sudo apt install nginx

Проверяем, что он запустился:

sudo systemctl status nginx

Строка active (running) означает, что Nginx работает. Откройте IP-адрес сервера в браузере - увидите стартовую страницу Nginx. Значит веб-сервер принимает запросы.

Не забудьте открыть порты в файрволе, если он включён:

sudo ufw allow 'Nginx Full'

Как поднять сайт

как Nginx обрабатывает запрос - статика напрямую, динамика через приложение.
как Nginx обрабатывает запрос - статика напрямую, динамика через приложение.

Каждый сайт на Nginx описывается конфигом в папке /etc/nginx/sites-available/. Создаём файл для своего сайта:

sudo nano /etc/nginx/sites-available/mysite

Минимальный конфиг для статического сайта или готовой сборки:

server {
    listen 80;
    server_name mysite.ru www.mysite.ru;
    root /var/www/mysite;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Что здесь что:

СтрокаЗначение
listen 80Слушать порт 80 (HTTP)
server_nameДомены сайта
rootПапка с файлами сайта
location /Как обрабатывать запросы

Включаем сайт (создаём ссылку в папке активных) и проверяем конфиг на ошибки:

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
sudo nginx -t

Если nginx -t сказал syntax is ok и test is successful - применяем:

sudo systemctl reload nginx

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

Nginx как reverse proxy

Если у вас не статический сайт, а приложение (Node.js, Python, любое другое), которое само слушает какой-то порт, Nginx ставят перед ним. Он принимает запросы на 80 и 443 портах и передаёт приложению внутрь.

Конфиг для приложения, работающего на порту 3000:

server {
    listen 80;
    server_name app.mysite.ru;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Строка proxy_pass направляет все запросы приложению. Так наружу торчит только Nginx на стандартных портах, а приложение остаётся внутри и недоступно из интернета напрямую. Это и удобнее, и безопаснее.

Бесплатный SSL

Сайту нужен HTTPS. Бесплатный сертификат Let's Encrypt ставится инструментом certbot, который сам правит конфиг Nginx и настраивает автопродление:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d mysite.ru -d www.mysite.ru

Certbot выпустит сертификат, добавит его в конфиг и настроит редирект с HTTP на HTTPS. Сертификат продлевается автоматически. Отдельно платить за SSL для обычного сайта не нужно.

Частые ошибки

Забыли nginx -t перед перезагрузкой. Ошибка в конфиге уронит веб-сервер целиком. Всегда проверяйте конфиг перед reload.

Не открыли порты в файрволе. Nginx работает, а снаружи сайт недоступен. Нужно разрешить порты 80 и 443.

Пробросили приложение наружу мимо Nginx. Приложение доступно из интернета напрямую по своему порту. Его прячут за Nginx, наружу оставляют только веб-сервер.

Забыли про SSL. Сайт без HTTPS браузеры помечают небезопасным. Certbot ставит бесплатный сертификат сразу.

Правят конфиг в sites-enabled вместо sites-available. Конфиги пишут в sites-available и включают ссылкой в sites-enabled. Так проще управлять активными сайтами.

Частые вопросы

Nginx или Apache - что выбрать? Для нового проекта - Nginx: быстрее раздаёт статику и экономичнее держит много соединений. Apache берут под legacy-проекты или когда нужны настройки на уровне папки через .htaccess.

Нужен ли Nginx, если стоит панель управления? Панель обычно сама ставит и настраивает веб-сервер (часто Nginx или Apache) через интерфейс. Тогда конфиги руками писать не нужно - см. панели управления сервером.

Что такое reverse proxy простыми словами? Это прослойка перед приложением. Nginx принимает запросы из интернета и передаёт их приложению внутри сервера, а ответ отдаёт обратно. Приложение при этом наружу не торчит.

Как понять, что в конфиге ошибка? Команда nginx -t проверяет конфиг и показывает, где ошибка. Её запускают всегда перед перезагрузкой Nginx, чтобы не уронить работающие сайты.

Сколько сайтов потянет один Nginx? Nginx сам по себе очень лёгкий и обслуживает десятки сайтов на скромном сервере. Ограничение не в нём, а в суммарной нагрузке сайтов и приложений за ним.

Обязательно ли настраивать Nginx руками? Нет. Через командную строку - гибче, но можно взять VPS с панелью, где сайты и SSL настраиваются мышкой. Ручная настройка нужна тем, кто хочет полный контроль.


Разворачиваете сайт на своём сервере? VPS на NVMe с чистым Linux или панелью управления - ставьте Nginx сами или настраивайте сайты через интерфейс. Активация за 3 минуты, root-доступ сразу. Первые 7 дней - тестовый период с возвратом средств.

Что дальше