さくらのVPS CentOSでサーバ構築 作業ノート4回目。
今回はメジャーなWebサーバーのApache HTTP Serverをインストールします。
Apacheのインストール
インストールと設定はroot権限が必要なコマンドばかりなので、各種インストールの間だけ、sudo ではなく su でrootになって進めましょう。
[admin@ ~]$ su -
Password:
[root@ ~]#
CentOSではパッケージのインストールと管理に yum というプログラムを使います。さくらのVPSでは最初から yum がインストール済みで、起動直後から使うことができます。一応、新しくインストールをする前に、既にインストールされているものを最新版にアップデートします。
[root@ ~]# yum -y update
それでは Apacheを yum コマンドでインストールします。
[root@ ~]# yum -y install httpd
まずはインストールに問題がないか起動してみます。
[root@ ~]# /etc/rc.d/init.d/httpd start
Starting httpd: [ OK ]
無事に起動できたら、続いて自動起動の設定をします。
[root@ ~]# chkconfig httpd on
設定を確認してみましょう。
[root@ ~]# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
chkconfig --list を実行すると,起動設定されたラン・レベルの一覧が表示できます。(0:システムの停止,1:シングル・ユーザー,2:ネットワーク機能なしのマルチユーザー,3:CUIログインのマルチユーザー,4:カスタム,5:GUIログインのマルチユーザー,6:システムの再起動)さくらのVPSを起動した時に稼動状態になる為には 3 が on になっている必要があります。起動が問題ないようなので、続いてApacheの設定をします。
Apacheの設定
いちおう元ファイルをコピーしてから vi で開きます。
[root@ ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
[root@ ~]# vi /etc/httpd/conf/httpd.conf
1.レスポンスヘッダにOSのバージョンを表示させない
ServerTokens OS
↓
ServerTokens Prod
2.KeepAliveを有効にする
KeepAlive Off
↓
KeepAlive On
3.モジュールの読み込み設定
モジュールは必要に応じて設定してください。自分は以下のように設定しました。
LoadModule auth_basic_module modules/mod_auth_basic.so #148:基本認証を行う
LoadModule auth_digest_module modules/mod_auth_digest.so #149:ダイジェスト認証を行う
LoadModule authn_file_module modules/mod_authn_file.so #150:テキストファイルを用いたユーザー認証を行う
#LoadModule authn_alias_module modules/mod_authn_alias.so #151:認証に成功したユーザーを指定したURLに移動させる?
#LoadModule authn_anon_module modules/mod_authn_anon.so #152:認証領域への匿名ユーザーのアクセスを許可する
#LoadModule authn_dbm_module modules/mod_authn_dbm.so #153:DBMファイルを用いたユーザ認証を行う
LoadModule authn_default_module modules/mod_authn_default.so #154:認証用モジュールがロードされなかった場合、すべての認証を拒否する?
LoadModule authz_host_module modules/mod_authz_host.so #155:ホスト名/IPアドレスに基づいた承認を行う
LoadModule authz_user_module modules/mod_authz_user.so #156:ユーザー名に基づいた承認を行う
LoadModule authz_owner_module modules/mod_authz_owner.so #157:ファイルの所有者に基づいた承認を行う
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #158:グループに基づいた承認を行う(テキストファイル)
#LoadModule authz_dbm_module modules/mod_authz_dbm.so #159:グループに基づいた承認を行う(DBMファイル)
LoadModule authz_default_module modules/mod_authz_default.so #160:承認用モジュールがロードされなかった場合、すべての承認を拒否する?
#LoadModule ldap_module modules/mod_ldap.so #161:他のLDAPモジュールにLDAPの接続プールとLDAP共有メモリキャッシュ機能を提供する
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so #162:ユーザー認証にLDAPを使用する
LoadModule include_module modules/mod_include.so #163:Server-Side Includes(SSI)を有効にする
LoadModule log_config_module modules/mod_log_config.so #164:カスタマイズ可能なログ収集機能を提供する
LoadModule logio_module modules/mod_logio.so #165:送受信バイト数をログに残す機能を提供する
LoadModule env_module modules/mod_env.so #166:CGI/SSIで使用される環境変数を制御する
#LoadModule ext_filter_module modules/mod_ext_filter.so #167:外部プログラムで処理を行ってからレスポンスボディを送信する
LoadModule mime_magic_module modules/mod_mime_magic.so #168:ユーザーから要求されたファイルの種類をファイルの内容を元に指定する
#LoadModule expires_module modules/mod_expires.so #169:期限切れ日を設定する
LoadModule deflate_module modules/mod_deflate.so #170:レスポンスを圧縮して送信する
#LoadModule headers_module modules/mod_headers.so #171:リクエスト/レスポンスヘッダの制御・変更を行う
#LoadModule usertrack_module modules/mod_usertrack.so #172:Cookieを使用してユーザーを追跡する
LoadModule setenvif_module modules/mod_setenvif.so #173:リクエストに応じて環境変数を設定する機能を提供する
LoadModule mime_module modules/mod_mime.so #174:ユーザーから要求されたファイルの種類を拡張子を元に指定する
#LoadModule dav_module modules/mod_dav.so #175:WebDav機能を提供する
#LoadModule status_module modules/mod_status.so #176:サーバの活動状況と性能に関する情報を提供する
#LoadModule autoindex_module modules/mod_autoindex.so #177:DirectoryIndexディレクティブで指定されたファイルがない場合に自動でインデックスの生成を行う
#LoadModule info_module modules/mod_info.so #178:サーバの設定の包括的な概観を提供する
#LoadModule dav_fs_module modules/mod_dav_fs.so #179:サーバファイルシステム上のリソースへのアクセスを提供する
LoadModule vhost_alias_module modules/mod_vhost_alias.so #180:バーチャルホストのエイリアス機能を提供する
LoadModule negotiation_module modules/mod_negotiation.so #181:クライアントにあったファイルを選択して返す機能を提供する
LoadModule dir_module modules/mod_dir.so #182:/リダイレクトとディレクトリのインデックスを扱う機能を提供する
LoadModule actions_module modules/mod_actions.so #183:特定の拡張子やメソッドのリクエストに対してCGIを実行する
LoadModule speling_module modules/mod_speling.so #184:大文字小文字の区別を無くしたり、1文字の綴り間違いを訂正したりする機能を提供する
#LoadModule userdir_module modules/mod_userdir.so #185:ユーザ専用ディレクトリにアクセスできる機能を提供する
LoadModule alias_module modules/mod_alias.so #186:URLのリダイレクトやマッピング機能を提供する
LoadModule rewrite_module modules/mod_rewrite.so #187:リクエストURLをリアルタイムで書き換えるための機能を提供します
#LoadModule proxy_module modules/mod_proxy.so #188:プロキシ/ゲートウェイ機能を提供します
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #189:mod_proxyの拡張機能で、負荷分散機能を提供します
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #190:mod_proxyの拡張機能で、ftp接続機能を提供します
#LoadModule proxy_http_module modules/mod_proxy_http.so #191:mod_proxyの拡張機能で、http接続機能を提供します
#LoadModule proxy_connect_module modules/mod_proxy_connect.so #192:mod_proxyの拡張機能で、HTTP CONNECTメソッド機能を提供します
LoadModule cache_module modules/mod_cache.so #193:localコンテンツやproxy機能を経由したコンテンツをキャッシュする機能を提供します
LoadModule suexec_module modules/mod_suexec.so #194:指定されたユーザとグループでCGIスクリプトを実行する機能を提供する
LoadModule disk_cache_module modules/mod_disk_cache.so #195:ディスクを使用したストレージ管理機構を提供する
LoadModule file_cache_module modules/mod_file_cache.so #196:静的コンテンツをキャッシュする機能を提供する
LoadModule mem_cache_module modules/mod_mem_cache.so #197:サーバー上のコンテンツをメモリにキャッシュする機能を提供する
LoadModule cgi_module modules/mod_cgi.so #198:CGIの実行機能を提供する
#LoadModule version_module modules/mod_version.so #199:Apacheのバージョンを識別して、特定バージョンに提供する機能を設定する機能を提供する
4.サーバー管理者の指定
ServerAdmin root@localhost
↓
ServerAdmin admin@domain.com
5.サーバー名の指定
ServerName new.host.name:80
↓
ServerName www.domain.com:80
6.DocumentRootの確認
DocumentRoot "/var/www/html"
7.ディレクトリ内のファイル表示を無効化
<Directory "/var/www/html">
...
Options Indexes FollowSymLinks
↓
Options -Indexes FollowSymLinks
...
</Directory>
8.indexの設定
DirectoryIndex index.html index.html.var
↓
DirectoryIndex index.html index.php index.cgi index.html.var
9.ログの設定(414 ERROR は記録しない)
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
↓
LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
10.カスタムログの設定(wormと画像のアクセスをログに記録しない)
CustomLog logs/access_log combined
↓
SetEnvIf Request_URI "cmd\.exe" nolog
SetEnvIf Request_URI "root\.exe" nolog
SetEnvIf Request_URI "Admin\.dll" nolog
SetEnvIf Request_URI "NULL\.IDA" nolog
SetEnvIf Request_URI "^/_mem_bin/" nolog
SetEnvIf Request_URI "^/_vti_bin/" nolog
SetEnvIf Request_URI "^/c/" nolog
SetEnvIf Request_URI "^/d/" nolog
SetEnvIf Request_URI "^/msadc/" nolog
SetEnvIf Request_URI "^/MSADC/" nolog
SetEnvIf Request_URI "^/scripts/" nolog
SetEnvIf Request_URI "^/default.ida" nolog
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(css)$" nolog
SetEnvIf Remote_Addr 192.168. no_log
CustomLog logs/access_log combined env=!no_log
11.エラー画面でApacheのバージョン非表示
ServerSignature On
↓
ServerSignature Off
12.indexesがOFFなのでファイル表示のアイコンの設定はコメントアウトします。
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
↓
#Alias /icons/ "/var/www/icons/"
#<Directory "/var/www/icons">
# Options Indexes MultiViews
# AllowOverride None
# Order allow,deny
# Allow from all
#</Directory>
13.ScriptAliasも使わないのでコメントアウト
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
↓
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#<Directory "/var/www/cgi-bin">
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#</Directory>
14.autoindexに関係する設定をコメントアウトする
#IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*
#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
#AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
#AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
#AddIcon /icons/a.gif .ps .ai .eps
#AddIcon /icons/layout.gif .html .shtml .htm .pdf
#AddIcon /icons/text.gif .txt
#AddIcon /icons/c.gif .c
#AddIcon /icons/p.gif .pl .py
#AddIcon /icons/f.gif .for
#AddIcon /icons/dvi.gif .dvi
#AddIcon /icons/uuencoded.gif .uu
#AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
#AddIcon /icons/tex.gif .tex
#AddIcon /icons/bomb.gif core
#AddIcon /icons/back.gif ..
#AddIcon /icons/hand.right.gif README
#AddIcon /icons/folder.gif ^^DIRECTORY^^
#AddIcon /icons/blank.gif ^^BLANKICON^^
#DefaultIcon /icons/unknown.gif
#ReadmeName README.html
#HeaderName HEADER.html
#IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
15.MIME 言語タイプの適用優先順位(日本語を優先)
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ..
↓
LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ..
16.CGIスクリプト設定を有効化して拡張子 .pl を追加
#AddHandler cgi-script .cgi
↓
AddHandler cgi-script .cgi .pl
17.保存して終了
ESC
:wq
設定の確認
設定ファイルの編集が終わったら、無事に設定ができているか文法チェックをしてみましょう
[root@ ~]# apachectl configtest
httpd: Syntax error on line 210 of /etc/httpd/conf/httpd.conf: Syntax error on line 2 of /etc/httpd/conf.d/proxy_ajp.conf:
Cannot load /etc/httpd/modules/mod_proxy_ajp.so into server: /etc/httpd/modules/mod_proxy_ajp.so: undefined symbol: proxy_module
なにやら /etc/httpd/conf.d/proxy_ajp.conf にエラーがあるとか言われてしまいました。(他のエラーがあったら記述ミスかもしれないので、httpd.confを確認しましょう)これは proxy_module をOFFにしたせいで mod_proxy_ajp も読めなくなったというエラーです。設定内の記述で、/etc/httpd/conf.d 内の設定ファイル(〜.conf)は自動で読み込まれるようになっているのですが、初期状態で入ってる proxy_ajp.conf も welcome.conf も今回の設定では必要ないので、まとめて読み込まないようにしちゃいましょう。
[root@ ~]# mv /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.bk
[root@ ~]# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bk
そしてチェック。大丈夫なはずです。
[root@ ~]# apachectl configtest
Syntax OK
最後にhttpdを再起動します。
[root@ ~]# /etc/rc.d/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
iptablesの設定追加
80番ポートのパケットを許可するためにiptablesに設定を追加します。
[root@ ~]# iptables -A SERVICE -p tcp --dport 80 -j ACCEPT
iptablesの設定を保存
[root@ ~]# /etc/rc.d/init.d/iptables save
Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
そしてiptablesを再起動して反映させます。
[root@ ~]# /etc/rc.d/init.d/iptables restart
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
Webブラウザで表示の確認
Webブラウザから設定したドメイン、もしくは http://XXX.XXX.XXX.XXX/ にアクセスしてみましょう。
通常、Apacheのインストール直後だとApacheのテストページが表示されるのですが、先ほどhttpd.confの設定でテストページを表示しないように設定してしまったので、「サーバーにアクセスできません」ではなく、「404 Not Found エラー」が表示されればApacheは問題なく起動しています。
ただ、このままではちょっと味気ないのでDocumentRootに簡単なテストページを作ってみましょう。
[root@ ~]# echo '<!DOCTYPE html><html><head><title>Hello</title></head><body>Hello</body></html>' > /var/www/html/index.html
Webブラウザからアクセスして「Hello」と表示されればOKです。
メモリの使用状況
今回設定後のメモリ使用量です。httpdが稼動しましたが、当然ながらまだアクセスがほぼ無い状態なのでメモリは使っていないようですね。
[root@ ~]# free
total used free shared buffers cached
Mem: 510532 433684 76848 0 29520 338264
-/+ buffers/cache: 65900 444632
Swap: 2048276 0 2048276