nginxのproxy_passの稼働確認でHTTPリクエストヘッダをレスポンスに埋めて返すだけのちょっとしたモックサーバが欲しくなりました。
簡易HTTPサーバといえば、ただの静的なファイル配信だけならpythonのワンライナーで十分なんだけど、
$ sudo python -m SimpleHTTPServer 80
今回はちょっとHTTPリクエストヘッダをレスポンスのbodyに埋めて返したかったので、簡単なpythonスクリプトを書いてみた。
ちなみになんでpythonなのかというと、多くのLinuxディストリビューションにデフォルトで入ってて標準ライブラリだけで追加の依存モジュールなしでできるという理由からpythonで実装してます。ちなみにpythonは2.7系です。
$ python --version
Python 2.7.12
こんなかんじのスクリプトを mock_server.py
という名前で作る。
mock_server.py
#!/usr/bin/env python
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write('%s %s %s\n' % (self.command, self.path, self.request_version))
self.wfile.write(self.headers)
self.finish()
self.connection.close()
port = 80
server = HTTPServer(('', port), RequestHandler)
server.serve_forever()
80番ポートをリッスンする都合でsudo経由で実行する。
$ sudo python mock_server.py
curlしてみる。
$ curl -H "Host: hoge.example.com" -H "X-MOCK-PROXY-PASS: hoge.example.com" http://127.0.0.1/hoge
GET /hoge HTTP/1.1
Host: hoge.example.com
User-Agent: curl/7.47.1
Accept: */*
X-MOCK-PROXY-PASS: hoge.example.com
これでテストしたいnginxを間に挟んで、curl => nginx => mockサーバみたいな構成にすれば、期待したHTTPヘッダが渡ってきてるか見れるし、適当なヘッダをデバッグ用に埋めたりしたらどのlocationでproxy_passされてるかとか簡単にテストできそうな気がする。