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


14

У меня есть /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 Request Entity Too Large

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

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

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

Ответы:


14

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

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

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


Извините, что вы не опубликовали полный конфиг, вы правы. Что касается ответа, это не может быть правдой. Вот пример из документации: 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.