NGINX директива "client_max_body_size" не працює в блоці "location"


15

У мене /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блоку, щоб змінити налаштування лише на потрібний шлях.

Що може бути не так?

Відповіді:


15

Це працює чудово, проблема полягає в тому, що ви неправильно зрозуміли, як працюють місця. Nginx застосовуватиме лише один блок розташування, не більше ніж один. Тож, коли у вас є дві локації

location ~ \.php$і location /adminURI - це /admin/index.phpваше перше місце розташування, але друге - не. Навіть якби ви використовували переписувати в межах локації, тоді nginx відкидає директиви та перераховує їх для нового місця розташування.

Це також причина, коли ви завжди публікуєте повні конфігурації, щоб не приховувати, що насправді не так.


Вибачте, що ви не розмістили повну конфігурацію, ви праві. Що стосується відповіді, це не може бути правдою. Ось приклад з docs: wiki.nginx.org/HttpCoreModule#location І в інших місцях кілька блоків локації працюють для мене просто чудово.
Темновіт

1
Вибачте, але це на 100% правильно. Nginx може шукати через декілька блоків локації, але він завжди застосовуватиме директиви одного з них. Який із них вибрати, залежить від правил, задокументованих на сторінці, яку ви пов’язали.
Мартін Фьордвальд

@MartinFjordvald яке рішення для цього?
хаосгуру

Подивіться за configuration Eпосиланням: nginx.org/en/docs/http/ngx_http_core_module.html#location
holmberd

1
@Juanitocalero насправді ні, офіційна документація - не дуже хороший путівник для початківців, більше довідкова документація для синтаксису та основна інформація.
Мартін Фьордвальд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.