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