apache 2.4.x のソースインストールをして、perlのCGIを動かしたら、
「Service Unavailable」というエラー・・・
その覚え書きを。
apache 2.4.xx サーバー基本設定
apache2.4,php7.3 ソースインストール
でインストールをします。
今回、phpとSSLは、処理を省きました・・・
VirtualHost設定
VirtualHostでなくても、いいのですが・・・(笑)
vi /usr/local/apache2/conf/httpd.conf #ServerName www.example.com:80 ServerName 127.0.0.1:80
↑ServerNameを登録します。
<Directory /> AllowOverride none Require all denied </Directory>
↑の下あたりに
<Directory "/home"> Options All -Indexes +SymLinksIfOwnerMatch -FollowSymLinks AllowOverride AuthConfig FileInfo Indexes Limit Options=MultiViews,Indexes Require all granted </Directory>
↑を加えます。
#Include conf/extra/httpd-vhosts.conf ↓ Include conf/extra/httpd-vhosts.conf
↑有効にします。
vi /usr/local/apache2/conf/extra/httpd-vhosts.conf <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com" ServerName dummy-host.example.com ServerAlias www.dummy-host.example.com ErrorLog "logs/dummy-host.example.com-error_log" CustomLog "logs/dummy-host.example.com-access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/usr/local/apache2/docs/dummy-host2.example.com" ServerName dummy-host2.example.com ErrorLog "logs/dummy-host2.example.com-error_log" CustomLog "logs/dummy-host2.example.com-access_log" common </VirtualHost>
↑2つのブロックは、コメントにして(もしくは、削除して)、
<VirtualHost XXX.XXX.XXX.XXX:80> ServerName (FQDN) DocumentRoot /home/test1/web/ CustomLog /home/test1/logs/access_log combined ErrorLog /home/test1/logs/error_log </VirtualHost>
↑を、入れる
Perl CGIの設置
# cd /home/ # mkdir test1 # mkdir test1/web # mkdir test1/log
# vi /home/test1/web/xx.cgi ----------------------------------------- #!/usr/bin/perl print "Content-type: text/html\n\n"; print " OK CGI\n"; -----------------------------------------
↑と、簡単なperlのプログラムを設置します。
# chmod a+x /home/test1/web/xx.cgi
↑パーミッションを変更します。
# /usr/local/apache2/bin/apachectl start
↑apacheを起動させます。
Perl CGI 稼働
↑とりあえず、アクセスすると、このようになります。
# vi /usr/local/apache2/conf/httpd.conf #AddHandler cgi-script .cgi ↓ AddHandler cgi-script .cgi
↑.cgi拡張子がCGIであると設定します。
↑同じように、.cgiが認識されません。
かつては、この設定変更で、perlのCGIは動いていました。
# vi /usr/local/apache2/conf/httpd.conf #LoadModule cgid_module modules/mod_cgid.so ↓ LoadModule cgid_module modules/mod_cgid.so
↑このCGIのモジュールを有効にします。
Service Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
↑エラーとなりました・・・
エラーログには、
[cgid:error] [pid 14346:tid 140025492145920] (22)Invalid argument: [client XXX.XXX.XXX.XXX:64465] AH01257: unable to connect to cgi daemon after multiple tries: /home/test1/web/xx.cgi
↑と、書かれる・・・
CGIのデーモンに繋がらないよ・・・と、エラーになっていました
# vi /usr/local/apache2/conf/httpd.conf <IfModule cgid_module> # # ScriptSock: On threaded servers, designate the path to the UNIX # socket used to communicate with the CGI daemon of mod_cgid. # #Scriptsock cgisock </IfModule> ↓ <IfModule cgid_module> # # ScriptSock: On threaded servers, designate the path to the UNIX # socket used to communicate with the CGI daemon of mod_cgid. # Scriptsock cgisock </IfModule>
↑と、「Scriptsock」の部分を有効にします。
↑これで、CGIが正常に稼働します。
Perl CGI 稼働 まとめ
perlのCGIを動作させるには
AddHandler cgi-script .cgi LoadModule cgid_module modules/mod_cgid.so Scriptsock cgisock
上記の3カ所を有効に!