nginx, limit_conn_zone $request_body не работает

Я хотел бы ограничить некоторое расположение nginx и избежать двух параллельных потоков FastCGI для одних и тех же данных POST ($request_body).

Я добавил лимитную зону подключения и настроил лимит подключений для местоположения:

      log_format postdata '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$request_body" /$upstream_cache_status/';

limit_conn_zone $request_body zone=tco_body:10m;

server {
.....
    access_log /var/log/nginx/www.example.com_access.log postdata;

    location ~ ^/billing/modules/gateways/callback/tco.php$ {
        client_body_buffer_size 16m;
        limit_conn tco_body 1;
        limit_conn_log_level info;
        limit_conn_status 429;

        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        client_max_body_size 64M;
        fastcgi_pass 127.0.0.1:9901;
    }

но, к сожалению, nginx по-прежнему может принимать и отправлять на серверную часть php-fpm два запроса с одними и теми же данными POST одновременно.

Nginx правильно регистрирует $request_body, когда limit_conn отключен. Но я заметил еще одно странное поведение — журнал доступа не содержит $request_body, когда в этом месте включен limit_conn, и есть только «-».

      xx.xx.xx.xx - - [22/Dec/2020:07:10:45 -0800] "POST /billing/modules/gateways/callback/tco.php HTTP/2.0" 200 315 "-" "Guzzle/6.2.1" "-" /-/

Я пытался применить это ограничение к nginx/1.14.2 (из репозитория Debian apt) и nginx/1.19.6 (из официального репозитория nginx). Дебиан 10.

Есть ли у кого-нибудь предложения о том, что мне не хватает в этой настройке, чтобы она работала должным образом?

0 ответов

Другие вопросы по тегам