例えば、
http://www.exsample.com/cgi-bin/test.cgi
にアクセスすると、
#!/usr/bin/perlprint "Content-type: text/html\n\n";print "Hello, World.";
のような、CGI プログラムのソースが表示されてしまう。
さて、今回は Debian 系のパッケージ、いわゆる APT パッケージの Apache 2.4 を入れてみた。
RedHat 系世界の住民の俺から見ると、頭がおかしいんじゃないか?と思うような Apache 設定ファイルの構成である。
てか、俺は Apache に関しては「ソースからインストール派」なので、RPM パッケージの Apache の設定ファイル群にもイラっとさせられるんだけどね(笑)
まあ、この辺は宗教問題なのでこれ以上の言及は控えておきましょう(笑)
CGI プログラムのソースが表示されてしまう件に話を戻す。
まず、VirtualHost 設定の該当部分。
ScriptAlias /cgi-bin/ "/usr/local/share/apache/cgi-bin/"<Directory "/usr/local/share/apache/cgi-bin">AllowOverride AllOptions +ExecCGIAddHandler cgi-script .cgi .plRequire all granted</Directory>
という記述あり。
なんか、ScriptAlias と Handler/ExecCGI の設定が二重にされてますけど(^^;
まあ、ScriptAlias してるんだから +ExecCGI は不要だと思うけど、現行、これで問題なく動いているので、とりあえずこれで良しとする(笑)
で、実際に CGI module を読み込んでるんかいな?と確認してみると、
# apache2ctl -MLoaded Modules:core_module (static)so_module (static)watchdog_module (static)http_module (static)log_config_module (static)logio_module (static)version_module (static)unixd_module (static)access_compat_module (shared)alias_module (shared)auth_basic_module (shared)authn_core_module (shared)authn_file_module (shared)authz_core_module (shared)authz_host_module (shared)authz_user_module (shared)autoindex_module (shared)deflate_module (shared)dir_module (shared)env_module (shared)filter_module (shared)mime_module (shared)mpm_event_module (shared)negotiation_module (shared)setenvif_module (shared)status_module (shared)
ありり?cgi_module がロードされてませんねえ。
# ls -la /etc/apache2/mods-available/cgi.load-rw-r--r-- 1 root root 58 7月 6 2016 /etc/apache2/mods-available/cgi.load
cgi.load というファイルはあるので、こいつのシンボリックリンクを /etc/apache2/mods-enabled の下に作ってやる。
ln コマンド使って手動でやればすぐだが、せっかくなので a2enmod コマンドを使ってみる。
これ、シンボリックリンクを作ってくれるだけのコマンドのようだ。こんなコマンドの使い方を覚えている暇があれば、さっさと手動でリンクしちゃった方が早いじゃんとか言いながら笑ってはいけない。Debian 信者からむっちゃこのコマンドの正当性を説明されるで(笑)
# ls -la /etc/apache2/mods-enabled/*cgi*ls: /etc/apache2/mods-enabled/*cgi* にアクセスできません: そのようなファイルやディレクトリはありません# a2enmod cgi.loadYour MPM seems to be threaded. Selecting cgid instead of cgi.Enabling module cgid.To activate the new configuration, you need to run:service apache2 restart# ls -la /etc/apache2/mods-enabled/*cgi*lrwxrwxrwx 1 root root 27 1月 18 17:31 /etc/apache2/mods-enabled/cgid.conf -> ../mods-available/cgid.conflrwxrwxrwx 1 root root 27 1月 18 17:31 /etc/apache2/mods-enabled/cgid.load -> ../mods-available/cgid.load
素晴らしい(笑)
しかし、俺は cgi モジュールをロードしたかったのに、なぜに cgid が???
cgid って、Perl とかの生エラーメッセージをログに吐いてくれないからいやなんよね。
ま、いっか(^^; 今度時間が出来たら対応しよう。
で、サーバ再起動。
# service apache2 restart
CGI モジュールも、
# apache2ctl -M|grep cgicgid_module (shared)
無事ロードされたね。
これで、
http://www.exsample.com/cgi-bin/test.cgi
にアクセスすると、
Hello, World
と表示されるようになる。
どう?RedHat 系世界の住民の皆さん。気持ち悪いでしょ?(笑)
コメントする