149 lines
6.1 KiB
Markdown
149 lines
6.1 KiB
Markdown
# 🌍 Проксирование 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!
|
||
|