Назад | Перейти на главную страницу

Директива NGINX «client_max_body_size» не работает внутри блока «location»

у меня есть /admin каталог на моем веб-сайте, и я хотел бы разрешить администраторам загружать большие файлы через веб-формы. Вот как выглядит мой nginx.com:

http {
    # ...
    client_max_body_size 16M;
    # ...

    server {
        server_name example.com;
        root /var/www/example.com;
        index index.php;

        location /admin {
            client_max_body_size 256M;
        }

        # ...
    }
}

Это не работает. /admin/index.php скрипт не может загружать файлы размером более 16Мб: 413 Запрос слишком большой объект

Однако, если я перееду client_max_body_size к server блок все работает нормально. Но я бы не хотел вносить это изменение только для admin каталог.

В соответствии с документы, client_max_body_size можно разместить внутри location блок для отмены настройки только для желаемого пути.

Что могло быть не так?

Он работает нормально, проблема в том, что вы неправильно поняли, как работают локации. Nginx всегда применяет только один блок местоположения, а не более одного. Итак, когда у вас есть два места

location ~ \.php$ и location /admin и URI /admin/index.php тогда ваше первое местоположение применяется, а второе - нет. Даже если бы вы использовали перезапись внутри местоположения, nginx отбросил бы директивы и повторно проанализировал бы их для нового местоположения.

Это также причина, по которой вы всегда публикуете полные конфигурации, чтобы не скрывать, что на самом деле не так.