nakama/PROXY_INFO.md

149 lines
6.1 KiB
Markdown
Raw Normal View History

2025-11-03 20:35:01 +00:00
# 🌍 Проксирование 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 заголовки
```javascript
{
'User-Agent': 'NakamaSpace/1.0',
'Referer': originalUrl.origin,
'Content-Type': // из ответа источника
'Cache-Control': 'public, max-age=86400',
'Content-Length': // из ответа источника
}
```
## Мониторинг
### Логирование ошибок
Все ошибки проксирования логируются:
```javascript
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: Частично. Зависит от локации сервера и блокировок. Рекомендуется азиатский регион для китайских пользователей.
## Обновление документов
Информация о проксировании добавлена в:
- [x] `README.md` - раздел "Поиск"
- [x] `DEPLOYMENT.md` - раздел "Доступность для пользователей из РФ"
- [x] `PROJECT_STRUCTURE.md` - список API эндпоинтов
- [x] `SETUP.md` - список API эндпоинтов
---
**Готово!** 🎉 Ваш NakamaSpace теперь доступен пользователям из РФ без VPN!