web-dev-qa-db-ja.com

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

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を受け入れないようにしました。

他に見逃している可能性があるものはありますか?

22
kylehayes

あなたの応答はおそらくデフォルトでsub_filter_typesで定義されたものとは別のcontent-typeを持っています。

リファレンス: http://nginx.org/r/sub_filter_types

15
VBart

James T Snellがコメントで答えました:

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

11
Jan DB

ロケーションブロック内にある必要がありますか?また、おそらくマッチ引数の引用符はありませんか?

http://wiki.nginx.org/HttpSubModule

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