Arahan NGINX "client_max_body_size" tidak berfungsi di dalam blok "location"


14

Saya memiliki /adminkatalog di situs web saya dan saya ingin mengizinkan admin untuk mengunggah file besar melalui formulir web. Inilah tampilan nginx.com saya:

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;
        }

        # ...
    }
}

Ini tidak bekerja. /admin/index.phpskrip tidak dapat mengunggah file yang lebih besar yang 16Mb: 413 Entitas Permintaan Terlalu Besar

Namun, jika saya pindah client_max_body_sizeuntuk servermemblokir semuanya berfungsi dengan baik. Tapi saya tidak ingin membuat perubahan ini hanya untuk adminkatalog.

Menurut dokumen , client_max_body_sizedapat ditempatkan di dalam locationblok untuk menimpa pengaturan hanya untuk jalur yang diinginkan.

Apa yang salah?

Jawaban:


14

Ini berfungsi dengan baik, masalahnya adalah Anda salah mengerti bagaimana lokasi bekerja. Nginx hanya akan menerapkan satu blok lokasi, tidak pernah lebih dari satu. Jadi ketika Anda memiliki dua lokasi

location ~ \.php$dan location /admindan URI /admin/index.phpmaka lokasi pertama Anda berlaku tetapi yang kedua tidak. Bahkan jika Anda menggunakan penulisan ulang di dalam suatu lokasi, maka nginx akan membuang arahan dan mem-parsainya untuk lokasi yang baru.

Ini juga alasan mengapa Anda selalu memposting konfigurasi penuh sehingga Anda tidak menyembunyikan apa yang sebenarnya salah.


Maaf, karena tidak memposting konfigurasi lengkap, Anda benar. Adapun jawabannya, ini tidak mungkin benar. Berikut adalah contoh dari dokumen: wiki.nginx.org/HttpCoreModule#location Dan di tempat lain beberapa blok lokasi berfungsi dengan baik untuk saya.
Temnovit

1
Maaf, tapi 100% benar. Nginx dapat mencari melalui beberapa blok lokasi, tetapi hanya akan menerapkan arahan dari salah satu dari mereka. Yang mana yang dipilih tergantung pada aturan yang didokumentasikan pada halaman yang Anda tautkan.
Martin Fjordvald

@ MartinFjordvald apa solusi untuk ini?
chaosguru


"Bahkan jika kamu akan menggunakan penulisan ulang di dalam suatu lokasi, maka nginx akan membuang arahan dan membuat ulang mereka untuk lokasi yang baru." Ini juga sangat penting! Apakah perincian tentang ini di dokumen resmi?
Juanitocalero
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.