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を受け入れないようにしました。
他に見逃している可能性があるものはありますか?
あなたの応答はおそらくデフォルトでsub_filter_types
で定義されたものとは別のcontent-typeを持っています。
James T Snellがコメントで答えました:
Proxy_set_header Accept-Encoding ""がありませんでした。レスポンスでは圧縮が許可されていないことをバックエンドに伝えるために必要です。
ロケーションブロック内にある必要がありますか?また、おそらくマッチ引数の引用符はありませんか?
http://wiki.nginx.org/HttpSubModule
location / { sub_filter
</head>
'</head><script
language="javascript" src="$script"></script>';
sub_filter_once on;
}