標準で用意されているライブラリでPythonを使おうと思ったので、Nginxで受けたリクエストをPythonで書かれたプログラムで返すということにしました。Nginxは基本的にリクエストを受け、その裏でWSGI(Python)で処理する流れになります(Nginx(80番ボート) -> WSGI(9001番ポート) -> Nginx)。WSGIは一つの規格で、Pythonの受け皿となるサーバーはuWSGIが良く利用されるようなので、これを利用する事にしました。
環境構築までの手順は次の通りです(AWSのAmazon Linux)。
sudo yum install nginx sudo yum install python-pip sudo yum install make gcc sudo yum install libxml2-devel sudo yum install python-devel sudo pip-python install uwsgi
Pythonのプログラムは次の通りです(hello.py)。
def application(environ, start_response): start_response('200 OK', [('Content-type', 'text/html')]) return "<html><head><title>Test</title></head><body><div>Hello</div></body></hetml>"
そして、uWSGIの単体での起動は次の通りです。
uwsgi --http :8080 --wsgi-file hello.py --callable application
プログラムが正しく動いているかどうか確認するにはcURLでテストすると手軽です。
curl 127.0.0.1:8080
応答に...が返ってくれば問題ありません。
次にNginxの設定をします。
server { listen 8080; server_name localhost; location / { uwsgi_pass 127.0.0.1:9001; include uwsgi_params; } }
設定が完了したら、uWSGIとNginxを起動します。
uwsgi --master --socket 127.0.0.1:9001 --wsgi-file hello.py --callable application sudo /etc/init.d/nginx start
この状態で起動すると他のコマンドは受け付けないので、他から次のコマンドを実行してHTMLが返ってくればOKです。
curl 127.0.0.1:8080
参考にさせていただいたページ: