nakama/CROSS_DOMAIN_SETUP.md

3.4 KiB
Raw Permalink Blame History

🌐 Настройка для разных доменов (Frontend и API)

Ситуация

  • Frontend: nakama.glpshchn.ru (старый домен)
  • API: nkm.guru (новый домен)

Что нужно сделать

1. Обновить CORS на backend

В файле .env на сервере добавьте оба домена:

# Разрешить запросы с обоих доменов
CORS_ORIGIN=https://nakama.glpshchn.ru,https://nkm.guru

Или если хотите разрешить все домены (менее безопасно, но проще):

CORS_ORIGIN=*

2. Обновить Content Security Policy

В backend/middleware/security.js нужно разрешить подключения к новому API домену:

connectSrc: ["'self'", "https://api.telegram.org", "https://e621.net", "https://gelbooru.com", "https://nkm.guru"],

3. Пересобрать frontend с новым API URL

cd /var/www/nakama/frontend

# Установить переменную окружения для сборки
export VITE_API_URL=https://nkm.guru/api

# Пересобрать frontend
npm run build

# Перезапустить nginx
sudo systemctl reload nginx

4. Перезапустить backend

# Если используете PM2:
pm2 restart nakama-backend

# Или если используете Docker:
docker-compose restart backend

🔍 Проверка

После настройки проверьте:

  1. CORS работает:

    curl -H "Origin: https://nakama.glpshchn.ru" \
         -H "Access-Control-Request-Method: GET" \
         -H "Access-Control-Request-Headers: Content-Type" \
         -X OPTIONS \
         https://nkm.guru/api/health
    
  2. В консоли браузера (F12 → Network):

    • Запросы должны идти на: https://nkm.guru/api/...
    • Headers должны содержать: Access-Control-Allow-Origin: https://nakama.glpshchn.ru

⚠️ Важно

  1. Cookies: Если используете cookies для авторизации, убедитесь, что:

    • withCredentials: true в axios (уже настроено)
    • credentials: true в CORS (уже настроено)
    • Cookies должны быть с правильным SameSite и Secure флагами
  2. SSL сертификаты: Оба домена должны иметь валидные SSL сертификаты

  3. Telegram Mini App: Если используете Telegram Mini App, убедитесь, что домен frontend добавлен в настройки бота

🔄 Альтернативное решение: Проксирование через nginx

Если не хотите настраивать CORS, можно настроить проксирование на старом домене:

# В nginx конфигурации для nakama.glpshchn.ru
location /api {
    proxy_pass https://nkm.guru/api;
    proxy_set_header Host nkm.guru;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Тогда frontend будет использовать относительный путь /api, а nginx будет проксировать запросы на новый домен.