เหตุใด sub_filter จึงไม่ทำงานเมื่อใช้ร่วมกับ proxy_pass


21

รับการกำหนดค่าต่อไปนี้ของ nginx:

server {
    listen  80;
    server_name apilocal;
    sub_filter  "apiupstream/api" "apilocal";
    sub_filter_once off;
    location /people/ {
            proxy_pass  http://apiupstream/api/people/;
            proxy_set_header Accept-Encoding "";
    }
}

Sub_filter ไม่ตอบสนองส่วนต่าง ๆ ของการตอบสนองอย่างเหมาะสม เมื่อฉันลบ proxy_pass ออกจากการกำหนดค่ามันทำงานได้อย่างถูกต้อง หลายคนที่มีปัญหานี้ท้ายมีการบีบอัด gzip จากเซิร์ฟเวอร์ upstream ฉันตรวจสอบแล้วว่าเซิร์ฟเวอร์อัปสตรีมของฉันไม่ได้เปิดการเข้ารหัส gzip ไว้สำหรับการตอบกลับ แต่ในกรณีที่ฉันใช้ proxy_set_header ด้านบนเพื่อไม่ยอมรับ gzip

อาจมีอย่างอื่นที่ฉันหายไป?

คำตอบ:


15

การตอบกลับของคุณอาจมีประเภทเนื้อหาอื่น ๆ กว่าที่กำหนดไว้sub_filter_typesโดยค่าเริ่มต้น

การอ้างอิง: http://nginx.org/r/sub_filter_types


25
ฉันไม่มี proxy_set_header ยอมรับการเข้ารหัส ""; คุณต้องการที่จะบอกแบ็กเอนด์ว่าการบีบอัดไม่ได้รับอนุญาตในการตอบกลับ
James T Snell

1
คำตอบเดิมควรได้รับการแก้ไขเพื่อรวมความคิดเห็น @JamesTSnell โดยที่คำตอบนั้นไร้ประโยชน์
HeadCode

7

James T Snell ตอบมันในความคิดเห็น:

ฉันไม่มี proxy_set_header ยอมรับการเข้ารหัส ""; คุณต้องการที่จะบอกแบ็กเอนด์ว่าการบีบอัดไม่ได้รับอนุญาตในการตอบกลับ


0

จำเป็นต้องอยู่ในบล็อคตำแหน่งหรือไม่ ยังอาจจะไม่มีราคาในการจับคู่หาเรื่อง?

http://wiki.nginx.org/HttpSubModule

location / {   sub_filter      
      </head>   
      '</head><script
      language="javascript" src="$script"></script>';   
      sub_filter_once on;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.