Nginx
Добавление сайта#
Создаём конфиг.
server {
server_name giga-chill.ru www.giga-chill.ru;
listen 80;
# Все запросы к /api/* перенаправляются на бэкенд
location /api/ {
proxy_pass http://127.0.0.1:8081/;
include proxy_params;
}
# Спецификация API в формате OpenAPI
location = /api/openapi.yml {
alias /var/www/giga-chill/openapi.yml;
types { text/yaml yml yaml; }
charset utf-8;
charset_types text/yaml application/yaml text/x-yaml application/x-yaml;
}
# Документация API в Swagger UI
location = /api/swagger { return 301 /api/swagger/; }
location /api/swagger/ {
proxy_pass http://127.0.0.1:1240/;
include proxy_params;
}
# Документация API в Redocly
location = /api/redoc { return 301 /api/redoc/; }
location /api/redoc/ {
alias /var/www/giga-chill/redoc/;
index index.html;
}
# Все остальные запросы направляются на фронтенд
location / {
proxy_pass http://127.0.0.1:3000;
include proxy_params;
}
}
Активируем конфиг.
sudo ln -s /etc/nginx/sites-available/new-site.conf /etc/nginx/sites-enabled/
sudo systemctl reload nginx.service
Конфиг можно проверить на наличие синтаксических ошибок.
open() "/etc/nginx/proxy_params" failed (2: No such file or directory)
Обычно файл /etc/nginx/proxy_params
создаётся автоматически при установке Nginx, однако его несложно добавить самостоятельно, если по каким-то причинам он не был создан или был удалён.
Просмотр логов#
По умолчанию логи находятся в access.log
и error.log
файлах.
SSL-сертификат с certbot#
Актуальная версия Python
Обычно системный Python
достаточно старый. Для установки certbot
может потребоваться более новая версия. Минимальные требования можно узнать на pypi.
sudo apt update
sudo add-apt-repository ppa:deadsnakes/ppa
# Вместо 3.1x нужно указать актуальную версию Python
sudo apt install python3.1x python3.1x-venv
Теперь вместо python3
можно использовать python3.1x
.
SSL-сертификат получается и устанавливается с помощью certbot. На их сайте есть подробная пошаговая инструкция о том, как правильно его установить, получить сертификаты и включить их автообновление.
Установка вкратце
# Установили certbot в venv
# Вместо 3.1x нужно указать актуальную версию Python
sudo python3.x -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
sudo /opt/certbot/bin/pip install certbot certbot-nginx
# Добавили в PATH
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
# Автообновление сертификатов
echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
Отключение UFW
Может потребоваться временно отключить UFW.
Несколько полезных команд.
# Получить сертификат для определённого домена. Предварительно нужно
# настроить конфиг nginx для этого домена.
sudo certbot --nginx -d example.com -d www.example.com
# Список сертификатов со сроками их жизни
sudo certbot certificates
# Удалить сертификат (команда предложит выбор)
sudo certbot delete