Конфигурация для внешнего Traefik

This commit is contained in:
DeepAgent
2025-10-25 13:32:33 +00:00
parent 9f77a9c773
commit 65065dce94
7 changed files with 582 additions and 242 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,9 +1,17 @@
# Домен вашего сайта
DOMAIN=global-it24.example.com
DOMAIN=video.mscsrv.ru
# URL сайта (используется для метатегов и canonical URL)
NEXT_PUBLIC_SITE_URL=https://global-it24.example.com
NEXT_PUBLIC_SITE_URL=https://video.mscsrv.ru
# IP адреса
# Traefik хост
TRAEFIK_HOST=192.168.50.59
# IP этого сервера (где запущен контейнер)
# Укажите IP текущего хоста в локальной сети
APP_HOST_IP=192.168.50.X
# Для production окружения
NODE_ENV=production

View File

@@ -1,122 +1,55 @@
# Инструкция по развертыванию Global-IT24 на Ubuntu с Traefik
# Инструкция по развертыванию Global-IT24 на Ubuntu с внешним Traefik
## Архитектура
- **Traefik:** 192.168.50.59 (внешний хост)
- **Приложение:** Ваш сервер (докер контейнер на порту 3000)
- **Домен:** video.mscsrv.ru
## Предварительные требования
1. Ubuntu Server (20.04 или новее)
2. Docker и Docker Compose установлены
3. Traefik настроен как reverse proxy
4. Домен направлен на ваш сервер
3. Traefik уже настроен на хосте 192.168.50.59
4. Домен video.mscsrv.ru направлен на 192.168.50.59
5. Сетевая связность между хостами (порт 3000 доступен из 192.168.50.59)
## Шаг 1: Настройка Traefik
## Шаг 1: Подготовка сервера приложения
Если Traefik еще не настроен, создайте базовую конфигурацию:
### 1.1 Установка Docker (если не установлен)
```bash
# Создайте сеть для Traefik
docker network create traefik-public
# Обновление системы
sudo apt update && sudo apt upgrade -y
# Создайте директорию для Traefik
mkdir -p ~/traefik
cd ~/traefik
# Установка зависимостей
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Добавление репозитория Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Установка Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Добавление пользователя в группу docker
sudo usermod -aG docker $USER
newgrp docker
# Проверка установки
docker --version
docker compose version
```
Создайте `docker-compose.yml` для Traefik:
```yaml
version: '3.8'
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- traefik-public
ports:
- "80:80"
- "443:443"
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./acme.json:/acme.json
- ./config.yml:/config.yml:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=web"
networks:
traefik-public:
external: true
```
Создайте `traefik.yml`:
```yaml
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
http:
tls:
certResolver: letsencrypt
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: traefik-public
file:
filename: /config.yml
certificatesResolvers:
letsencrypt:
acme:
email: your-email@example.com
storage: acme.json
httpChallenge:
entryPoint: web
```
Создайте файл для SSL сертификатов:
### 1.2 Подготовка проекта
```bash
touch acme.json
chmod 600 acme.json
```
# Перейдите в директорию проекта
cd /path/to/global_it24_landing
Запустите Traefik:
```bash
docker-compose up -d
```
## Шаг 2: Развертывание Global-IT24
1. **Клонируйте или скопируйте проект на сервер:**
```bash
cd /home/your-user
# Скопируйте папку global_it24_landing на сервер
```
2. **Создайте .env файл:**
```bash
cd global_it24_landing
# Создайте .env файл
cp .env.example .env
nano .env
```
@@ -124,66 +57,373 @@ nano .env
Отредактируйте `.env`:
```env
DOMAIN=ваш-домен.ru
NEXT_PUBLIC_SITE_URL=https://ваш-домен.ru
DOMAIN=video.mscsrv.ru
NEXT_PUBLIC_SITE_URL=https://video.mscsrv.ru
TRAEFIK_HOST=192.168.50.59
APP_HOST_IP=192.168.50.X # Замените на IP текущего сервера
NODE_ENV=production
```
3. **Соберите и запустите контейнер:**
### 1.3 Проверка сетевой доступности
```bash
# Сборка образа
docker-compose build
# Узнайте IP текущего хоста
hostname -I
# Запуск контейнера
docker-compose up -d
# Проверка логов
docker-compose logs -f
# С хоста Traefik (192.168.50.59) должен быть доступ к этому IP:3000
# Проверьте после запуска контейнера
```
## Шаг 3: Проверка работы
## Шаг 2: Запуск приложения
1. Откройте браузер и перейдите на ваш домен
2. Проверьте, что HTTPS работает корректно
3. Проверьте мобильную версию сайта
### 2.1 Сборка и запуск контейнера
```bash
# Автоматическое развертывание
./deploy.sh
# Или вручную:
docker compose build --no-cache
docker compose up -d
```
### 2.2 Проверка работы контейнера
```bash
# Проверка статуса
./status.sh
# или
docker compose ps
# Просмотр логов
./logs.sh
# или
docker compose logs -f
# Проверка доступности локально
curl http://localhost:3000
```
### 2.3 Проверка доступности из сети
```bash
# С хоста Traefik (192.168.50.59) выполните:
curl http://192.168.50.X:3000
# Замените 192.168.50.X на IP вашего сервера
```
## Шаг 3: Настройка Traefik (на хосте 192.168.50.59)
### 3.1 Создание конфигурации
На хосте Traefik создайте файл конфигурации для file provider:
```bash
# Перейдите в директорию конфигурации Traefik
cd /path/to/traefik/config
# Создайте файл конфигурации
nano global-it24.yml
```
Скопируйте содержимое из `traefik-config-example.yml`, заменив:
- `192.168.50.X` на реальный IP сервера с приложением
### 3.2 Пример конфигурации
```yaml
http:
routers:
global-it24:
rule: "Host(`video.mscsrv.ru`)"
entryPoints:
- web
middlewares:
- redirect-to-https
service: global-it24-service
global-it24-secure:
rule: "Host(`video.mscsrv.ru`)"
entryPoints:
- websecure
middlewares:
- security-headers
- compress
service: global-it24-service
tls:
certResolver: letsencrypt
services:
global-it24-service:
loadBalancer:
servers:
- url: "http://192.168.50.X:3000" # IP сервера приложения
healthCheck:
path: /
interval: 30s
timeout: 10s
middlewares:
redirect-to-https:
redirectScheme:
scheme: https
permanent: true
security-headers:
headers:
customResponseHeaders:
X-Frame-Options: "SAMEORIGIN"
X-Content-Type-Options: "nosniff"
X-XSS-Protection: "1; mode=block"
sslRedirect: true
stsSeconds: 31536000
compress:
compress: {}
```
### 3.3 Перезагрузка Traefik
```bash
# На хосте Traefik
docker restart traefik
# или
docker compose restart traefik
# Проверка логов Traefik
docker logs traefik -f
```
## Шаг 4: Проверка работы
1. **Локальная проверка:**
```bash
curl -v http://localhost:3000
```
2. **Проверка через Traefik:**
```bash
curl -v http://video.mscsrv.ru
curl -v https://video.mscsrv.ru
```
3. **Проверка в браузере:**
- Откройте https://video.mscsrv.ru
- Проверьте мобильную версию
- Проверьте SSL сертификат
## Команды для управления
```bash
# На сервере приложения:
# Перезапуск контейнера
docker-compose restart
./update.sh
# или
docker compose restart
# Остановка контейнера
docker-compose down
./stop.sh
# или
docker compose down
# Просмотр логов
docker-compose logs -f
# Обновление после изменений
docker-compose down
docker-compose build
docker-compose up -d
./logs.sh
# или
docker compose logs -f
# Проверка статуса
docker-compose ps
./status.sh
# Обновление после изменений
docker compose down
docker compose build --no-cache
docker compose up -d
# Резервное копирование
./backup.sh
```
## Оптимизация производительности
## Оптимизация и безопасность
1. **Включите кэширование в Traefik** (добавьте в labels):
```yaml
- "traefik.http.middlewares.cache-control.headers.customResponseHeaders.Cache-Control=public, max-age=31536000"
### Файрвол на сервере приложения
```bash
# Установка UFW
sudo apt install ufw
# Разрешаем SSH
sudo ufw allow 22/tcp
# Разрешаем порт 3000 ТОЛЬКО с хоста Traefik
sudo ufw allow from 192.168.50.59 to any port 3000 proto tcp
# Включаем файрвол
sudo ufw enable
# Проверка правил
sudo ufw status verbose
```
2. **Настройте компрессию** (добавьте в labels):
```yaml
- "traefik.http.middlewares.compress.compress=true"
- "traefik.http.routers.global-it24-secure.middlewares=compress@docker"
### Мониторинг
```bash
# Использование ресурсов
docker stats global-it24-landing
# Проверка здоровья
docker inspect --format='{{.State.Health.Status}}' global-it24-landing
# Системные ресурсы
htop
```
3. **Ограничьте ресурсы контейнера** (добавьте в docker-compose.yml):
```yaml
### Автоматический перезапуск при сбое
Docker Compose уже настроен с `restart: unless-stopped`, контейнер будет автоматически перезапускаться.
### Логирование
```bash
# Ротация логов Docker
sudo nano /etc/docker/daemon.json
```
Добавьте:
```json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
```
Перезапустите Docker:
```bash
sudo systemctl restart docker
docker compose up -d
```
## Обновление приложения
### Быстрое обновление (без изменения кода)
```bash
./update.sh
```
### Полное обновление (с пересборкой)
```bash
# Остановка
docker compose down
# Обновление кода (git pull или копирование файлов)
# Пересборка и запуск
./deploy.sh
```
## Резервное копирование
### Автоматическое резервное копирование
```bash
# Создание резервной копии
./backup.sh
# Настройка автоматического бэкапа (cron)
crontab -e
```
Добавьте:
```cron
# Резервное копирование каждый день в 3:00
0 3 * * * cd /path/to/global_it24_landing && ./backup.sh >> /var/log/backup-global-it24.log 2>&1
```
### Восстановление из резервной копии
```bash
# Остановка текущего контейнера
docker compose down
# Восстановление из архива
cd /path/to/restore
tar -xzf backup_YYYYMMDD_HHMMSS.tar.gz
# Запуск
cd global_it24_landing
./deploy.sh
```
## Устранение неполадок
### Контейнер не запускается
```bash
# Просмотр логов
docker compose logs global-it24-web
# Проверка конфигурации
docker compose config
# Пересборка с нуля
docker compose down
docker system prune -a
./deploy.sh
```
### Сайт недоступен через Traefik
1. **Проверка доступности приложения локально:**
```bash
curl http://localhost:3000
```
2. **Проверка доступности из сети Traefik:**
```bash
# На хосте Traefik (192.168.50.59)
curl http://192.168.50.X:3000
```
3. **Проверка логов Traefik:**
```bash
# На хосте Traefik
docker logs traefik -f
```
4. **Проверка файрвола:**
```bash
sudo ufw status
# Убедитесь, что порт 3000 открыт для 192.168.50.59
```
5. **Проверка конфигурации Traefik:**
```bash
# Проверьте файл global-it24.yml
# Убедитесь, что IP адрес правильный
```
### Проблемы с SSL
Проверьте на хосте Traefik:
```bash
# Логи Traefik
docker logs traefik | grep -i error
# Проверка сертификатов
ls -la /path/to/acme.json
```
### Высокое использование ресурсов
```bash
# Ограничение ресурсов в docker-compose.yml
# Добавьте в сервис global-it24-web:
deploy:
resources:
limits:
@@ -194,72 +434,58 @@ deploy:
memory: 256M
```
## Резервное копирование
## Сетевая диаграмма
```bash
# Создайте скрипт для бэкапа
cat > backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/global-it24"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
docker-compose exec global-it24-web tar czf - /app > $BACKUP_DIR/backup_$DATE.tar.gz
EOF
chmod +x backup.sh
```
## Мониторинг
```bash
# Проверка использования ресурсов
docker stats global-it24-landing
# Проверка здоровья контейнера
docker inspect --format='{{.State.Health.Status}}' global-it24-landing
```
## Устранение неполадок
### Контейнер не запускается:
```bash
docker-compose logs global-it24-web
```
### Проблемы с SSL:
```bash
docker logs traefik
# Проверьте acme.json
```
### Сайт недоступен:
```bash
# Проверьте, что контейнер работает
docker ps | grep global-it24
# Проверьте сеть
docker network inspect traefik-public
# Проверьте порты
netstat -tulpn | grep -E '80|443'
Internet
[DNS: video.mscsrv.ru] → 192.168.50.59
[Traefik: 192.168.50.59]
↓ (проксирует на)
[App Server: 192.168.50.X:3000]
[Docker Container: global-it24-landing]
```
## Безопасность
1. Регулярно обновляйте Docker образы
2. Используйте файрвол (ufw):
### Рекомендации:
1. **Ограничьте доступ к порту 3000** только с хоста Traefik
2. **Регулярно обновляйте** Docker образы и систему
3. **Используйте сильные пароли** для SSH
4. **Настройте fail2ban** для защиты от брутфорса
5. **Мониторинг логов** на подозрительную активность
### Fail2ban (опционально)
```bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
```
3. Настройте автоматические обновления безопасности:
## Производительность
### Рекомендации:
1. Используйте SSD диски
2. Минимум 2GB RAM для сервера
3. Настройте swap если RAM < 4GB
4. Регулярно очищайте неиспользуемые Docker образы:
```bash
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
docker system prune -a
```
## Контакты для поддержки
При возникновении проблем проверьте логи и документацию Traefik: https://doc.traefik.io/traefik/
При возникновении проблем:
1. Проверьте логи контейнера: `./logs.sh`
2. Проверьте статус: `./status.sh`
3. Проверьте доступность из сети
4. Проверьте конфигурацию Traefik
5. Проверьте файрвол и сетевую связность
Документация Traefik: https://doc.traefik.io/traefik/
Документация Docker: https://docs.docker.com/

64
check-network.sh Executable file
View File

@@ -0,0 +1,64 @@
#!/bin/bash
# Скрипт для проверки сетевой связности с Traefik
source .env 2>/dev/null || true
TRAEFIK_HOST=${TRAEFIK_HOST:-192.168.50.59}
APP_PORT=${APP_PORT:-3000}
echo "🔍 Проверка сетевой связности..."
echo ""
# Получаем IP адреса текущего хоста
echo "📍 IP адреса текущего хоста:"
hostname -I
echo ""
# Проверка доступности локально
echo "🏠 Проверка локального доступа (localhost:${APP_PORT})..."
if curl -s -o /dev/null -w "%{http_code}" http://localhost:${APP_PORT} | grep -q "200"; then
echo "✅ Приложение доступно локально"
else
echo "❌ Приложение НЕ доступно локально"
echo " Проверьте: docker compose ps"
fi
echo ""
# Проверка доступности контейнера
echo "🐳 Статус контейнера:"
docker compose ps 2>/dev/null || echo "⚠️ Docker Compose не запущен"
echo ""
# Проверка порта
echo "🔌 Проверка открытых портов:"
if command -v netstat &> /dev/null; then
netstat -tulpn | grep ${APP_PORT} || echo "⚠️ Порт ${APP_PORT} не прослушивается"
elif command -v ss &> /dev/null; then
ss -tulpn | grep ${APP_PORT} || echo "⚠️ Порт ${APP_PORT} не прослушивается"
fi
echo ""
# Инструкции для проверки с Traefik хоста
echo "📋 Для проверки доступности с хоста Traefik (${TRAEFIK_HOST}):"
echo ""
echo " Выполните на хосте ${TRAEFIK_HOST}:"
echo " curl http://\${APP_HOST_IP}:${APP_PORT}"
echo ""
echo " Где \${APP_HOST_IP} - один из IP адресов выше"
echo ""
# Проверка файрвола
echo "🔥 Проверка файрвола (UFW):"
if command -v ufw &> /dev/null; then
sudo ufw status 2>/dev/null || echo "⚠️ UFW не установлен или требует sudo"
else
echo "⚠️ UFW не установлен"
fi
echo ""
echo "💡 Рекомендации:"
echo " 1. Убедитесь, что порт ${APP_PORT} открыт для ${TRAEFIK_HOST}"
echo " 2. Проверьте файрвол: sudo ufw allow from ${TRAEFIK_HOST} to any port ${APP_PORT}"
echo " 3. Используйте один из IP адресов выше в конфигурации Traefik"

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# Скрипт для быстрого развертывания Global-IT24 на Ubuntu с Traefik
# Скрипт для быстрого развертывания Global-IT24 на Ubuntu с внешним Traefik
set -e
@@ -11,47 +11,56 @@ echo "🚀 Развертывание Global-IT24..."
if [ ! -f .env ]; then
echo "⚠️ Файл .env не найден. Создаю из .env.example..."
cp .env.example .env
echo "📝 Отредактируйте файл .env и запустите скрипт снова."
echo "📝 Отредактируйте файл .env (укажите APP_HOST_IP) и запустите скрипт снова."
exit 1
fi
# Загрузка переменных окружения
source .env
# Проверка наличия сети traefik-public
if ! docker network inspect traefik-public >/dev/null 2>&1; then
echo "📡 Создаю сеть traefik-public..."
docker network create traefik-public
# Проверка APP_HOST_IP
if [ -z "$APP_HOST_IP" ] || [ "$APP_HOST_IP" = "192.168.50.X" ]; then
echo "⚠️ Пожалуйста, укажите APP_HOST_IP в файле .env"
echo "📝 Текущий IP адрес сервера:"
hostname -I
exit 1
fi
# Остановка предыдущей версии
echo "🛑 Остановка предыдущей версии..."
docker-compose down 2>/dev/null || true
docker compose down 2>/dev/null || true
# Сборка нового образа
echo "🔨 Сборка Docker образа..."
docker-compose build --no-cache
docker compose build --no-cache
# Запуск контейнера
echo "▶️ Запуск контейнера..."
docker-compose up -d
docker compose up -d
# Ожидание готовности
echo "⏳ Ожидание готовности сервиса..."
sleep 10
# Проверка статуса
if docker-compose ps | grep -q "Up"; then
if docker compose ps | grep -q "Up"; then
echo "✅ Развертывание успешно завершено!"
echo "🌐 Сайт доступен по адресу: ${NEXT_PUBLIC_SITE_URL}"
echo ""
echo "📊 Статус контейнера:"
docker-compose ps
docker compose ps
echo ""
echo "📝 Для просмотра логов используйте: docker-compose logs -f"
echo "🌐 Сайт будет доступен по адресу: ${NEXT_PUBLIC_SITE_URL}"
echo " после настройки Traefik на хосте ${TRAEFIK_HOST}"
echo ""
echo "🔧 Настройте Traefik (см. traefik-config-example.yml):"
echo " - IP приложения: ${APP_HOST_IP}:3000"
echo " - Домен: ${DOMAIN}"
echo ""
echo "📝 Для просмотра логов используйте: ./logs.sh"
echo "🧪 Локальная проверка: curl http://localhost:3000"
else
echo "❌ Ошибка при запуске контейнера!"
echo "📝 Логи:"
docker-compose logs
docker compose logs
exit 1
fi

View File

@@ -7,41 +7,16 @@ services:
context: .
dockerfile: Dockerfile
args:
NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:-https://global-it24.local}
NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:-https://video.mscsrv.ru}
container_name: global-it24-landing
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL:-https://global-it24.local}
networks:
- traefik-public
labels:
# Включаем Traefik для этого контейнера
- "traefik.enable=true"
# Настройка HTTP
- "traefik.http.routers.global-it24.rule=Host(`${DOMAIN:-global-it24.local}`)"
- "traefik.http.routers.global-it24.entrypoints=web"
- "traefik.http.routers.global-it24.middlewares=redirect-to-https@docker"
# Настройка HTTPS
- "traefik.http.routers.global-it24-secure.rule=Host(`${DOMAIN:-global-it24.local}`)"
- "traefik.http.routers.global-it24-secure.entrypoints=websecure"
- "traefik.http.routers.global-it24-secure.tls=true"
- "traefik.http.routers.global-it24-secure.tls.certresolver=letsencrypt"
# Middleware для редиректа HTTP -> HTTPS
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"
# Указываем порт сервиса
- "traefik.http.services.global-it24.loadbalancer.server.port=3000"
# Middleware для заголовков безопасности
- "traefik.http.middlewares.security-headers.headers.customResponseHeaders.X-Frame-Options=SAMEORIGIN"
- "traefik.http.middlewares.security-headers.headers.customResponseHeaders.X-Content-Type-Options=nosniff"
- "traefik.http.middlewares.security-headers.headers.customResponseHeaders.X-XSS-Protection=1; mode=block"
- "traefik.http.routers.global-it24-secure.middlewares=security-headers@docker"
- NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL:-https://video.mscsrv.ru}
- PORT=3000
- HOSTNAME=0.0.0.0
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/"]
interval: 30s
@@ -49,6 +24,5 @@ services:
retries: 3
start_period: 40s
networks:
traefik-public:
external: true
# Для работы с внешним Traefik не требуется сеть
# Traefik будет обращаться к контейнеру по IP хоста на порту 3000

View File

@@ -0,0 +1,59 @@
# Пример конфигурации для Traefik File Provider
# Этот файл нужно добавить в вашу конфигурацию Traefik на хосте 192.168.50.59
http:
routers:
global-it24:
rule: "Host(`video.mscsrv.ru`)"
entryPoints:
- web
middlewares:
- redirect-to-https
service: global-it24-service
global-it24-secure:
rule: "Host(`video.mscsrv.ru`)"
entryPoints:
- websecure
middlewares:
- security-headers
- compress
service: global-it24-service
tls:
certResolver: letsencrypt
# Или укажите путь к сертификатам:
# certFile: /path/to/cert.pem
# keyFile: /path/to/key.pem
services:
global-it24-service:
loadBalancer:
servers:
# Замените 192.168.50.X на реальный IP хоста, где запущен контейнер
- url: "http://192.168.50.X:3000"
healthCheck:
path: /
interval: 30s
timeout: 10s
middlewares:
redirect-to-https:
redirectScheme:
scheme: https
permanent: true
security-headers:
headers:
customResponseHeaders:
X-Frame-Options: "SAMEORIGIN"
X-Content-Type-Options: "nosniff"
X-XSS-Protection: "1; mode=block"
Referrer-Policy: "strict-origin-when-cross-origin"
sslRedirect: true
stsSeconds: 31536000
stsIncludeSubdomains: true
stsPreload: true
compress:
compress: {}