Score:0

Nginx ส่งคืน 200 แทน 206

ธง cn

ฉันมีการตั้งค่าเซิร์ฟเวอร์ Nginx (openresty) ที่มีไฟล์ขนาดใหญ่ เมื่อลูกค้าต้องการไฟล์ช่วง Nginx จะส่งกลับ 200 แทนที่จะเป็น 206

นี่คือตัวอย่างการทดสอบ curl ของฉัน:

ขด -v -I -r 0- -X GET http://172.29.22.11/myBigFile.bin
* ลอง 172.29.22.11:80...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับพอร์ต 172.29.22.11 (172.29.22.11) 80 (#0)
> รับ /myBigFile.bin HTTP/1.1
> เจ้าภาพ: 172.29.22.11
> ช่วง: ไบต์ = 0-
> User-Agent: curl/7.68.0
> ยอมรับ: */*
> 
* ทำเครื่องหมายที่บันเดิลว่าไม่รองรับการใช้งานหลายอย่าง
< HTTP/1.1 200 ตกลง
HTTP/1.1 200 ตกลง
< การเข้ารหัสการถ่ายโอน: chunked
การเข้ารหัสการถ่ายโอน: chunked
< การเชื่อมต่อ: รักษาชีวิต
การเชื่อมต่อ: มีชีวิตอยู่
< หมดอายุ: วันพุธที่ 21 ธันวาคม 2022 09:10:00 GMT
หมดอายุ: วันพุธที่ 21 ธันวาคม 2022 เวลา 09:10:00 น. GMT
< การควบคุมแคช: max-age=31536000
การควบคุมแคช: max-age=31536000
< การควบคุมการเข้าถึง-อนุญาตส่วนหัว: *
การเข้าถึง-ควบคุม-อนุญาต-ส่วนหัว: *
< การควบคุมการเข้าถึง-อนุญาต-ต้นทาง: *
การควบคุมการเข้าถึงอนุญาตแหล่งกำเนิด: *
< myCacheStatus: HIT
สถานะ myCache: HIT
< ปรัชญา: สาธารณะ
Pragma: สาธารณะ
< การควบคุมแคช: สาธารณะ
การควบคุมแคช: สาธารณะ
 
< 
* พบส่วนเกิน: ส่วนเกิน = 448 url =/myBigFile.bin A (เนื้อหาความยาวเป็นศูนย์)
* การเชื่อมต่อ #0 ไปยังโฮสต์ 172.29.22.11 ยังคงอยู่

ฉันจะกำหนด Nginx ให้ส่งคืน 206 ที่เหมาะสมได้อย่างไร

----- การเพิ่มการกำหนดค่าของฉัน -----

        ที่ตั้ง / {
            ภายใน;
            
            proxy_cache my_cache;
        
            proxy_cache_key $uri;

            # ตั้งเวลา ceching สำหรับ 200 respinse -> เป็น 7 วัน
            proxy_cache_valid 200 7d;

            # ล้างธงที่ฉันไม่ต้องการ
            more_clear_headers 'เข้าถึง-ควบคุม-อนุญาต-ส่วนหัว';
            more_clear_headers 'เข้าถึง-ควบคุม-อนุญาต-กำเนิด';
            more_clear_headers 'การเข้าถึง*';
            more_clear_headers 'การจัดการเนื้อหา';
            more_clear_headers 'วันที่';
            more_clear_headers 'x-proxy-cache';
            more_clear_headers 'เซิร์ฟเวอร์';

            # เพิ่มส่วนหัวเพื่อจัดการกับ CORS
            add_header Access-Control-Allow-Headers '*';
            add_header Access-Control-Allow-Origin '*';

            # เพื่อลดแบนด์วิธ ฉันใช้การบีบอัด
            เปิด gzip;

            # ตั้งค่า proxy และสั่งให้ cech แม้ว่า thre จะไม่มี Cache-Control
            proxy_ignore_headers X-Accel-หมดอายุ หมดอายุ การควบคุมแคช;
            เปิด proxy_cache_lock;
            proxy_cache_lock_timeout 0 วินาที;
            proxy_cache_lock_age 200 วินาที;
            อัปเดต proxy_cache_use_stale;


            # เรียกใช้พร็อกซีย้อนกลับ
            proxy_pass http://0.0.0.0:3000;

            # ตั้งค่า ceching ท้องถิ่นในฝั่งไคลเอนต์ เราจะเริ่มที่ 365 วัน
            หมดอายุ 365d;
            add_header Pragma สาธารณะ;
            add_header แคชควบคุม "สาธารณะ";

        }
in flag
นั่นควรเป็นการตั้งค่าเริ่มต้น กรุณาแสดงการกำหนดค่าของคุณ
jp flag
อาจซ้ำกันได้ https://serverfault.com/questions/965209/multipart-ranges-in-nginx-reverse-proxy
Meir avatar
cn flag
@GeraldSchneider ฉันเพิ่มการกำหนดค่า
Meir avatar
cn flag
@AlexD คำตอบนั้นไม่ดี (ใช้วานิช / อย่าแคชคำขอเหล่านั้น)
in flag
ดังนั้น nginx จึงทำหน้าที่เป็น reverse proxy เท่านั้น นั่นหมายความว่าปัญหาน่าจะอยู่ที่เซิร์ฟเวอร์ส่วนหลังของคุณ ไม่ใช่ nginx
Meir avatar
cn flag
@GeraldSchneider ฉันจะเพิ่ม nginX ฟังก์ชันการส่งคืน 206 ได้อย่างไรเมื่อไฟล์ถูกแคชแล้ว และฉันจะทำอย่างไรแม้ว่าเซิร์ฟเวอร์ส่วนหลังจะไม่รองรับ
Meir avatar
cn flag
มันดูแปลกสำหรับฉันว่าทำไมฉันต้องเปลี่ยนไปใช้สารเคลือบเงา
djdomi avatar
za flag
คุณไม่สามารถบังคับให้แคชบน nginx อย่างไรก็ตาม หากบริการของคุณฟังบน 0.0.0.0 ซึ่งสามารถเข้าถึงได้โดยตรงจากอินเทอร์เน็ต โดยปกติคุณใช้ 127.0.0.1 แทน 0.0.0.0

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา