「広告」

perl のCGIで、Service Unavailable

「広告」
記事内に広告が含まれています。
「広告」

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カ所を有効に!

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