Caching HTTP proxy server written in Go Простой кеширующий прокси-сервер, который перенаправляет запросы на удалённый сервер и кэширует результат.
Идеально подходит для уменьшения нагрузки на внешние API путём кэширования ответов с возможностью гибкой настройки через YAML-конфигурацию.
- Прозрачное кэширование HTTP-запросов
- Поддержка Redis в качестве хранилища кэша
- Гибкая настройка через YAML-файл
- Возможность указать blacklist URL-путей, которые не нужно кэшировать
- Очистка кэша по секретному ключу
go run cmd/main.go
Убедись, что конфигурационный файл config.yaml
находится в корне проекта и имеет правильную конфигурацию.
Собери образ (если нужно):
docker build -t caching-proxy .
Запусти контейнер:
docker run -p 8080:8080 -v $(pwd)/config.yaml:/app/config.yaml -v $(pwd)/app.log:/app/app.log caching-proxy
Вы можете использовать пример docker-compose
из этого репозитория:
docker-compose up --build
Конфигурация осуществляется через файл config.yaml
.
server:
origin: https://httpbin.org/ # Оригинальный URL
# port: 1323
secret: pls_delete_cache_maboy # Секрет для очистки кеша
timeout: 10 # Таймаут до origin. В секундах
ratelimit: # RateLimit осуществляется по IP
rate: 20
duration: 60 # в секундах
redis:
addr: redis # Адрес Redis
port: 6379 # Порт Redis
password: # Пароль (если используется)
db: # Номер базы данных
TTL: 5 # Время жизни кэша в минутах
blacklist:
- /uuid # Эти пути не будут кэшироваться
- /delay/(.+) # Поддерживает regexp
logger:
level: DEBUG # Сейчас поддерживает только DEBUG, INFO, ERROR
file: app.log # Оставьте пустым для вывода в stdout
После запуска сервис доступен по адресу:
http://localhost:8080/
Все запросы перенаправляются на указанный origin
(https://httpbin.org/
в данном случае), а результаты кэшируются.
curl http://localhost:8080/ip
Для очистки кэша отправь POST-запрос с секретным ключом:
curl -H "Authorization: Bearer pls_delete_cache_maboy" -X POST http://localhost:8080/clear
Поддерживаются простые строки и регулярные выражения:
blacklist:
- /uuid
- /delay/(.+)
При каждом ответе добавляется заголовок X-Cache
, показывающий статус кэширования:
Значение | Описание |
---|---|
MISS |
Данные не были закэшированы, запрос выполнен напрямую |
HIT |
Ответ взят из кэша |
BYPASS |
Запрос был исключен из кэширования (через blacklist) |
- Golang
- Redis
- YAML для конфигурации
- Docker
MIT License — см. LICENSE для деталей.