187 lines
6.7 KiB
Markdown
187 lines
6.7 KiB
Markdown
|
|
# 🌍 Changelog: Проксирование для доступа из РФ
|
|||
|
|
|
|||
|
|
**Дата:** 3 ноября 2025
|
|||
|
|
**Версия:** 1.1.0
|
|||
|
|
**Автор:** NakamaSpace Development Team
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 Что добавлено
|
|||
|
|
|
|||
|
|
### Основные изменения
|
|||
|
|
|
|||
|
|
#### 1. Проксирование изображений
|
|||
|
|
Добавлен новый эндпоинт `/api/search/proxy/:encodedUrl` для проксирования изображений с e621 и gelbooru через ваш сервер.
|
|||
|
|
|
|||
|
|
**Файл:** `backend/routes/search.js`
|
|||
|
|
|
|||
|
|
**Изменения:**
|
|||
|
|
- ✅ Функция `createProxyUrl(originalUrl)` - конвертация URL в прокси-URL
|
|||
|
|
- ✅ Эндпоинт `GET /api/search/proxy/:encodedUrl` - стриминг изображений
|
|||
|
|
- ✅ Whitelist разрешенных доменов с проверкой безопасности
|
|||
|
|
- ✅ HTTP кэширование на 24 часа
|
|||
|
|
- ✅ Timeout 30 секунд для загрузки
|
|||
|
|
- ✅ Автоматическая замена URL в ответах API
|
|||
|
|
|
|||
|
|
#### 2. Поддерживаемые домены
|
|||
|
|
```javascript
|
|||
|
|
[
|
|||
|
|
'e621.net',
|
|||
|
|
'static1.e621.net',
|
|||
|
|
'gelbooru.com',
|
|||
|
|
'img3.gelbooru.com',
|
|||
|
|
'img2.gelbooru.com',
|
|||
|
|
'img1.gelbooru.com',
|
|||
|
|
'simg3.gelbooru.com',
|
|||
|
|
'simg4.gelbooru.com'
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3. Обновленные эндпоинты
|
|||
|
|
- `/api/search/furry` - теперь возвращает проксированные URL
|
|||
|
|
- `/api/search/anime` - теперь возвращает проксированные URL
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📚 Обновленная документация
|
|||
|
|
|
|||
|
|
### Обновленные файлы:
|
|||
|
|
1. ✅ `README.md` - добавлена информация о проксировании в раздел "Поиск"
|
|||
|
|
2. ✅ `DEPLOYMENT.md` - новый раздел "Доступность для пользователей из РФ"
|
|||
|
|
3. ✅ `PROJECT_STRUCTURE.md` - обновлен список API эндпоинтов и функциональности
|
|||
|
|
4. ✅ `SETUP.md` - добавлен эндпоинт проксирования
|
|||
|
|
5. ✅ `PROXY_INFO.md` (новый) - подробная документация о проксировании
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 Технические детали
|
|||
|
|
|
|||
|
|
### Кодирование URL
|
|||
|
|
URL изображений кодируются в base64:
|
|||
|
|
```javascript
|
|||
|
|
const encodedUrl = Buffer.from(originalUrl).toString('base64');
|
|||
|
|
// https://static1.e621.net/image.jpg → aHR0cHM6Ly9zdGF0aWMxLmU2MjEubmV0L2ltYWdlLmpwZw==
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Пример прокси-URL
|
|||
|
|
```
|
|||
|
|
/api/search/proxy/aHR0cHM6Ly9zdGF0aWMxLmU2MjEubmV0L2RhdGEvc2FtcGxlLzEyLzM0LzEyMzQ1Njc4OTBhYmNkZWYuanBn
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### HTTP заголовки
|
|||
|
|
```javascript
|
|||
|
|
{
|
|||
|
|
'User-Agent': 'NakamaSpace/1.0',
|
|||
|
|
'Referer': urlObj.origin,
|
|||
|
|
'Content-Type': response.headers['content-type'],
|
|||
|
|
'Cache-Control': 'public, max-age=86400',
|
|||
|
|
'Content-Length': response.headers['content-length']
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ Преимущества
|
|||
|
|
|
|||
|
|
1. **Доступность из РФ** - пользователи могут использовать приложение без VPN
|
|||
|
|
2. **Безопасность** - whitelist доменов защищает от злоупотреблений
|
|||
|
|
3. **Производительность** - кэширование снижает нагрузку на источники
|
|||
|
|
4. **Прозрачность** - работает автоматически, без изменений на клиенте
|
|||
|
|
5. **Совместимость** - сохраняет все существующие функции
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 Требования к деплою
|
|||
|
|
|
|||
|
|
### Минимальные требования
|
|||
|
|
- Сервер с доступом к e621.net и gelbooru.com
|
|||
|
|
- Достаточная пропускная способность для трафика изображений
|
|||
|
|
- **Рекомендация:** сервер вне РФ (Railway, Heroku, DigitalOcean)
|
|||
|
|
|
|||
|
|
### Оценка трафика
|
|||
|
|
- Preview: ~100-500 KB на изображение
|
|||
|
|
- Полное изображение: 1-10 MB
|
|||
|
|
- 1000 запросов поиска: ~500 MB - 5 GB
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 Тестирование
|
|||
|
|
|
|||
|
|
### Ручное тестирование
|
|||
|
|
1. Запустите сервер
|
|||
|
|
2. Откройте раздел "Поиск"
|
|||
|
|
3. Выполните поиск
|
|||
|
|
4. Проверьте DevTools → Network
|
|||
|
|
5. URL изображений должны начинаться с `/api/search/proxy/`
|
|||
|
|
|
|||
|
|
### Автоматические тесты
|
|||
|
|
```bash
|
|||
|
|
# Тест проксирования (будет добавлено в будущем)
|
|||
|
|
npm run test:proxy
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 Мониторинг
|
|||
|
|
|
|||
|
|
### Логи ошибок
|
|||
|
|
Все ошибки проксирования логируются в консоль:
|
|||
|
|
```
|
|||
|
|
Ошибка проксирования изображения: [error message]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Метрики для отслеживания
|
|||
|
|
- Количество проксированных запросов
|
|||
|
|
- Средняя скорость загрузки
|
|||
|
|
- Процент ошибок (403, 500, timeout)
|
|||
|
|
- Объем трафика
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔄 Обратная совместимость
|
|||
|
|
|
|||
|
|
✅ Полная обратная совместимость
|
|||
|
|
✅ Не требуется изменений на клиенте
|
|||
|
|
✅ Не требуется миграция данных
|
|||
|
|
✅ Существующие API эндпоинты работают как прежде
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Следующие шаги
|
|||
|
|
|
|||
|
|
### Рекомендации по улучшению
|
|||
|
|
- [ ] Добавить Redis кэш для проксированных изображений
|
|||
|
|
- [ ] Метрики и мониторинг трафика
|
|||
|
|
- [ ] CDN перед прокси для оптимизации
|
|||
|
|
- [ ] Автоматические тесты для проксирования
|
|||
|
|
- [ ] Сжатие изображений на лету
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🙋 FAQ
|
|||
|
|
|
|||
|
|
**Q: Работает ли это без изменений на клиенте?**
|
|||
|
|
A: Да, всё работает автоматически.
|
|||
|
|
|
|||
|
|
**Q: Можно ли отключить проксирование?**
|
|||
|
|
A: Да, удалите вызовы `createProxyUrl()` в обработчиках API.
|
|||
|
|
|
|||
|
|
**Q: Влияет ли это на скорость?**
|
|||
|
|
A: Минимально. Первая загрузка может быть медленнее, но кэширование компенсирует это.
|
|||
|
|
|
|||
|
|
**Q: Безопасно ли это?**
|
|||
|
|
A: Да, используется whitelist доменов и проверка источников.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 👏 Благодарности
|
|||
|
|
|
|||
|
|
Спасибо сообществу NakamaSpace за фидбек и запросы на эту функцию!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Готово к использованию!** 🎉
|
|||
|
|
|
|||
|
|
Для подробной информации см. [PROXY_INFO.md](PROXY_INFO.md)
|
|||
|
|
|