Score:0

วิธีหลีกเลี่ยงการแคชอย่างบ้าคลั่งด้วยส่วนหัว "Vary: Cookie" ใน NGINX

ธง ke

ฉันรู้ วารี: คุกกี้ เป็น ไม่ชอบเนื่องจากทำให้เกิดการแคชของคุกกี้ทุกรูปแบบที่ผู้ใช้อาจรายงาน ในทางกลับกัน ถ้าไม่มีมัน ฉันต้องใช้มัน การควบคุมแคช: ไม่มีแคช เพื่อบอกเซิร์ฟเวอร์แคช NGINX ของฉันให้ข้ามเนื้อหาแคชทั้งหมดนั้น อาจ ให้ผู้ใช้เข้าสู่ระบบ (บังเอิญทุกหน้าในเว็บไซต์ของฉัน เนื่องจากมีกล่องบัญชีที่ด้านบนของหน้า)

ฉันจะส่งคุกกี้เฉพาะเมื่อผู้ใช้เข้าสู่ระบบ ดังนั้นการดูหน้าเว็บส่วนใหญ่จะได้รับประโยชน์จากการแคช ฉันต้องการจำกัดให้แคบลงเพื่อให้มีเพียงสองรูปแบบ: เวอร์ชันแคชสำหรับผู้ใช้ที่พวกเขามี "ความแปรปรวน" ไม่ คุกกี้และเวอร์ชันที่ไม่แคชสำหรับผู้ที่มีคุกกี้ (เช่น ผู้ใช้เข้าสู่ระบบและมีคุกกี้รับรองความถูกต้อง)

ถ้าฉันเพิ่ม "Vary: Cookie" ในโปรแกรม Perl ของฉัน จะมีวิธีบอก NGINX ไหมว่าในกรณีนี้ ควรสนใจเฉพาะว่า รหัสเซสชัน คุกกี้มีอยู่หรือไม่? บางสิ่งบางอย่างตามแนว -- เพื่อสร้างส่วนหัวหลอก -- ต่างกันไป: Cookie('sessionId')? หากมีวิธีการนำสิ่งนี้ไปใช้ในส่วนหัวที่สร้างโดยสคริปต์ที่ NGINX จะเคารพ ฉันคิดว่าฉันควรใส่ไว้ในการกำหนดค่า NGINX แต่วิธีแก้ไขใด ๆ จะได้รับการชื่นชม

ฉันไม่แน่ใจว่าจะทดสอบได้อย่างไรว่าฉันจะทำให้ NGINX คลั่งไคล้การแคชหรือไม่ แต่ฉันสงสัยว่าบางสิ่งตามบรรทัดเหล่านี้อาจใช้งานได้หรือไม่: กับผู้ดูที่ไม่ได้เข้าสู่ระบบ สคริปต์จะส่ง วารี: คุกกี้แต่กับผู้ชมที่ เป็น เข้าสู่ระบบมันส่งทั้งส่วนหัวนั้นและ การควบคุมแคช: ไม่มีแคช. NGINX จะเข้าใจสิ่งนี้หรือไม่ว่าบอกให้แคชการตอบสนองแรก แต่ไม่ใช่ตัวแปร หรือฉันจะทำบางอย่างผิดพลาดในแบบที่ฉันยังจับไม่ได้ในตอนนี้?

อัปเดต: นี่คือตัวอย่างบล็อกเซิร์ฟเวอร์ของฉัน:

เซิร์ฟเวอร์ {
    server_name myservername.tld
    ฟัง 80;

    ที่ตั้ง / {
        proxy_cache $PROXY_CACHE;

        proxy_cache_valid 200 302 60m;
        proxy_cache_valid 404 1m;
        ข้อผิดพลาด proxy_cache_use_stale หมดเวลา http_429 http_500 http_502 http_503 http_504;
        เปิด proxy_cache_background_update;
        เปิด proxy_cache_revalidate;
        proxy_cache_min_uses 1;
        เปิด proxy_cache_lock;

        proxy_pass $scheme://$APACHE_PROXY_REQ_IP:$APACHE_PROXY_REQ_PORT;
    }

}
Michael Hampton avatar
cz flag
โปรดโพสต์บล็อก nginx `server` ของคุณ
ke flag
ฉันเพิ่มบล็อก `เซิร์ฟเวอร์` ขอบคุณ!
Score:1
ธง cz

คุณควรดูคำแนะนำ proxy_no_cache และ proxy_cache_bypass.

proxy_no_cache บอก nginx ถึงเงื่อนไขที่ไม่ควรแคชการตอบสนองจากแอปของคุณ คุณสามารถกำหนดให้เป็นอะไรก็ได้ที่คุณต้องการ เช่น:

proxy_no_cache $cookie_sessionid;

proxy_cache_bypass ทำงานในทิศทางอื่น: จะบอก nginx เมื่อไม่ควรส่งคำขอจากแคช แต่ส่งต่อไปยังแอปของคุณแทน แม้ว่าจะมีรายการแคชอยู่ก็ตาม

โพสต์คำตอบ

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