proxy_passと組み合わせて使用​​すると、sub_filterが機能しないように見えるのはなぜですか?


20

次の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圧縮されることになります。アップストリームサーバーの応答でgzipエンコードが有効になっていないことを確認しました。ただし、念のため、上記のproxy_set_headerを使用してgzipを受け入れないようにしました。

潜在的に私が見逃している何かがありますか?

回答:


15

応答には、おそらくsub_filter_typesデフォルトで定義されている以外のコンテンツタイプがあります。

参照:http : //nginx.org/r/sub_filter_types


24
proxy_set_header Accept-Encoding ""がありませんでした。応答で圧縮が許可されていないことをバックエンドに伝えるために必要です。
ジェームズTスネル14年

1
元の回答は、@ JamesTSnellコメントを含めるように編集する必要があります。これがないと、回答は役に立ちません。
HeadCode

7

ジェームズ・T・スネルはコメントでそれに答えた:

proxy_set_header Accept-Encoding ""がありませんでした。応答で圧縮が許可されていないことをバックエンドに伝えるために必要です。


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.