La directive NGINX «client_max_body_size» ne fonctionne pas dans le bloc «location»


14

J'ai un /admincatalogue sur mon site Web et je voudrais permettre aux administrateurs de télécharger des fichiers volumineux via des formulaires Web. Voici à quoi ressemble mon 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;
        }

        # ...
    }
}

Cela ne fonctionne pas. /admin/index.phple script ne peut pas télécharger des fichiers d'une taille supérieure à 16 Mo: 413 Entité de demande trop grande

Cependant, si je bouge client_max_body_sizepour serverbloquer tout fonctionne bien. Mais je ne voudrais pas faire ce changement uniquement pour le admincatalogue.

Selon les documents , client_max_body_sizepeut être placé à l'intérieur du locationbloc pour remplacer le paramètre uniquement pour le chemin souhaité.

Qu'est-ce qui ne va pas?

Réponses:


14

Cela fonctionne très bien, le problème est que vous avez mal compris le fonctionnement des emplacements. Nginx n'appliquera jamais qu'un seul bloc d'emplacement, jamais plus d'un. Donc, quand vous avez deux emplacements

location ~ \.php$et location /adminet l'URI est /admin/index.phpalors votre premier emplacement s'applique, mais pas le second. Même si vous deviez utiliser une réécriture dans un emplacement, nginx rejetterait les directives et les réanalyserait pour le nouvel emplacement.

C'est aussi la raison pour laquelle vous publiez toujours des configurations complètes afin de ne pas cacher ce qui ne va pas.


Désolé, pour ne pas avoir posté la configuration complète, vous avez raison. Quant à la réponse, cela ne peut pas être vrai. Voici l'exemple de la documentation: wiki.nginx.org/HttpCoreModule#location Et dans d'autres endroits, plusieurs blocs de localisation fonctionnent pour moi très bien.
Temnovit

1
Désolé, mais c'est 100% exact. Nginx peut rechercher dans plusieurs blocs d'emplacement, mais il n'appliquera que les directives de l'un d'entre eux. Celui qu'il choisit dépend des règles documentées sur la page que vous avez liée.
Martin Fjordvald

@MartinFjordvald quelle est la solution à cela?
chaosguru


1
@Juanitocalero pas vraiment non, la documentation officielle n'est pas un très bon guide de démarrage, plus une documentation de référence pour la syntaxe et les informations de base.
Martin Fjordvald
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.