Mengapa sub_filter tampaknya tidak berfungsi saat digunakan bersama dengan proxy_pass?

21

Diberikan konfigurasi nginx berikut:

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 tidak merespons bagian respons dengan benar. Setelah saya menghapus proxy_pass dari konfigurasi, itu berfungsi dengan baik. Banyak orang dengan masalah ini akhirnya memiliki kompresi gzip dari server hulu. Saya telah memverifikasi bahwa server hulu saya tidak mengaktifkan penyandian gzip untuk tanggapannya. Tapi untuk berjaga-jaga, saya juga menggunakan proxy_set_header di atas untuk tidak menerima gzip.

Apakah ada hal lain yang berpotensi hilang?

kylehayes
sumber

Jawaban:

15

Respons Anda mungkin memiliki tipe konten lain dari yang ditentukan sub_filter_typessecara default.

Referensi: http://nginx.org/r/sub_filter_types

VBart
sumber
25
Saya tidak memiliki proxy_set_header Terima-Pengkodean ""; Anda memerlukannya untuk memberi tahu backend bahwa kompresi tidak diizinkan dalam respons.
James T Snell
1
Jawaban asli harus diedit untuk memasukkan komentar @JamesTSnell, yang tanpanya jawabannya tidak berguna.
HeadCode
7

James T Snell menjawabnya dalam komentar:

Saya tidak memiliki proxy_set_header Terima-Pengkodean ""; Anda memerlukannya untuk memberi tahu backend bahwa kompresi tidak diizinkan dalam respons.

Jan DB
sumber
0

apakah harus di dalam blok lokasi? juga, mungkin tidak ada kutipan pada pertandingan arg?

http://wiki.nginx.org/HttpSubModule

location / {   sub_filter      
      </head>   
      '</head><script
      language="javascript" src="$script"></script>';   
      sub_filter_once on;
}
nandoP
sumber