
他の Web アプリケーションの前で nginx をリバース プロキシとして使用すると、PUT
リクエストが転送されず、(アップストリーム サーバーではなく) nginx によって生成された HTTP 405 が表示されます。
http_405 の方法を試しましたproxy_next_upstream
が、うまくいきませんでした。 nginx 自体が、reverse_proxy が設定されている location ブロックに対して HTTP メソッドをチェックするのはなぜか疑問です。
答え1
ここで問題となるのは Nginx ではありません。リクエストが一致するPUT
場合、期待どおりにリバース プロキシ ブロックでリクエストを転送します。location
別のディレクティブがありlocation
、これは画像がリバース プロキシ経由で提供されないようにするものです。.png
最終的にはすべてが一致し (他のファイル拡張子も一致)、アップロード URL も一致しました。
間違った場所ブロックの場合、エラー 405 が正しいです。解決策は、アップロード要求が実際にリバース プロキシに転送されることを確認することです。
動作するリバース プロキシ構成の例:
# proxy requests for /upload the a webapp, which implements PUT
location ^~ /upload {
proxy_pass "https://backendserver:1234/something";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
tcp_nodelay on;
}
優先される他の場所ブロックがない場合、構成は正常に機能します。
私の問題は別のブロックにありました:
# This block matched requests for /upload/somefile.png before the proxy block
location ~* ^(/.*png|/.*jpg|/.*jpeg|/.*gif)$ {
# some directives without proxy_pass
}