ぼろサーバ改め新サーバの作成-その6

■CGI(Perl)を動かす  なんとか、修理後、サーバは安定してきたので、引き続き、サーバの設定。今回はCGI(Perl)が動くようにしてみる。  PHPやJavaが主流の今日、CGI(Perl)は古めかしいが、一応未 … “ぼろサーバ改め新サーバの作成-その6” の続きを読む

■CGI(Perl)を動かす
 なんとか、修理後、サーバは安定してきたので、引き続き、サーバの設定。今回はCGI(Perl)が動くようにしてみる。
 PHPやJavaが主流の今日、CGI(Perl)は古めかしいが、一応未だにあちこちでカウンターやらなんやらを使ってるので、ないとやっぱりちと困る。
 まずは、Apacheのconfファイルをいじって、CGIの設定を行う。

1.Options にExecCGIを追加

# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing “/” apply to ScriptAlias directives as to
# Alias.
#

ScriptAlias /cgi-bin/ “/var/www/cgi-bin/”

#
# “/var/www/cgi-bin\” should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory “/var/www/cgi-bin”>
  AllowOverride None
  Options ExecCGI     <-ここを修正
  Order allow,deny
  Allow from all
</Directory>

2.CGIの表示で文字化けがひどい場合
 WindowsからCGIのスクリプトをアップしている場合は、表示言語の指定をスクリプトの指定( META http-equiv=”Content-Type” content=”text/html; charset=Shift_JIS” など)に優先させるには「addDefaultcharset UTF-8」が有効になっていたら無効にしてみる。HPが文字化けする場合もこれを試す。

#
# Specify a default charset for all content served; this enables
# interpretation of all content as UTF-8 by default. To use the
# default browser choice (ISO-8859-1), or to allow the META tags
# in HTML content to override this choice, comment out this
# directive:
#
# AddDefaultCharset UTF-8  <-行の先頭に#をつけてコメント化し無効にする

3. AddHandler設定を有効化

AddHandler設定を有効化して、CGIスクリプトがハンドルされるようにする

#
# AddHandler allows you to map certain file extensions to “handlers”:
# actions unrelated to filetype. These can be either built into the server
# or added with the Action directive (see below)
#
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add “ExecCGI” to the “Options” directive.)
#
AddHandler cgi-script .cgi  <-ここの行の先頭の#をとる

4.シンボリックリンクを張る
cgi用に/usr/local/bin/perlでcgiが記述できるようシンボリックリンクを張る。一般的に配布されているCGIスクリプトは、perlの場所が、/usr/local/bin/perlで先頭行に書かれている事が多い。ここを修正してもいいが、そのまま使えるように、シンボリックリンクを張っておく。

コマンドラインで、

ln -s /usr/bin/perl /usr/local/bin/perl

を実行する。

5.CGI実行時Internal Errorが多発してうまく実行できない場合
 主にこれは、WindowsとLinuxの行末の改行コードの違いによることが多い。サーバ上で、きちんと改行コードをLinuxに指定して保存しなおす。
または、Linuxでの改行はコード LF のみなので、DOS(Windows)上で作成したcgiスクリプトの先頭行の、

#!/usr/bin/perl ← このあとにCR+LFが入ってエラーとなる。なので、
#!/usr/bin/perl —  ← を追加してオプション指定と勘違いさせると、うまく動くこともある

6.動作テスト
cgi-binに、次のPerlのテストスクリプトをおいてテスト。

#!/usr/bin/perl
##
## printenv — demo CGI program which just prints its environment
##

print “Content-type: text/plain; charset=iso-8859-1\n\n”;
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|”|\\”|g;
print “${var}=\”${val}\”\n”;
}

上記ファイルを、vi等で作成し、test.cgiなどのファイル名で保存。
実行権限(パーミッション)を与えておく

# chmod 755 /var/www/cgi-bin/test.cgi

LAN内の端末に移動し、ブラウザを起動、サーバのIPアドレスにつづけて/cgi-bin/test.cgiへアクセスしてみる。

DOCUMENT_ROOT=”/var/www/html”
GATEWAY_INTERFACE=”CGI/1.1″
HTTP_ACCEPT=”text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8″
HTTP_ACCEPT_ENCODING=”gzip,deflate,sdch”
HTTP_ACCEPT_LANGUAGE=”ja,en-US;q=0.8,en;q=0.6″
HTTP_CONNECTION=”keep-alive”
HTTP_COOKIE=”PHPSESSID=tijh4jn3dmo433un1kh49ievo0; wfvt_1999777401=5440b1d12f101″
HTTP_HOST=”www.ekbt.net”
HTTP_USER_AGENT=”Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36″
PATH=”/sbin:/usr/sbin:/bin:/usr/bin”
QUERY_STRING=””   

以下略

などと、CGIスクリプトが実行され、結果が表示されればOK。
その他、日本語表示を含む時刻を表示するサンプルCGIスクリプト

