Задать вопрос

Nginx. Как заставить работать limit_req после кэша?

Есть в одном блоке location описать и кэш и limit_req, то лимит будет срабатывать на кэшированные запросы.
Чтобы этого избежать советуют limit_req "выкинуть" в отдельный сервер и в него пересылать из сервера с кэшем.
Однако при такой схеме у меня не работает лимитирование запросов.

example.com:443 (с кэшем) -> 127.0.0.1:8080 (с лимитером) -> 10.1.1.2 бэкэнд

Конфиг
http {
limit_req_zone $server_name zone=b:10m rate=1r/m;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=custom_cache:50m;
server {
    server_name  example.com;
    listen 443 ssl;
    location = /Status{
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache custom_cache;
        proxy_cache_valid any 3m;
        proxy_cache_methods POST;
        proxy_cache_key "$host$request_uri|$request_body";
        add_header X-Cached $upstream_cache_status;
        include includes/allowlist.include;
        deny  all;
    }
}

server {
    listen 127.0.0.1:8080;
    location = /Status{
        proxy_pass http://10.1.1.2;
        limit_req_status 429;
        limit_req zone=b burst=3;
    }
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    server_name  example.com;
    listen 80;
    return 404;
}

}
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@pha Автор вопроса
Проблема в ошибке в конфигурации, ответ в комменте
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы