CentOS 6.3 にWebサーバーを構築する [WEBサービス]
Perlの開発環境として準備した。
レンタルサーバーにアップする前の動作確認およびデバッグするために、CentOS 6.2上にApache とMySQLの使える環境を構築した。
各ソフトのバージョンは以下
- Apache : 2.2.15
- MySQL : 5.1.67
- PHP : 5.3.3
- Perl : 5.10.1
開発ユーザー名は”webs”として構築
1. Apache
① CentOSインストール時に導入済みなので設定のみ
/etc/httpd/conf/httpd.conf の編集
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir disable
↓
#UserDir disable ← #を追加(コメントアウト)#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line above, and uncomment
# the following line instead:
#
#UserDir public_html
↓
UserDir public_html ← 行頭の#を削除(コメント解除)
AliasMatch ^/centos(.*) /home/centos/public_html/$1
← centosユーザーのみhttp://centossrv.com/centos/のように~(チルダ)なしでアクセスできるようにする
AliasMatch ^/userdir/([^/]+)/(.*) /home/$1/public_html/$2
← 全てのユーザーでhttp://centossrv.com/userdir/ユーザー名/でアクセスできるようにする
</IfModule>#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>
以下の全行追加
<Directory /home/*/public_html>
AllowOverride All ← .htaccessの許可
Options IncludesNoExec ExecCGI FollowSymLinks ← CGI,SSI(Exec命令以外)の許可
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
② Webサーバーの設定反映と起動設定
# /etc/rc.d/init.d/httpd reload start ←サーバー起動
# /etc/rc.d/init.d/httpd reload stop ←サーバー停止
# /etc/rc.d/init.d/httpd reload ←サーバー再起動
# chkconfig httpd on ←自動起動オン
③ ユーザーディレクトリ作成(~/public_htmlディレクトリ)
以下のスクリプトを作成、実行そして削除
作成: # gedit userdirmake
#!/bin/bash
for user in `ls /home`
do
id $user > /dev/null 2>&1
if [ $? -eq 0 ] && [ ! -d /home/$user/public_html ]; then
mkdir -p /home/$user/public_html
chown $user. /home/$user/public_html
chmod 711 /home/$user
echo $user
fi
done
実行: # sh userdirmake
削除: # rm –f userdirmake
新規ユーザー追加時にユーザーディレクトリが自動で作成されるようにする:
# mkdir /etc/skel/public_html
④ Webページ表示確認 : http://127.0.0.1:~webs/index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>テスト</title>
<body>
テスト
</body>
</html>
「Forbidden Forbidden You don't have permission to access …」発生時の原因
- そのディレクトリのトップページ(index.html など)が存在しない。
- そのディレクトリのアクセス許可を,制作者が設定し間違えた。
- 現在更新作業中で,一時公開中止している。
- アクセス拒否されている。
確認:
httpd.conf 設定ファイル<Directory /home/*/public_html> ~ </Directory> 間の再確認
- /home, /home/public_html, /home/public_html/index.html パーミッション(755)確認
- SELinux 停止状態
# getenforce
Enforcing の場合、無効にする
# gedit /etc/sysconfig/selinux
SELLINUX=disabled に修正
⑤ CGI確認 : http://127.0.0.1/~webs/test.cgi
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";※システムの文字コードがUTF-8の場合
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=euc-jp\">\n";※システムの文字コードがEUCの場合
print "<title>テスト</title>\n";
print "</head>\n";
print "<body>\n";
print "CGIテスト\n";
print "</body>\n";
print "</html>\n";
「CGIプログラムそのまま表示」時の対応
httpd.confで「#AddHandler cgi-script .cgi」の行のコメントアウトを解除する
「Internal Server Error」発生時の原因
- 改行コードの違い(LFのこと)
- Perl のパスの間違え
- CGIプログラムのパーミッション間違え
確認:
- エディターの改行コード設定の確認
- # which perl で場所確認 ←CentOSの場合、/usr/bin/perl が正しい
- パーミッション755の確認
⑥ SSI(Server Side Include)確認 : http://127.0.0.1/~webs/test.shtml
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8<meta http-equiv="Content-Type" content="text/html; charset=euc-jp
<title>テスト</title>
<body>
SSIテスト
<!--#config timefmt="%Y/%m/%d %H:%M:%S" -->
<!--#echo var="DATE_LOCAL" -->
</body>
</html>
⑦ PHP確認 : http://127.0.0.1/~webs/test.php
<?php
phpinfo();
?>
以上で環境構築は完了、これからアプリ開発を続行する。
参考サイト
- http://kajuhome.com/apache.shtml
- http://centossrv.com/apache-userdir.shtml
- http://www.searchman.info/linux/1090.html
- http://www.jitaku-server.net/apache_cgi_trouble.html
- http://www.aconus.com/~oyaji/faq/apache_cgi3.htm
- http://saminnet.dip.jp/servercomputer/Lmemo/net/apache03.html