Nginx client_max_body_size trên mỗi khối vị trí (với mẫu trình điều khiển phía trước php)


8

Tôi đang tìm kiếm một giải pháp cho vấn đề này . Tôi hiểu lý do tại sao thiết lập trong câu hỏi đó không hoạt động, nhưng tôi cố gắng đi đến một giải pháp mà tôi có thể làm cho nó hoạt động.

Ý tưởng là chỉ cho phép tải lên tệp lớn trên một số url nhất định. Tôi có thể sử dụng một locationkhối cho việc này, nhưng vấn đề là: Tôi có một mẫu trình điều khiển phía trước php:

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

Tổng cấu hình của tôi trông như:

# ...

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

Theo tôi hiểu, chỉ có một khối vị trí sẽ được áp dụng. Vì vậy, nếu tôi có kích thước yêu cầu mặc định là 512K, 256M sẽ không bao giờ được áp dụng vì tất cả các yêu cầu được khớp thông qua mẫu điều khiển trước ~ \.php.

Tôi có đúng trong trường hợp này không và nếu có, những gì có thể được định cấu hình để khách truy cập không thể tải lên bất cứ thứ gì trừ khi họ tải lên admin/upload?

Câu trả lời:


2

Xác định hai vị trí 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;
}

Có lẽ không phải là đẹp nhất ... nên có chức năng mặc dù ..


1

Nếu /admin/uploadđường dẫn là ảo, có thể làm cho nó hoạt động như sau:

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

Không phải là đẹp nhất, nhưng làm việc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.