Kensuke Kousaka's Blog

Notes for Developing Software, Service.

NginxでCGIを動かす

Pythonで書いたCGIをnginxで動かしたいと思ったが,設定に思いの外手間取ったのでメモ.ちなみに,OSはArch Linixを想定している.

fcgiwrapの導入

nginxで普通のCGIを動かすために,fcgiwrapを以下のコマンドでインストールする.

$ yaourt -S fcgiwrap

インストールできたら,以下のコマンドで/usr/lib/systemd/system/の下にあるfcgiwrap.serviceファイルを/etc/systemd/system/の下にコピーする.

# cp /usr/lib/systemd/system/fcgiwrap.service /etc/systemd/system/fcgiwrap.service

コピーできたら,/etc/systemd/system/fcgiwrap.serviceファイルを以下のように編集する.

fcgiwrap.service to use for running CGI on nginx

編集できたら,以下のコマンドでサービスの起動と自動起動の設定を行う.

# systemctl start fcgiwrap.service
# systemctl enable fcgiwrap.service

nginxの設定

次に,nginxの設定を行う.nginxのserverブロック内に以下のようなものを追加する.

location /cgi/ {
  root /your/document/root/here;
  fastcgi_pass unix:/run/fcgiwrap.sock;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME /your/document/root/here$fastcgi_script_name;
}

locationの後ろの/cgi/には,CGIプログラムを置くディレクトリを書く.この例は,ドキュメントルートの下にcgiディレクトリを作成し,その下にCGIプログラムを置く場合の設定となる./your/document/root/hereと書いてある部分には,実際のドキュメントルートのフルパスを書く.

以上作業が終わったら,以下のコマンドでnginxのリロードを行う.

# systemctl reload nginx

以上ですべての設定が完了となる.nginxで行った設定にしたがって適切な場所にCGIプログラムを配置し,実行権限を与えれば,nginxでCGIプログラムが実行できるはずだ.