nakama/PROXY_INFO.md

6.1 KiB
Raw Blame History

🌍 Проксирование API для доступа из РФ

Обзор

NakamaSpace автоматически проксирует все запросы к внешним API (e621 и gelbooru) через ваш сервер. Это обеспечивает доступность контента для пользователей из РФ, где эти ресурсы могут быть заблокированы.

Как это работает

1. API запросы

Все запросы к e621 и gelbooru выполняются с вашего сервера, а не напрямую от клиента:

Клиент → Ваш сервер → e621/gelbooru API → Ваш сервер → Клиент

Эндпоинты:

  • /api/search/furry - поиск в e621
  • /api/search/anime - поиск в gelbooru
  • /api/search/furry/tags - автокомплит тегов e621
  • /api/search/anime/tags - автокомплит тегов gelbooru

2. Проксирование изображений

URL изображений автоматически конвертируются в прокси-URL:

До:

https://static1.e621.net/data/sample/12/34/1234567890abcdef.jpg

После:

/api/search/proxy/aHR0cHM6Ly9zdGF0aWMxLmU2MjEubmV0L2RhdGEvc2FtcGxlLzEyLzM0LzEyMzQ1Njc4OTBhYmNkZWYuanBn

Изображения стримятся через ваш сервер с кэшированием на 24 часа.

3. Безопасность

Проксирование разрешено только для следующих доменов:

  • e621.net
  • static1.e621.net
  • gelbooru.com
  • img3.gelbooru.com
  • img2.gelbooru.com
  • img1.gelbooru.com
  • simg3.gelbooru.com
  • simg4.gelbooru.com

Запросы к другим доменам будут отклонены с ошибкой 403.

Производительность

Оптимизация

  1. Стриминг - изображения передаются потоком без полной загрузки в память
  2. Кэширование - заголовок Cache-Control: public, max-age=86400 (24 часа)
  3. Таймаут - 30 секунд для загрузки изображения

HTTP заголовки

{
  'User-Agent': 'NakamaSpace/1.0',
  'Referer': originalUrl.origin,
  'Content-Type': // из ответа источника
  'Cache-Control': 'public, max-age=86400',
  'Content-Length': // из ответа источника
}

Мониторинг

Логирование ошибок

Все ошибки проксирования логируются:

console.error('Ошибка проксирования изображения:', error.message);

Типичные ошибки

  1. 403 Forbidden - попытка проксировать запрещенный домен
  2. 500 Internal Server Error - ошибка загрузки с источника
  3. Timeout - источник не отвечает более 30 секунд

Требования к серверу

Сетевой доступ

Ваш сервер должен иметь прямой доступ к:

  • e621.net (HTTPS)
  • gelbooru.com (HTTPS)

Рекомендация: используйте сервер вне РФ (например, Railway EU/US, Heroku, DigitalOcean)

Пропускная способность

Учитывайте трафик проксируемых изображений:

  • Preview изображения: ~100-500 KB
  • Полные изображения: 1-10 MB
  • На 1000 запросов поиска: ~500 MB - 5 GB трафика

Код

Основная реализация находится в:

backend/routes/search.js

Ключевые функции:

  • createProxyUrl(originalUrl) - конвертация URL в прокси-URL
  • GET /api/search/proxy/:encodedUrl - эндпоинт проксирования

Тестирование

Проверка работы прокси

  1. Откройте приложение
  2. Перейдите в раздел "Поиск"
  3. Выполните поиск по тегу
  4. Откройте DevTools → Network
  5. Убедитесь, что изображения загружаются с /api/search/proxy/...

Проверка из РФ

  1. Попросите пользователя из РФ протестировать
  2. Изображения должны загружаться без VPN
  3. Если не работает - проверьте, что сервер вне РФ

FAQ

Q: Можно ли добавить другие источники?

A: Да, добавьте домен в allowedDomains и обновите логику в обработчиках поиска.

Q: Влияет ли это на скорость?

A: Минимально. Стриминг и кэширование минимизируют задержки. Первая загрузка может быть медленнее, но последующие - быстрее благодаря кэшу.

Q: Нужно ли настраивать CDN?

A: Нет, но рекомендуется для production с большим трафиком. Можно использовать Cloudflare перед вашим сервером.

Q: Работает ли это в China?

A: Частично. Зависит от локации сервера и блокировок. Рекомендуется азиатский регион для китайских пользователей.

Обновление документов

Информация о проксировании добавлена в:

  • README.md - раздел "Поиск"
  • DEPLOYMENT.md - раздел "Доступность для пользователей из РФ"
  • PROJECT_STRUCTURE.md - список API эндпоинтов
  • SETUP.md - список API эндпоинтов

Готово! 🎉 Ваш NakamaSpace теперь доступен пользователям из РФ без VPN!