「CentOSでKVMを使ってサーバ仮想化を試す」や「KVMで仮想サーバをルータから割り当てられたIPを使用する」を参考に構築した仮想環境にCentOS6.5をMinimalインストールしたという想定でのApacheをインストール&起動して外部からアクセスできるところまでを行います。
ここで設定して立ち上げるWebサーバーは、極力無駄な機能を省いてHTMLファイルによるwebを公開するところを目標としています。
ページの目次
Apacheのインストール
まずはApacheをインストールするところから始めます。
# yum install httpd
ネットワーク設定が問題なく行えていれば普通にコマンドが実行できると思います。
自動起動サービスの設定
次はapacheを自動起動サービスとして設定します。
まずはステータスの確認を行います。
# chkconfig --list httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
こんな感じの出力が得られると思います。offの左の数字はランレベルを表しており現状はすべての状態で起動しない設定になっています。(ランレベルの意味などはこちらを参照)
ランレベル3と5に対してサービスが自動起動するように設定を行います。
# chkconfig --level 35 httpd on
設定自体は一瞬で終わるので、リストで変更されたか確認します。
# chkconfig --list httpd httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
上記のように3,5が「on」に変化していれば成功です。
ファイアーウォールの変更
外部からのHTTP接続を許可する設定を行います。
接続の許可には「/etc/sysconfig/iptables」の変更を行います。
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
※IPv6の設定が必要な場合は「/etc/sysconfig/ip6tables」に上記のハイライト部分と全く同じ追記を行います。
HTTP通信はTCP、80のポートが必要になるため、上記のハイライト個所のような追記を行います。
もしHTTPS通信も行う予定の場合は同様の80の部分を443に変更した行を追加します。
Apacheの設定~起動
Apacheの設定と起動を行います。
httpd.confの設定
/etc/httpd/conf/httpd.conf の編集を行います。
内容は大幅に省略しながら書きますが、設定を行う個所について記入していきます。
その他の設定については情報不足感はありますが、これまでの記事を参考に。(Global Environment、Main server configurationその1、その2、その3)
### Section 1: Global Environment ServerTokens Prod ・・・・・・ (1) ### Section 2: 'Main' server configuration ServerAdmin <ユーザー(管理者)のメールアドレス> ・・・・・・ (2) #ServerName <サーバーのドメイン:ポート番号> ・・・・・・ (3) <Directory "/var/www/html"> Options FollowSymLinks ・・・・・・ (4) AllowOverride All ・・・・・・ (5) Order allow,deny Allow from all </Directory> DirectoryIndex index.html index.htm ・・・・・・ (6) EnableMMAP off ・・・・・・ (7) EnableSendfile off ・・・・・・ (8) ServerSignature Off ・・・・・・ (9) #IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8 ・・・・・・ (10) #AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip ・・・ (省略) ・・・ #AddIcon /icon/blank.gif ^^BLANKICON^^ #DefaultIcon /icon/unknown.gif #ReadmeName README.html #HeaderName HEADER.html #IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t ・・・・・・ (11) #AddType text/html .shtml ・・・・・・ (12) #AddOutputFilter INCLUDES .shtml ・・・・・・ (13)
(1) はサーバーからのレスポンスヘッダの形式について記入します。デフォルトは「OS」で「Apache 2.4.9 (CentOS)」のように、メジャーバージョン、マイナーバージョン、ビルド番号と使用しているOSまで返してしまう設定になっているため、返す情報を最小限にする「Prod」を指定します。
(2) はユーザー(管理者)のメールアドレスを指定します。wwwサーバーの表示でエラーになった時に表示される管理者への連絡先アドレスです。(外部公開するつもりが無ければ設定不要です)
(3) はサーバー名の指定を行います。デフォルトはコメントアウトされており、公開しているサーバーであれば、DNSから取得したサーバー名が使用されます。(DNSに名前登録を行っていない場合は書いておきます。)
※注意:ここで記載した名前で、ブラウザからアクセスできるわけではありません。
(4)、(5) はドキュメントルートのディレクトリに対する制御について書いています。
ドキュメントルート以下はアクセス制御ファイル(.htaccess)によるコントロールを行うことを基本として、ディレクトリへ直接アクセスしたときにディレクトリ内部をリスト表示するオプションを無効にしています。
(6) はディレクトリ名でサーバーにアクセスした場合、最初に存在を探すファイルです。
多言語用に記載されている「index.html.var」を削除し、代わりに「index.htm」を指定しています。
(7) はファイルの送信時にメモリマッピングを利用するかどうかを設定します。デフォルトでは「off」設定がコメントアウトされていますが、マルチプロセッサ環境か、ファイルシステムでNFSを利用している場合はコメントアウトを外して「off」設定を有効化します。
(8) はファイルの送信時にOSのsendfile機能を使用するかどうかを設定します。デフォルトでは「off」設定がコメントアウトされていますが、プラットフォームのsendfile機能が壊れている可能性などもあるらしいので(公式参照)、「off」設定を有効化します。(CentOSのsendfileが正しく動かないとは思いませんが念のため)
(9) はサーバーが生成するドキュメントのフッター情報の出力を「Off」にしています。
デフォルトは「On」で、Apacheのバージョン情報などが表示される設定になっています。
(10)~(11) はディレクトリへのリクエストがあったときにindex.htmlが無かった場合のファイルリスト一覧の設定を無効化しています。
(12)、(13) はSSIの動作を停止しています。
不要なモジュールの削除(httpd.conf)
デフォルトでLoadModuleされていて使用しない機能を削除します。
(※使用しないモジュールは私の独断と偏見で選んでいます)
LoadModule auth_basic_module modules/mod_auth_basic.so ・・・・・・ (1) LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_alias_module modules/mod_authn_alias.so #LoadModule authn_anon_module modules/mod_authn_anon.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so #LoadModule authz_owner_module modules/mod_authz_owner.so #LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so #LoadModule dav_module modules/mod_dav.so ・・・・・・ (2) #LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule autoindex_module modules/mod_dav_fs.so ・・・・・・ (3) #LoadModule userdir_module modules/mod_userdir.so ・・・・・・ (4) #LoadModule proxy_module modules/mod_proxy.so ・・・・・・ (5) #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule suexec_module modules/mod_suexec.so ・・・・・・ (6)
(1) 認証系のモジュール、Basic認証、Digest認証を残しています。
(mod_authz_user_module が認証時に必要なので追加しました。)
(2) WebDAVサーバ用のモジュールです。不要なので無効化します。
(3) ファイルリスト一覧を表示する機能を無効化します。
(4) ユーザー別のディレクトリアクセスを扱うためのモジュールです。不要なので無効化します。
(5) Proxy関連のモジュールです。不要なので無効化します。
※リバースProxyなどの負荷分散を行う場合は必要。
(6) suexecの機能を無効化します。suexecはUser別のディレクトリアクセスを有効にしていた場合、User自身の権限でCGIを実行するための機能です。
サーバーの起動と動作確認
設定が完了した後は、サーバーのstartを行います。
# service httpd start Starting httpd: [OK]
これでHTTPサーバーが動作するようになったはずです。
もし、「Starting httpd: [FAILED]」と表示された場合は、直前にエラー内容が表示されているハズです。
「Syntax error on line <行数> of /etc/httpd/conf/httpd.conf:~~」と表示されていた場合は、その行の設定名が間違っている(typoなど)か、ロードしていないモジュールの設定を行おうとしているか、無効にしたモジュールの設定が残っていた。のいずれかだと思います。(当サイトの記述が間違っていたらゴメンナサイ)
viのコマンドモードで「:set number」と打てば行数が表示されるようになりますので、適宜修正を行ってください。
動作確認
「/var/www/html」にファイルが一切存在しないことを確認の上で、ブラウザのアドレス入力欄に「http://<IPアドレス>」を入力して確認します。(サーバーを動かしているLinuxのブラウザからであれば「http://127.0.0.1」か「http://localhost」で確認可能です。)
上図のファイルが見つからないエラーになっていれば成功です。
今度は、ここに適当なHTMLファイル(index.html)を配置して先ほどと同じように確認してみます。
<html> <body> <h1>Test!!</h1> </body> </html>
上記のようなindex.htmlを作り、先ほどと同じようにブラウザのアドレス入力欄に「http://<IPアドレス>」を入力して確認します。
上図のように用意したHTMLファイルが表示されていれば、Apacheが正常に動作しています。
トラックバック & ピンバック