Nginx client_max_body_size per blok lokasi (dengan pola frontcontroller php)


8

Saya mencari solusi untuk masalah ini . Saya mengerti alasan mengapa pengaturan dalam pertanyaan itu tidak berhasil, tetapi saya mencoba untuk mendapatkan solusi di mana saya bisa membuatnya bekerja.

Idenya adalah untuk memungkinkan unggahan file besar hanya pada url tertentu. Saya dapat menggunakan locationblok untuk ini, tetapi masalahnya adalah: Saya memiliki pola frontcontroller php:

location ~ \.php {
    # ...
    fastcgi_pass unix:/tmp/php5-fpm.sock;
}

Konfigurasi total saya terlihat seperti:

# ...

http {
    # ...

    client_max_body_size 512K;

    server {
        server_name example.com;
        root        /var/www/example.com/public;

        location / { 
            try_files $uri /index.php?$query_string;
        }

        location /admin/upload {
            client_max_body_size 256M;
        }

        location ~ \.php {
            # ...

            fastcgi_pass unix:/tmp/php5-fpm.sock;
        }
    }
}

Seperti yang saya mengerti, hanya satu blok lokasi yang akan diterapkan. Jadi jika saya memiliki ukuran permintaan standar 512K, 256M tidak akan pernah diterapkan karena semua permintaan dicocokkan melalui pola frontcontroller ~ \.php.

Apakah saya benar dalam kasus ini dan jika demikian, apa yang dapat dikonfigurasi sehingga pengunjung tidak dapat mengunggah apa pun kecuali ketika mereka mengunggah admin/upload?

Jawaban:


2

Tentukan dua lokasi php?

location ~ ^/admin/upload/.+\.php$
{
    client_max_body_size 256M;
    include /etc/nginx/conf.d/php-fpm.conf;
}   
location ~ \.php
{
    include /etc/nginx/conf.d/php-fpm.conf;
}

Mungkin bukan yang tercantik ... Harus fungsional ..


1

Jika /admin/uploadpath virtual, dimungkinkan untuk membuatnya bekerja sebagai berikut:

location / {
    try_files $uri /index.php?$args;
}

location /admin/upload {
    client_max_body_size 256M;

    include inc/php.conf;
    rewrite ^(.*)$ /index.php?$args break;
}

location ~ \.php$ {
    include inc/php.conf;
}

Bukan yang tercantik juga, tapi berhasil.

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.