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";
↑うまく、動きました。