У меня в конфигурации есть следующее для перенаправления http-трафика на https:
server {
listen 80 default_server;
limit_req zone=one burst=100;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
В моем блоке https-сервера у меня есть
server {
listen 443;
limit_req zone=one burst=100;
----MORE CONFIGS HERE-----
}
Когда я запускаю тест, чтобы увидеть, работает ли limit_req, я запускаю следующее:
ab -n 100000 -c 1000 https://myurlhere.com
limit_req работает отлично.
Однако, когда я запускаю
ab -n 100000 -c 1000 http://myurlhere.com
limit_req не улавливает переадресацию http на https. Есть идеи, почему?
Моя теория, которую вы подтвердили, заключается в том, что ограничение скорости не применяется к кодам состояния 3xx. Это может применяться только к кодам состояния 200.
Одним из способов определить это может быть просмотр исходного кода, хотя я бегло просмотрел исходный код модуля и ничего не выделялось. Возможно, модуль вызывается только с определенными кодами ответа, я недостаточно знаком с исходным кодом Nginx, чтобы быстро это решить.