CentOS on X40:HTTPDサーバApache2の設定

いよいよApache2の設定に入ります。

本来はApache2の導入前にchkrootkitだとかもろもろ不正対策パッケージを入れたほうがいいのでしょうが、本稼動になるまでサービスの常時起動をしない設定にしておきます。

外部公開のためのネットワーク設定は、過去記事を参照してください。

大抵はifcfg-eth0の設定だけでいけるらしいのですが、アクセスが妙に遅かったり接続不良が起こったりしていたので、(個人的に)徹底して設定してあります。

インストールするパッケージは、Apache2・Perl・PHP・MySQL・PostgreSQLの5つです。

最小インストール構成であれば、CGI関係はPerl単体しか入っていないので、Perl関連のものとPHPもろもろをインストールしておきます。

デフォルトでインストールされるPHPのバージョンは4ですが、PHP5をインストールするにはリポジトリにcentosplusを加える必要があるようです。

Perl関連パッケージのインストール

# yum -y install mod_perl perl-DBD-MySQL Prel-DBI perl-Jcode
※このとき同時にMySQLもインストールされます。

PHPと関連パッケージのインストール

# yum -y install php php-devel php-mysql php-mbstring

MySQL関連パッケージのインストール

# yum -y install mysql-devel mysql-server

Apache2のインストール

# yum install httpd

バージョン確認

# httpd -v
Server version: Apache/2.0.52
Server built: Aug 13 2006 03:29:43

Webコンテンツ編集用ユーザ・グループの作成、パスワード設定

# groupadd www
# useradd -g www -s /sbin/nologin www
# passwd www

htmlディレクトリの作成

# mkdir /home/www/html

Apache起動専用グループの作成

# groupadd apache

ユーザapacheをapacheグループに参加させる

# usermod -G apache apache

ユーザapacheがnologon(ログインシェルを適用しない)になっているか確認

# chsh apache

apache のシェルを変更します。

新しいシェル [/sbin/nologin]: ※nologonになっていれば、そのままEnterを押す

設定ファイルのバックアップ

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.dist

設定ファイル(httpd.conf)の編集

# vi /etc/httpd/conf/httpd.conf
【43行目あたり】OS情報を表示しない
ServerTokens Prod
【190行目あたり追加】PHP形式の登録
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
※これがないと.phpにアクセスした際にソースがそのまま表示されてしまう。
【237行目あたり】管理者の連絡先
ServerAdmin メールアドレス
【251行目あたり】ホスト名とポートの指定
ServerName ホスト名:ポート
【266行目あたり】ルートアクセス時の場所
DocumentRoot "/home/www/public_html"
【291行目あたり】ルートの設定
<Directory "/home/www/public_html">
【305行目あたり】ルートディレクトリに対して使用できる機能を指定
Options Indexes FollowSymLinks MultiViews ExecCGI Includes
※順に「ディレクトリ一覧表示を許可、シンボリックリンクによるアクセス許可、mod_negotiationのMultiViewsを許可?、CGIの許可、SSIの許可」
【312行目あたり】.htaccessファイルの使用を許可
AllowOverride All
【340行目あたり】ユーザディレクトリを使用する
#UserDir desable ※コメントアウト
【347行目あたり】ユーザディレクトリの場所指定
UserDir /home/*/public_html
【355行目あたり】ユーザディレクトリの一括設定
<Directory /home/*/public_html> ※コメントアウトのみ
【356行目あたり】.htaccessの設定
AllowOverride All
【357行目あたり】ユーザディレクトリに対して使用できる機能を指定
Options Indexes FollowSymLinks MultiViews ExecCGI Includes
【366行目あたり】ユーザディレクト設定の閉じタグ
</Directory> ※コメントアウトのみ
【376行目あたり】ディレクトリアクセス時に強制アクセスさせるファイル名(左から優先)
DirectoryIndex index.htm index.html index.html.var index.cgi index.php
【429行目あたり】クライアントからのアクセスによる名前解決を行わない
HostnameLookups Off
【470行目あたり】長すぎるURIはログに記録しない
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
【482行目あたり追記】ワームのログを記録しない
SetEnvIf Request_URI "default\.ida" no_log
SetEnvIf Request_URI "cmd\.exe" no_log
SetEnvIf Request_URI "root\.exe" no_log
SetEnvIf Request_URI "Admin\.dll" no_log
SetEnvIf Request_URI "NULL\.IDA" no_log
【487行目あたり追記】画像ファイルのアクセスはログに記録しない
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(css)$" no_log
【488行目あたり追記】ローカルアクセスはログに記録しない
SetEnvIf Remote_Addr 192.168. no_log
【489行目あたり】上記以外はログに記録する
CustomLog logs/access_log combined env=!no_log
【512行目あたり】エラーページ等でサーバ情報を表示しない
ServerSignature Off
【552行目あたり】CGI実行用アドレスを指定しない
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
【719行目あたり】言語が明示されなかったときに優先する言語を指定(jaを先頭にもってくる)
LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru
sv zh-CN zh-TW
【738行目あたり】デフォルトの文字セットをEUC-JPに指定
AddDefaultCharset EUC-JP
【815行目あたり】CGI実行用拡張子に.plを追加
AddHandler cgi-script .cgi .pl
【820行目あたり】コメントアウト
AddHandler send-as-is asis
【841行目あたり】CGIを実行できる拡張子を指定
AddOutputFilter INCLUDES .shtml .htm .html .cgi .php

Apacheの起動

# service httpd start

※エラーが出た場合は設定ファイルを見直してください。
Apacheで公開するディレクトリの権限を変更(ここではwwwを設定)

# chmod 711 /home/www

ここまででApacheの設定は完了です。

次にHTMLと各CGIが正常動作しているかどうかの確認を行います。
動作しているかどうか確認するには、

http://ドメイン名/index.拡張子

もしくは

http://ローカルのIPアドレス/index.拡張子

で確認できます。

テスト用HTMLの作成

# vi /home/www/public_html/index.htm
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>テスト</title>
<body>
テスト
</body>
</html>
※システム言語がEUCなのでContent-TypeはEUCを指定します。

テスト用CGIの作成

# vi /home/www/public_html/index.cgi
#!/usr/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=euc-jp\">\n";
print "<title>テスト</title>\n";
print "</head>\n";
print "<body>\n";
print "CGIテスト\n";
print "</body>\n";
print "</html>\n";
CGIのパーミッションを変更
# chmod 755 /home/www/public_html/index.cgi

テスト用SSIの作成

# vi /home/www/public_html/index.shtml
<html>
<head>
<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の作成

# vi /home/www/public_html/index.php
<?php
phpinfo();
?>

.htaccessの動作確認

# vi /home/www/public_html/.htaccess
DirectoryIndex index.php ※ディレクトリアクセスをindexphpに設定

・・・DocumentRootをホームディレクトリにした段階でUserDirが適用されちゃうんですね。
まぁいいか。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中