CentOS7 で chroot 環境で動く apache 2.4 の設定で、CGIがうまく動かないという相談を受けました。
apache 2.4 では mod_cgi ではなく mod_cgid を使うのですが、
[cgid:error] (13)Permission denied: [client *****] AH01257: unable to connect to cgi daemon after multiple tries: *****
のような感じのエラーが出て動かないという状況でした。
mod_cgid の設定は下記のようになっていました。
LoadModule cgid_module modules/mod_cgid.so <IfModule cgid_module> Scriptsock /var/run/cgid/cgisock </IfModule>
ここで「/var/run/cgid/」は chroot 環境のディレクトリに作られていて、パーミッションも与えられていて、実際 cgisock ファイルも apache が作成できている状況でした。
で実はこの「Scriptsock /var/run/cgid/cgisock」の指定のところ、よくあるのは「Scriptsock cgisock」のようにフルパスではなく書かれているのですが、この指定だと log ディレクトリ内に sgisock ファイルが作られてしまうため、このようにフルパスでの指定になっていました。
パーミッションについて色々試してもダメだったため、下記のように「Scriptsock /var/run/cgid/cgisock」を「Scriptsock cgisock」に修正して(もちろんディレクトリのパーミッションやオーナーは同じ設定)動かしたところ、無事に動くようになりました。
LoadModule cgid_module modules/mod_cgid.so <IfModule cgid_module> Scriptsock cgisock </IfModule>
なので cgisock ファイルは logディレクトリ内に作成されています。
chroot環境下のときの apache と mod_cgid のパスの扱いに齟齬がある?のかなと推測していますが、ちゃんと追って調べていません。
とりあえずこうやれば動く、ということだけ。