La direttiva NGINX "client_max_body_size" non funziona all'interno del blocco "location"


14

Ho un /admincatalogo sul mio sito Web e vorrei consentire agli amministratori di caricare file di grandi dimensioni tramite moduli Web. Ecco come appare il mio 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;
        }

        # ...
    }
}

Questo non funziona. /admin/index.phplo script non può caricare file di dimensioni superiori a 16 Mb: 413 Entità richiesta troppo grande

Tuttavia, se mi muovo client_max_body_sizeper serverbloccare tutto funziona bene. Ma non vorrei apportare questa modifica solo per il admincatalogo.

Secondo i documenti , client_max_body_sizepuò essere inserito all'interno del locationblocco per sovrascrivere le impostazioni solo per il percorso desiderato.

Cosa potrebbe esserci di sbagliato?

Risposte:


14

Funziona bene, il problema è che hai capito male come funzionano le posizioni. Nginx applicherà sempre e solo un blocco di posizione, mai più di uno. Quindi quando hai due posizioni

location ~ \.php$e location /adminl'URI è /admin/index.phpquindi la tua prima posizione, ma la seconda no. Anche se si dovesse usare una riscrittura all'interno di una posizione, nginx eliminerebbe le direttive e le analizzerebbe per la nuova posizione.

Questo è anche il motivo per cui pubblichi sempre configurazioni complete in modo da non nascondere ciò che è effettivamente sbagliato.


Spiacenti, per non aver pubblicato la configurazione completa, hai ragione. Per quanto riguarda la risposta, questo non può essere vero. Ecco l'esempio da docs: wiki.nginx.org/HttpCoreModule#location E in altri posti più blocchi di posizione funzionano per me bene.
Temnovit,

1
Siamo spiacenti, ma è giusto al 100%. Nginx può cercare tra più blocchi di posizione, ma applicherà sempre e solo le direttive di uno di essi. Quale scegli dipende dalle regole documentate nella pagina che hai collegato.
Martin Fjordvald,

@MartinFjordvald qual è la soluzione per questo?
Chaosguru,


1
@Juanitocalero non proprio no, la documentazione ufficiale non è un'ottima guida introduttiva, più di una documentazione di riferimento per la sintassi e le informazioni di base.
Martin Fjordvald,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.