Nginx на VPS: зачем нужен и как настроить веб-сервер
Когда сайт переезжает на VPS, встаёт вопрос: что именно принимает запросы из интернета и отдаёт страницы? На хостинге это работало само, а на своём сервере веб-сервер нужно поставить и настроить. Самый распространённый выбор - Nginx: быстрый, экономичный, стоит почти на каждом втором сайте в интернете.
Разберём, что такое Nginx, зачем он на сервере, как его установить, поднять сайт, использовать как reverse proxy для приложений и выпустить бесплатный SSL.
Что такое Nginx и зачем он нужен
Nginx - это веб-сервер: программа, которая принимает запросы браузеров и отдаёт им содержимое сайта. Плюс к этому он умеет работать как прослойка перед приложением, распределять нагрузку и раздавать статику.
Что делает Nginx на сервере:
- Принимает запросы из интернета и направляет их куда нужно;
- Отдаёт статику (картинки, стили, скрипты) быстро и экономично;
- Работает как reverse proxy - прослойка перед приложением на Node, Python, любым другим;
- Терминирует SSL - обслуживает HTTPS-соединения;
- Распределяет нагрузку между несколькими копиями приложения.
Nginx выбирают за скорость и экономичность: он держит тысячи одновременных соединений на скромных ресурсах. Это делает его стандартом и для обычных сайтов, и для приложений.
Nginx или Apache
Второй популярный веб-сервер - Apache. Коротко о разнице:
| Nginx | Apache | |
|---|---|---|
| Раздача статики | Быстрее | Медленнее |
| Много соединений | Держит экономично | Требовательнее к ресурсам |
| Гибкость на уровне папки | Нет .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 описывается конфигом в папке /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.ruCertbot выпустит сертификат, добавит его в конфиг и настроит редирект с 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 дней - тестовый период с возвратом средств.
Что дальше
- Тарифы VPS и VDS в Москве и Казани: NVMe, защита от DDoS, активация за 3 минуты
- Аренда VPS в Европе с оплатой в рублях: серверы в Амстердаме, карты МИР, счета для юрлиц РФ