6.1 KiB
🌍 Проксирование 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.netstatic1.e621.netgelbooru.comimg3.gelbooru.comimg2.gelbooru.comimg1.gelbooru.comsimg3.gelbooru.comsimg4.gelbooru.com
Запросы к другим доменам будут отклонены с ошибкой 403.
Производительность
Оптимизация
- Стриминг - изображения передаются потоком без полной загрузки в память
- Кэширование - заголовок
Cache-Control: public, max-age=86400(24 часа) - Таймаут - 30 секунд для загрузки изображения
HTTP заголовки
{
'User-Agent': 'NakamaSpace/1.0',
'Referer': originalUrl.origin,
'Content-Type': // из ответа источника
'Cache-Control': 'public, max-age=86400',
'Content-Length': // из ответа источника
}
Мониторинг
Логирование ошибок
Все ошибки проксирования логируются:
console.error('Ошибка проксирования изображения:', error.message);
Типичные ошибки
- 403 Forbidden - попытка проксировать запрещенный домен
- 500 Internal Server Error - ошибка загрузки с источника
- 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 в прокси-URLGET /api/search/proxy/:encodedUrl- эндпоинт проксирования
Тестирование
Проверка работы прокси
- Откройте приложение
- Перейдите в раздел "Поиск"
- Выполните поиск по тегу
- Откройте DevTools → Network
- Убедитесь, что изображения загружаются с
/api/search/proxy/...
Проверка из РФ
- Попросите пользователя из РФ протестировать
- Изображения должны загружаться без VPN
- Если не работает - проверьте, что сервер вне РФ
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!