#!/usr/bin/perl
##
## printenv — demo CGI program which just prints its environment
##

$time = time; # time関数は1970年1月1日0時0分0秒から現在までの秒数を返す
$jtime = localtime(time); # 日本時間のget
$gtime = gmtime(time); # グリニッジ標準時間のget(日本時間と9時間差)

print “Content-type: text/html; charset=utf-8\n\n”;
print “testjp.cgi“;
print “1970年1月1日0時0分0秒からの現在までの秒数….$time
“;
print “<hr>”;
print “現在の日付時刻は

“;
print “日本時間:$jtime
“;
print “標準時間:$gtime
“;
print ““;

※Content-type: text/html; charset=utf-8は、サーバ本体で作成している場合。もしWindowsのShift_JISファイルをアップしたら Content-Type\” content=\”text/html; charset=Shift_JIS とする。

※cgiが実行できない場合、実行権限(パーミッション)の設定を確かめる。SELinuxを使用している場合、強制モードになっていたら、それを許容(SELinuxを切る、警告は表示される)にしてみる。
※許容でもダメなら、これはSELinuxのせいではない。ディレクトリやファイルのパーミッションやディレクトリ構造などをもう一度確認してみる。

※cgi実行時、cgiからのファイルの書き込みが出来ない場合がある。SELinuxを使っている場合、強制モードになっていたら、それを許容(SELinuxを切る、警告は表示される)にしてみると、書き込みOKとなる場合もある。
これで実行書き込みできれば、cgiよりの書き込みファイルがSELinuxの設定で書き込めない可能性がある。
cgi-binのディレクトリをhome以下に移動して、書き込まれるファイルのSELinuxの設定SELinux Contentをhttpd_user_rw_content_tにしてみる。
cgi格納フォルダーは、httpd_user_script_exec_tに
gifの画像データの格納フォルダーは、httpd_user_content_t、中のデータも同様にする。

ぼろサーバ作成(WinXP) - その3

その3 PerlのインストールApacheが動いたが、やはりcgi位は動かそうと、Perlのインストールを行った。まずはダウンロード。 適当な場所に、保存、実行。 警告が出るが、とにかく実行。 インストーラが起動、これは … “ぼろサーバ作成(WinXP) - その3” の続きを読む

その3 Perlのインストール
Apacheが動いたが、やはりcgi位は動かそうと、Perlのインストールを行った。
まずはダウンロード。

適当な場所に、保存、実行。

警告が出るが、とにかく実行。

インストーラが起動、これはNextボタンをクリックしてゆけばよい。

ライセンスが表示される。acceptをクリックそして、Nextをクリック

Custom Setupは、一応すべてをセットアップ。

Perlのパスが重要だが、これも標準のC:\perl\にする。
このパスは重要、Perlのスクリプトを書くとき先頭行に書かないといけない。

OptionはそのままNextボタンをクリック。

Installボタンをクリックして、いよいよインストール。

インストールには暫くかかる。

Finishボタンをクリックでインストール終了。

cgi-binに、次のPerlのテストスクリプトをおいてテスト。
1行目は前述のようにインストールしたときのパスに変更

  1. #!c:/Perl/bin/perl.exe
  2. #
  3. print “Content-type: text/plain\n\n”;
  4. foreach $var (sort(keys(%ENV))) {
  5. $val = $ENV{$var};
  6. $val =~ s|\n|\\n|g;
  7. $val =~ s|”|\\”|g;
  8. print “${var}=\”${val}\”\n”;
  9. }

あとは、Apacheの設定を、CGIが実行できるように、httpd.confをいじる。
Options にExecCGIを追加

<Directory “C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin”>
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

AddHandlerのまえの#を取る
AddHandler cgi-script .cgi

以上を変更後、Apacheを再起動。
これで、先ほどのスクリプトを他のマシンからブラウザで見てみる。

これで、だいたいおわりかな。

Perlの先頭行のパス指定

いよいよ8月になった。今年は暑い夏だ。8月になると少しは涼しくなるかなぁ。 Fedora8では、perlは/usr/bin/perlにある。他の場合もほぼ同じ。 cgiスクリプトの先頭行には、 #!/usr/bin/pe … “Perlの先頭行のパス指定” の続きを読む

いよいよ8月になった。今年は暑い夏だ。8月になると少しは涼しくなるかなぁ。
Fedora8では、perlは/usr/bin/perlにある。他の場合もほぼ同じ。
cgiスクリプトの先頭行には、

#!/usr/bin/perl

と書いている場合は良いが、

#!/usr/local/bin/perl

と書いてある場合は、修正するか、cgi用に/usr/local/bin/perlでcgiが記述できるようシンボリックリンクを張る。

ln -s /usr/bin/perl /usr/local/bin/perl

こうすると、どちらでもよくなる。
はて、どちらがいいだろう?。

RSS
Follow by Email