คำสั่ง NGINX“ client_max_body_size” ไม่ทำงานในบล็อก“ ตำแหน่ง”


15

ฉันมี/adminแคตตาล็อกในเว็บไซต์ของฉันและฉันต้องการอนุญาตให้ผู้ดูแลระบบอัปโหลดไฟล์ขนาดใหญ่ผ่านเว็บฟอร์ม นี่คือลักษณะของ 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;
        }

        # ...
    }
}

สิ่งนี้ใช้ไม่ได้ /admin/index.phpสคริปต์ไม่สามารถอัปโหลดไฟล์ที่มีขนาดใหญ่กว่า 16Mb: 413 คำขอเอนทิตีที่ใหญ่เกินไป

อย่างไรก็ตามถ้าฉันย้ายclient_max_body_sizeไปserverบล็อกทุกอย่างทำงานได้ดี แต่ฉันไม่ต้องการเปลี่ยนแปลงเฉพาะadminแคตตาล็อก

ตามเอกสาร , client_max_body_sizeสามารถวางอยู่ภายในlocationบล็อกการตั้งเฉพาะสำหรับเส้นทางที่ต้องการแทนที่

มีอะไรผิดปกติ?

คำตอบ:


15

มันใช้งานได้ดีปัญหาคือคุณเข้าใจผิดว่าสถานที่ทำงานอย่างไร Nginx จะใช้บล็อกตำแหน่งที่ตั้งหนึ่งบล็อกเท่านั้นไม่เคยมากกว่าหนึ่งบล็อก ดังนั้นเมื่อคุณมีสถานที่สองแห่ง

location ~ \.php$และlocation /adminและ URI /admin/index.phpนั้นเป็นตำแหน่งแรกของคุณ แต่ตำแหน่งที่สองใช้ไม่ได้ แม้ว่าคุณจะต้องใช้การเขียนซ้ำภายในสถานที่แล้ว nginx จะยกเลิกคำสั่งและแยกพวกเขาสำหรับตำแหน่งใหม่

นี่คือเหตุผลที่คุณโพสต์การกำหนดค่าแบบเต็มเสมอเพื่อที่คุณจะได้ไม่ซ่อนสิ่งที่ผิดปกติ


ขออภัยที่ไม่โพสต์การตั้งค่าเสร็จสมบูรณ์คุณพูดถูก สำหรับคำตอบนี้ไม่เป็นความจริง นี่คือตัวอย่างจากเอกสาร: wiki.nginx.org/HttpCoreModule#locationและในที่อื่น ๆ บล็อกตำแหน่งหลายตำแหน่งทำงานได้สำหรับฉัน
Temnovit

1
ขออภัย แต่มันถูกต้อง 100% Nginx สามารถค้นหาผ่านบล็อกสถานที่หลายแห่ง แต่จะใช้คำสั่งของหนึ่งในนั้นเท่านั้น ตัวเลือกใดขึ้นอยู่กับกฎที่ระบุไว้ในหน้าเว็บที่คุณเชื่อมโยง
Martin Fjordvald

@MartinFjordvald วิธีการแก้ปัญหานี้คืออะไร?
chaosguru


1
@Juanitocalero ไม่จริง ๆ ไม่ใช่เอกสารทางการไม่ใช่คู่มือเริ่มต้นที่ดีมากเอกสารอ้างอิงสำหรับไวยากรณ์และข้อมูลพื้นฐานเพิ่มเติม
Martin Fjordvald
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.