Как пользоваться
- Введите домен и выберите тип сайта — адрес upstream для reverse proxy или корень сайта для остальных вариантов.
- При необходимости включите HTTPS, HTTP/2, HSTS, редирект www, gzip, кэширование и заголовки безопасности.
- Скопируйте или скачайте конфигурацию в /etc/nginx/conf.d/, выполните nginx -t и перезагрузите nginx.
Описание параметров
- Reverse proxy
- Пересылает запросы на upstream и передаёт Host, X-Real-IP, X-Forwarded-For и X-Forwarded-Proto, чтобы приложение видело реальный IP и схему посетителя.
- Одностраничное приложение
- Неизвестные пути возвращают index.html, поэтому роутеры в режиме history (React Router, Vue Router) не дают 404 после перезагрузки.
- HTTPS
- Пути сертификатов соответствуют значениям certbot (Let's Encrypt) по умолчанию, а HTTP получает редирект 301 на HTTPS. HTTP/2 использует форму listen 443 ssl http2, работающую во всех версиях nginx.
- HSTS
- Сообщает браузерам использовать только HTTPS для домена и всех его поддоменов в течение года. Сначала убедитесь, что каждый поддомен поддерживает HTTPS, иначе он станет недоступен.
Пример: одностраничное приложение с HTTPS и www
Для домена example.com при включённых параметрах «Одностраничное приложение», HTTPS, HTTP/2 и «Также отвечать на www. и перенаправлять на него» (а «Сжатие Gzip», «Заголовки безопасности» и «Долгое кеширование статических файлов» выключены для краткости) генератор записывает три блока server:
- Порт 80 отвечает на оба имени, сохраняет доступность
/.well-known/acme-challenge/для продления сертификата и отправляет всё остальное наhttps://example.com$request_uriс кодом 301. - Порт 443 для
www.example.comиспользует тот же сертификат и возвращает 301 на домен без www. - Порт 443 для
example.comобслуживает сайт:
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
Оба блока HTTPS указывают на /etc/letsencrypt/live/example.com/fullchain.pem и privkey.pem, разрешают TLS 1.2 и 1.3 и используют общий кеш сеансов размером 10 МБ с тайм-аутом сеанса в один день. Именно строка try_files делает так, что при перезагрузке страницы на клиентском маршруте, например /settings, возвращается приложение, а не ошибка 404.
Часто задаваемые вопросы
Почему nginx -t предупреждает, что параметр http2 устарел?
Начиная с nginx 1.25.1 предпочтителен отдельный директивный параметр http2 on;, но версия 1.24, поставляемая с Ubuntu 24.04 и другими системами, его не понимает. Форма listen ... http2 работает везде; новые версии лишь выводят предупреждение.
Должен ли сертификат включать www?
Да, если включён редирект www. Запросите оба имени, например certbot -d example.com -d www.example.com.
Загрузка завершается ошибкой 413 Request Entity Too Large?
По умолчанию nginx разрешает тело запроса размером 1 MB. Задайте «Максимальный размер загрузки» нужного размера, например 100.
WebSocket через прокси не работает?
Прокси должен передавать заголовки Upgrade и Connection. Включение поддержки WebSocket добавляет их и увеличивает тайм-аут чтения до часа.
Конфиденциальность
Этот инструмент работает полностью в браузере. Ваши файлы и текст обрабатываются на вашем устройстве и никогда не загружаются на наши серверы.