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 для деталей.