nginxで、.cgiなどのCGIを動かす (2019/07/14 更新)

この記事は約6分で読めます。

apahce (httpd)では、perl等で作成した、レガシーなCGIを動かすのは、簡単な事でした。
しかし、nginxでは、いろいろと設定が必要です。

今回、fcgiwrap / spawn-fcgi
で動かします。

別途、fcgi-perl / fastcgi-wrapper.pl
という方法もあるようですが、未実施です。

作業の順番を入れ替えました(2019/08/01)

fcgiwrap

wget http://github.com/gnosek/fcgiwrap/tarball/master

# tar xzvf master
gnosek-fcgiwrap-(英数字)/
gnosek-fcgiwrap-(英数字)/.gitignore
gnosek-fcgiwrap-(英数字)/COPYING
gnosek-fcgiwrap-(英数字)/Makefile.in
gnosek-fcgiwrap-(英数字)/README.rst
gnosek-fcgiwrap-(英数字)/configure.ac
gnosek-fcgiwrap-(英数字)/fcgiwrap.8
gnosek-fcgiwrap-(英数字)/fcgiwrap.c
gnosek-fcgiwrap-(英数字)/systemd/
gnosek-fcgiwrap-(英数字)/systemd/fcgiwrap.service
gnosek-fcgiwrap-(英数字)/systemd/fcgiwrap.socket

↑ダウンロードして、解凍をします。
# yum install epel-release
# yum install spawn-fcgi fcgi-devel

↑先に「spawn-fcgi,fcgi-devel」を入れます。
# cd gnosek-fcgiwrap-(英数字)
# autoreconf -i
# ./configure
# make
# make install
install -d -m 755 /usr/local/sbin
install -m 755 fcgiwrap /usr/local/sbin
install -d -m 755 /usr/local/man/man8
install -m 644 fcgiwrap.8 /usr/local/man/man8

↑fcgiwrapを、インストールをします。

上記の、fcgiwrapは、サービスとして起動をしなくてもいいのです・・・

gnosek-fcgiwrap-(英数字)/systemd/fcgiwrap.service
gnosek-fcgiwrap-(英数字)/systemd/fcgiwrap.socket

/usr/lib/systemd/system/
以下に持って行き、サービスを起動させてたりしてみたが・・・

Cannot get script name, are DOCUMENT_ROOT and SCRIPT_NAME (or SCRIPT_FILENAME) set and is the script executable?

などとエラーが出たりして、試行錯誤・・・
不要である・・・(笑)

# ps ax |grep fcgi
 3637 ?        Ss     0:00 /usr/local/sbin/fcgiwrap


spawn-fcgi
から
/usr/local/sbin/fcgiwrap
が、起動されます。

spawn-fcgi

# yum install epel-release
# yum install spawn-fcgi fcgi-devel

↑spawn-fcgiをインストールをします。(先に入れたので、不要ですが、一応、明記)
# vi /etc/sysconfig/spawn-fcgi
OPTIONS="-u nginx -g nginx -a 127.0.0.1 -p 9001 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap"

↑上記のようにオプションを指定します。「-u」と「-g」で、nginxが稼働するユーザ/グループを指定します。
# vi /usr/local/nginx/conf/nginx.conf

location ~ .cgi$ {
        root           /home/(xxxxx)/web;
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_index index.cgi;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /usr/local/nginx/conf/fastcgi_params;
}

↑(設定は、一部)
このように、nginxの設定をします。
拡張子「.cgi」でCGIが起動するようにします。
# systemctl start spawn-fcgi
# systemctl status spawn-fcgi
● spawn-fcgi.service - LSB: Start and stop FastCGI processes
   Loaded: loaded (/etc/rc.d/init.d/spawn-fcgi; bad; vendor preset: disabled)
   Active: active (running) since Thu 2019-XX-XX XX:XX:XX JST; 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3737 ExecStart=/etc/rc.d/init.d/spawn-fcgi start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/spawn-fcgi.service
           └─3749 /usr/local/sbin/fcgiwrap

Apr 04 XX:XX:XX (ホスト名) systemd[1]: Starting LSB: Start and stop FastCGI processes...
Apr 04 XX:XX:XX (ホスト名) spawn-fcgi[3737]: Starting spawn-fcgi: [  OK  ]
Apr 04 XX:XX:XX (ホスト名) systemd[1]: Started LSB: Start and stop FastCGI processes.

↑「spawn-fcgi」を起動させます。

CGIを動かす

実際にWEBコンテンツとしてCGIを動かしてみたいと思います。

vi xx.cgi

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<h1>CGI CHECK</h1>\n";

↑うまく、動きました。

タイトルとURLをコピーしました