6.2 KiB
Executable File
CORS Configuration Guide
🎯 Как добавить новый домен для клиента
Шаг 1: Добавить домен в production.env
Откройте файл GuacamoleRemoteAccess/production.env и добавьте ваш домен в переменную ALLOWED_ORIGINS:
# CORS Settings
# ✅ Добавляйте домены через запятую БЕЗ пробелов
ALLOWED_ORIGINS=https://mc.exbytestudios.com,https://test.exbytestudios.com,https://YOUR_NEW_DOMAIN.com,http://localhost:5173
Важно:
- Домены разделяются запятой БЕЗ пробелов
- Указывайте полный протокол (
https://илиhttp://) - Не добавляйте
/в конце домена - Для production используйте только HTTPS домены (кроме localhost для разработки)
Шаг 2: Перезапустить API контейнер
После изменения production.env необходимо перезапустить API контейнер:
cd GuacamoleRemoteAccess
docker-compose restart api
Или полная пересборка (если изменяли Dockerfile):
docker-compose up -d --force-recreate api
Шаг 3: Проверить изменения
Откройте браузер и проверьте в DevTools → Network → любой API запрос → Headers:
Access-Control-Allow-Origin: https://YOUR_NEW_DOMAIN.com
Access-Control-Allow-Credentials: true
📋 Текущая конфигурация
Nginx роутинг (CORS включен автоматически)
Следующие endpoints имеют CORS headers и работают БЕЗ префикса /api/:
✅ /auth/* - Аутентификация (login, logout, key-exchange)
✅ /connect - Создание подключений
✅ /connections/* - Управление подключениями
✅ /bulk/* - Массовые операции
✅ /health/* - Health checks
✅ /machines/* - Проверка доступности машин
Следующие endpoints работают ЧЕРЕЗ префикс /api/:
✅ /api/machines/saved/* - Сохраненные машины (CRUD)
✅ /api/* - Остальные API endpoints (если добавите новые)
Клиент (MachineControlCenter)
В файле MachineControlCenter/.env укажите:
VITE_API_URL=https://mc.exbytestudios.com
НЕ указывайте IP адрес! Используйте доменное имя, которое добавили в ALLOWED_ORIGINS.
🔧 Troubleshooting
Проблема: "blocked by CORS policy"
Причина: Домен клиента не добавлен в ALLOWED_ORIGINS
Решение:
- Убедитесь, что домен указан в
production.env - Перезапустите API контейнер:
docker-compose restart api - Проверьте логи:
docker-compose logs api | grep CORS
Проблема: "No 'Access-Control-Allow-Origin' header"
Причина: Запрос идет на endpoint, который не включен в nginx конфигурацию
Решение:
- Проверьте URL запроса в DevTools → Network
- Если endpoint новый, добавьте его в regex в
nginx/mc.exbytestudios_gate.com:location ~ ^/(auth|connect|connections|bulk|health|machines|YOUR_ENDPOINT)(/|$) { - Перезапустите nginx:
docker-compose restart nginx
Проблема: Работает с localhost, но не с доменом
Причина: В .env клиента указан localhost вместо домена
Решение:
# ❌ Неправильно
VITE_API_URL=http://localhost:8000
# ✅ Правильно
VITE_API_URL=https://mc.exbytestudios.com
🛡️ Security Best Practices
- Не используйте
*(wildcard) вALLOWED_ORIGINS- это небезопасно - В production указывайте только HTTPS домены (кроме localhost для разработки)
- Не добавляйте публичные домены которые вы не контролируете
- Регулярно проверяйте список доменов и удаляйте неиспользуемые
📝 Примеры конфигурации
Development (локальная разработка)
ALLOWED_ORIGINS=https://mc.exbytestudios.com,http://localhost:5173,http://localhost:3000
Staging
ALLOWED_ORIGINS=https://mc.exbytestudios.com,https://staging.exbytestudios.com
Production
ALLOWED_ORIGINS=https://mc.exbytestudios.com,https://app.exbytestudios.com
✅ Checklist
После добавления нового домена:
- Домен добавлен в
production.env→ALLOWED_ORIGINS - API контейнер перезапущен:
docker-compose restart api - В клиенте
.envуказан правильныйVITE_API_URL - Nginx перезапущен (если менялась конфигурация):
docker-compose restart nginx - Проверено в браузере DevTools → Network → Headers
- CORS headers присутствуют:
Access-Control-Allow-Origin,Access-Control-Allow-Credentials
📞 Support
Если после выполнения всех шагов CORS все еще не работает:
- Проверьте логи API:
docker-compose logs api | tail -100 - Проверьте логи nginx:
docker-compose logs nginx | tail -100 - Убедитесь, что домен написан БЕЗ ошибок (без пробелов, с правильным протоколом)
- Попробуйте очистить кеш браузера (Ctrl+Shift+Delete)