バックエンド サーバーへのリバース プロキシとして Nginx (バージョン 1.9.9) を使用しています。POSTリクエストの内容に基づいて認証・認可を行う必要があります。そして、auth_request ハンドラーで POST リクエストの本文を読み取るのに問題があります。これが私が得たものです。
Nginx の構成 (関連部分):
server {
location / {
auth_request /auth-proxy;
proxy_pass http://backend/;
}
location = /auth-proxy {
internal;
proxy_pass http://auth-server/;
proxy_pass_request_body on;
proxy_no_cache "1";
}
}
そして、認証サーバー コード (Python 2.7) では、次のようにリクエスト本文を読み取ろうとします。
class AuthHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def get_request_body(self):
content_len = int(self.headers.getheader('content-length', 0))
content = self.rfile.read(content_len)
return content
content_len を出力したところ、正しい値でした。ただし、self.rfile.read() は単純にハングします。そして最終的にタイムアウトになり、"[Errno 32] Broken pipe" を返します。
これは、テストデータをサーバーに投稿する方法です。
$ curl --data '12345678' localhost:1234
上記のコマンドも同様にハングし、最終的にタイムアウトになり、「Closing connection 0」が出力されます。
私がやっていることに明らかな間違いはありますか?
どうもありがとう!