Chỉ thị NGINX khách hàng_max_body_size không hoạt động bên trong khối vị trí


13

Tôi có một /admindanh mục trên trang web của mình và tôi muốn cho phép quản trị viên tải lên các tệp lớn thông qua các biểu mẫu web. Đây là cách nginx.com của tôi trông:

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

        # ...
    }
}

Điều này không hoạt động. /admin/index.phptập lệnh không thể tải lên các tệp lớn hơn 16Mb: 413 Thực thể yêu cầu quá lớn

Tuy nhiên, nếu tôi chuyển client_max_body_sizeđếnserver chặn mọi thứ hoạt động tốt. Nhưng tôi sẽ không muốn thực hiện thay đổi này chỉ cho admindanh mục.

Theo tài liệu ,client_max_body_size có thể được đặt bên trong locationkhối để ghi đè cài đặt chỉ cho đường dẫn mong muốn.

Điều gì có thể sai?

Câu trả lời:


13

Nó hoạt động tốt, vấn đề là bạn đã hiểu sai về cách các vị trí làm việc. Nginx sẽ chỉ áp dụng một khối vị trí, không bao giờ nhiều hơn một khối. Vì vậy, khi bạn có hai địa điểm

location ~ \.php$location /admin URI là /admin/index.phpvị trí đầu tiên của bạn được áp dụng nhưng vị trí thứ hai thì không. Ngay cả khi bạn sử dụng viết lại trong một vị trí thì nginx sẽ loại bỏ các chỉ thị và lặp lại chúng cho vị trí mới.

Đây cũng là lý do tại sao bạn luôn đăng các cấu hình đầy đủ để bạn không che giấu những gì thực sự sai.


Xin lỗi, vì không đăng cấu hình hoàn chỉnh, bạn đã đúng. Đối với câu trả lời, điều này không thể đúng. Dưới đây là ví dụ từ các tài liệu: wiki.nginx.org/HttpCoreModule#location Và ở những nơi khác, nhiều khối vị trí hoạt động tốt với tôi.
Temnovit

1
Xin lỗi, nhưng nó đúng 100%. Nginx có thể tìm kiếm thông qua nhiều khối vị trí, nhưng nó sẽ chỉ áp dụng các chỉ thị của một trong số chúng. Cái nào nó chọn phụ thuộc vào các quy tắc được ghi lại trên trang bạn liên kết.
Martin Fjordvald

@MartinFjordvald giải pháp cho việc này là gì?
chaosguru

Nhìn vào configuration Etrong liên kết: nginx.org/en/docs/http/ngx_http_core_module.html#location
holmberd
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.