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!
|
|||
|
|
|