maemaewaterの日記

エンジニア兼ゲーマーの人の日記です。PHP/Python/JavaScript/C#/C++などによるプログラムに関することを主に書いています。

NginxとPython

標準で用意されているライブラリでPythonを使おうと思ったので、Nginxで受けたリクエストをPythonで書かれたプログラムで返すということにしました。Nginxは基本的にリクエストを受け、その裏でWSGI(Python)で処理する流れになります(Nginx(80番ボート) -> WSGI(9001番ポート) -> Nginx)。WSGIは一つの規格で、Pythonの受け皿となるサーバーはuWSGIが良く利用されるようなので、これを利用する事にしました。

環境構築までの手順は次の通りです(AWSAmazon 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


参考にさせていただいたページ: