CentOS5 Webサーバーの構築[Apache] Apacheのインストールと設定 - itochif.com
Apacheのインストール
実は、インストールの通りにCentOS5(CentOS5.1)のインストールを行うと、すでにApacheがインストールされています。以下は、すでにApacheがインストールされているかどうかの確認と、インストールされていない場合にyumを使用してApacheをインストールする方法です。
# rpm -qa httpd #すでにApacheがインストールされていないかどうかを確認 httpd-2.2.3-11.el5_1.centos.3 #このようにhttpd-*.*.*-**.****と表示されれば、Apacheはインストールされています # yum -y install httpd #インストールされていなかった場合、このコマンドでインストールを行います Loading "installonlyn" plugin Setting up Install Process Setting up repositories Reading repository metadata in from local files Parsing package install arguments Resolving Dependencies --> Populating transaction set with selected packages. Please wait. ---> Package httpd.i386 0:2.2.3-11.el5_1.centos.3 set to be updated --> Running transaction check Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Installing: httpd i386 2.2.3-11.el5_1.centos.3 updates 1.1 M Transaction Summary ============================================================================= Install 1 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 1.1 M Downloading Packages: Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing: httpd ######################### [1/1] Installed: httpd.i386 0:2.2.3-11.el5_1.centos.3 Complete!図1.Apacheが入っているかどうかの確認と入っていなかった場合のインストール
設定ファイルの編集(httpd.conf)
Apacheの設定ファイルを編集します。私の環境の場合、httpd.confはコメント行も含めて991行あります。以下は変更を行う箇所を元の行番号と共に掲載します。viで行番号を表示するにはコマンドモード(Escキーを押下)で[:set number]と入力します。
# vi /etc/httpd/conf/httpd.conf ------------------------------ 次の行からhttpd.confの中身(の一部) ServerTokens Prod #44:OS->Prodに変更し、OSの情報等を返さないように変更する #148-199のLoadModuleを必要に応じてコメントアウト。私は以下の設定を行っています 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:ユーザーから要求されたファイルの種類をファイルの内容を見て指定する(mod_mimeでは解決できなかった場合) #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のバージョンを識別して、特定バージョンに提供する機能を設定する機能を提供する ServerAdmin itochif@example.com #251:サーバー管理者のメールアドレスを記載 ServerName www.itochif.com:80 #265:サーバー名:ポート番号を記載する Options FollowSymLinks #320:Indexes の記述を削除 ServerSignature Off #524:サーバーが生成するドキュメントのフッタに何も追記しないように設定 #/icons/のエイリアスやその他設定を無効にする #Alias /icons/ "/var/www/icons/" #539 #<Directory "/var/www/icons"> #541 # Options Indexes MultiViews #542 # AllowOverride None #543 # Order allow,deny #544 # Allow from all #545 #</Directory> #546 #webdavの設定を無効にする #<IfModule mod_dav_fs.c> #551 # Location of the WebDAV lock database. #552 # DAVLockDB /var/lib/dav/lockdb #553 #</IfModule> #554 #/cgi-bin/のエイリアスやその他設定を無効にする #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #564 #<Directory "/var/www/cgi-bin"> #570 # AllowOverride None #571 # Options None #572 # Order allow,deny #573 # Allow from all #574 #</Directory> #575 #autoindexに関係する設定をコメントアウトする #IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable #592 #AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip #599 #AddIconByType (TXT,/icons/text.gif) text/* #601 #AddIconByType (IMG,/icons/image2.gif) image/* #602 #AddIconByType (SND,/icons/sound2.gif) audio/* #603 #AddIconByType (VID,/icons/movie.gif) video/* #604 #AddIcon /icons/binary.gif .bin .exe #606 #AddIcon /icons/binhex.gif .hqx #607 #AddIcon /icons/tar.gif .tar #608 #AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv #609 #AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip #610 #AddIcon /icons/a.gif .ps .ai .eps #611 #AddIcon /icons/layout.gif .html .shtml .htm .pdf #612 #AddIcon /icons/text.gif .txt #613 #AddIcon /icons/c.gif .c #614 #AddIcon /icons/p.gif .pl .py #615 #AddIcon /icons/f.gif .for #616 #AddIcon /icons/dvi.gif .dvi #617 #AddIcon /icons/uuencoded.gif .uu #618 #AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl #619 #AddIcon /icons/tex.gif .tex #620 #AddIcon /icons/bomb.gif core #621 #AddIcon /icons/back.gif .. #623 #AddIcon /icons/hand.right.gif README #624 #AddIcon /icons/folder.gif ^^DIRECTORY^^ #625 #AddIcon /icons/blank.gif ^^BLANKICON^^ #626 #DefaultIcon /icons/unknown.gif #632 #ReadmeName README.html #650 #HeaderName HEADER.html #651 #IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t #657 AddDefaultCharset UTF-8 #747:デフォルトの文字コードを設定します。UTF-7文字コードを利用したクロスサイトスクリプティングが発生しないように必ず設定します AddHandler cgi-script .cgi #778:拡張子cgiのファイルをCGIとして実行する設定です #/error/のエイリアスやその他設定を無効にする #Alias /error/ "/var/www/error/" #837 #<IfModule mod_negotiation.c> #839 #<IfModule mod_include.c> #840 # <Directory "/var/www/error"> #841 # AllowOverride None #842 # Options IncludesNoExec #843 # AddOutputFilter Includes html #844 # AddHandler type-map var #845 # Order allow,deny #846 # Allow from all #847 # LanguagePriority en es de fr #848 # ForceLanguagePriority Prefer Fallback #849 # </Directory> #850 #</IfModule> #870 #</IfModule> #871 TraceEnable Off #追加:TRACEメソッドを無効にする ------------------------------ httpd.conf終了 # ls /etc/httpd/conf.d #/etc/httpd/conf.d内の拡張子confのファイルを設定ファイルとして読み込むため、読み込まれないように拡張子を変更する(httpd.confの210行目より) README proxy_ajp.conf welcome.conf # mv /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.bk # mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bk図2.httpd.confの例
上記設定を行ったhttpd.confファイルを置いておきます。
Apacheの起動と接続確認
Apacheの起動を試みる前に、設定ファイルの文法がおかしくないかどうかをチェックします。
※このプロセスはApacheがすでに稼働中で、設定ファイルの不備により一時的にでもWebサーバーの稼動が停止しない事を目的としているので、Apacheがすでに稼働中ではなければ飛ばしてかまいません。
# /usr/sbin/apachectl configtest Syntax OK # 文法に問題のない場合 # /usr/sbin/apachectl configtest Syntax error on line DDD of /etc/httpd/conf/XXXX.XXXX: Invalid command 'YYYYY', perhaps misspelled or defined by a module not included in the server configuration # ↑問題のあった場合。XXXX.XXXXファイルのDDDD行目に無効なコマンドYYYYYが使われていると教えてくれている図3.apachectlを使用した設定ファイルの文法チェック
Apacheを起動します。
# /sbin/service httpd start
httpd を起動中: [ OK ]
図4.Apacheの起動
Webサーバーに接続できるかどうかを確認します。外部ホストからはファイアウォールの設定でWebサーバーへの通信をまだ許可していないため、自分自身への接続を試みます。
# echo "TEST" > /var/www/html/index.html #TESTとだけ記載されたファイルを公開ディレクトリに作成 # telnet localhost 80 #自分自身のTCPポート80への接続を行う Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. GET / HTTP/1.0 <-入力後、改行を2回行う HTTP/1.1 200 OK Date: Fri, 21 Mar 2008 06:00:00 GMT Server: Apache Last-Modified: Fri, 21 Mar 2008 06:00:00 GMT ETag: "a038d-5-7ae22cc0" Accept-Ranges: bytes Content-Length: 5 Connection: close Content-Type: text/html; charset=UTF-8 TEST Connection closed by foreign host.図5.内部からの接続確認。index.htmlの内容がWebサーバーから返ってきている
ファイアウォールの設定
ファイアウォールの設定で行ったiptablesの設定では自分自身以外からのWebサーバーへの要求と返事は破棄されてしまいます。 以下はWEBサーバー稼動後、クライアントから問い合わせを行おうとした時の/var/log/messagesの内容です。
# /bin/grep DROP /var/log/messages
Mar 21 16:00:00 www kernel: [DROP DEFAULT] :IN=eth0 OUT= SRC=xxx.xxx.xxx.xxx DST=192.168.10.2 LEN=48 TOS=0x00 PREC=0x00 TTL=128 ID=3540 DF PROTO=TCP SPT=4229 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
図6.ファイアウォールによって破棄されたクライアントからの問い合わせ(抜粋)
これら通信を行うために上記ログから必要な情報を抜き出すと以下のリストになります。
- 内向きの新規TCP通信(IN=eth0/PROTO=TCP(SYN)/)
- 宛先IPアドレスはこのサーバ(DST=192.168.10.2)
- 送信元IPアドレスはANY(SRC=xxx.xxx.xxx.xxx)
- 宛先ポートは80(DPT=80)
ファイアウォールの設定で作成したシェルスクリプトに、この情報を元にして作成したiptablesコマンドを追記します。 「※この下に受け入れる接続を記述する」の部分に以下の設定を追記します。
# ----- Webサーバーへのリクエストを許可する /sbin/iptables -A INPUT -p tcp -i $IF1 -d $IP1 --dport 80 -m state --state NEW -j ACCEPT図7.「ファイアウォールの設定」に追記するコマンド
上記のコマンドを追記した後、以下のコマンドでパケットフィルタテーブルを更新します。
# /usr/local/sbin/iptables.sh ファイアウォールのルールを /etc/sysconfig/iptables に保存中[ OK ] ファイアウォールルールを適用中: [ OK ] チェインポリシーを ACCEPT に設定中filter [ OK ] iptables モジュールを取り外し中 [ OK ] iptables ファイアウォールルールを適用中: [ OK ] iptables モジュールを読み込み中ip_conntrack_netbios_ns [ OK ]図8. パケットフィルタテーブルの更新
ブロードバンドルーター等を使用していて、外部からもこのWebサーバーへのアクセスを行うには、ルーターの設定を変更して、TCP80ポートへのアクセスをこのサーバーにフォワードする必要があります。
再起動してもApacheが起動するように設定する
更新日 5/03/2008



![インテルCentrino Duo搭載ThinkPad T60 [468x60]](http://www.ibm.com/jp/pc/campaign/affiliate/10000001.gif)
私たちが普段Internet ExplorerやFirefoxを使ってWebサイトを閲覧できるのは、Webサーバーが稼動しているおかげです。ここではApacheをインストールして、自宅内にWebサーバーを構築します。