
Я использую прокси-сервер Nginx в качестве интерфейса для веб-приложения, которое имеет тенденцию получать идентичные дублирующие запросы с интервалом в миллисекунды, что приводит к появлению дублирующих элементов в моей базе данных.
Я подумал, что смогу исправить это, разрешив Nginx кэшировать контент на 1 секунду, чтобы дублирующиеся запросы вообще не затрагивали мое приложение.
Я настроил его с помощью
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=prevent_duplicates:10m max_size=1g inactive=1s use_temp_path=off;
А затем добавил proxy_cache prevent_duplicates;
в раздел моего корневого местоположения, где у меня есть proxy_pass
Но мое приложение все равно попадает на все запросы - это вопрос времени? Несколько потоков запускаются одновременно для каждого запроса, все думают, что они первые?
решение1
Может быть, решением станет ограничение скорости?
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
location /login/ {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
Источник:https://www.nginx.com/blog/rate-limiting-nginx/
Можно rate=1r/s
настроить, если поставить 2r/s
NGINX, то он будет разрешать 1 запрос каждые 500 миллисекунд...