Apacheはデーモンとしてさせる必要があるのでserviceコマンドを使用して起動させます。

serviceコマンドはデーモンの起動・再起動・停止・状態確認などの操作を行なえます。

まずはApacheの状態を確認します。状態確認は以下のコマンドで行なえます。

# service httpd status
httpd is stopped

「stopped」と表示されたので、現在、Apacheは停止中となっています。「running…」と表示されれば、Apacheは既に起動中であることを示します。

Apacheを起動する

Apacheを起動するには以下のコマンドを実行します。

# service httpd start
Starting httpd:                              [  OK  ]

httpd.confを編集する

Apacheを起動したら、テストページを用意し、実際にそのテストページを表示させてみましょう。

テストページを表示させるため、「httpd.conf」ファイルを編集し、Apacheを設定します。

# cd /etc/httpd/conf
# vi httpd.conf
Listen 80

ServerAdmin root@localhost

ServerName www.test.com:80

UseCanonicalName On

DocumentRoot "/var/www/html"

「httpd.conf」ファイルを開いたら、何百もの行がずらずらと記述されていますが、まずは上記の5つの設定を確認します。(上記以外のディレクティブの記述については削除せず、そのままとしておきます。)

「Listen」ディレクティブにはApacheが待ち受けるポート番号を、「ServerAdmin」にはWebサーバー(Apache)の管理者のメールアドレスを記述します。必要に応じて編集してください。

「ServerName」ディレクティブはWebサーバーが自分自身のホスト名を示す時に使われる名前を指定します。例えば、Apacheがエラー表示をする場合に、自分自身を表すホスト名も合わせて表示する場合などに、ここで指定したホスト名が使われます。(「ServerName」ディレクティブが指定されていない場合はWebサーバーに割り当てられているIPアドレスをDNSで逆引きして取得したホスト名が表示されます。)

「ServerName」ディレクティブの指定は「ホスト名:ポート番号」のフォーマットで記述します。

「ServerName」ディレクティブで指定した設定を有効にするには、「UseCanonicalName」ディレクティブを「On」に設定する必要があります。「On」に設定するとサーバー名として「ServerName」ディレクティブの指定を使うようになります。

「DocumentRoot」ディレクティブではドキュメントルートを指定します。ドキュメントルートはWebページに使うファイルを置くディレクトリの起点となる、いわばWebサーバーのルートディレクトリのことです。そのドキュメントルート配下に格納したファイルがWebページとして公開されます。上記例では「/var/www/html」がドキュメントルートとなります。

ドキュメントルート配下にコンテンツを格納する

ドキュメントルート配下にテスト用のWebページを格納します。

# cd /var/www/html
# vi index.html
<html>
<head><title>テストページ</title></head>
<body>
<p>テストページです。</p>
</body>
</html>

httpd.confを反映する

「httpd.conf」ファイルを編集しただけではApacheに設定は反映されません。設定を反映させるためにはApacheを再起動させる必要があります。Apache再起動は以下のコマンドで行なえます。

# service httpd restart
Stopping httpd:                              [  OK  ]
Starting httpd:                              [  OK  ]

以上でWebサApacheの設定は完了です。

ファイアウォール設定を確認する

CentOSの初期設定では外部からのポートはssh(22)以外は拒否する設定となっており、http(80)への通信はファイアウォールでドロップされてしまいます。

まずはファイアウォール(iptables)の設定を確認します。iptablesはLinuxの標準的なファイアウォール・アプリケーションです。

# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

上記状態では、外部から本サーバーへの接続はssh(22)のみ許可しており、それ以外は拒否されます。httpの接続許可の設定を追加してみましょう。

# iptables -I INPUT 5 -p tcp --dport http -j ACCEPT

「-I」でチェインと番号を指定すると、指定したチェインの指定した番号にルールが挿入されます。指定した番号以降のルールは、それぞれ一つ下にずれます。番号をつけない場合は、先頭(1番)にルールを挿入されます。

続いて、変更した内容を保存します。

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

最後にもう一度iptablesの設定を確認し、上記で追加したルールが追加されていることを確認します。

# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

以上で、httpでの接続が可能になりました。

SELinuxを無効化する

SELinuxはセキュリティ管理するLinuxカーネル用のセキュリティ拡張機能です。SELinuxを利用することで強力なアクセス制限が可能になりますが、その制限により、インストール作業や運用業務でつまづくことが多々あります。

Apacheについて覚えていく上で、SELinuxは趣旨からはずれるため、ここではSELinuxを無効にします。

# setenforce 0

SELinuxの状態は以下のコマンドで確認できます。

# getenforce
Permissive

「Permissive」と表示されれば、SELinuxによるアクセス制限は無効になっています。

Enforcing SELinux機能、アクセス制御が有効。
Permissive SElinuxは警告を出力するが、アクセス制限は無効。
Disabled SElinux機能、アクセス制御が無効。

ただし、上記設定ではOSを再起動するとSELinuxが再び有効になってしまいます。再起動後もSELinuxを無効にするには、「/etc/selinux/config」を直接編集します。

# vi /etc/selinux/config
SELINUX=disabled

以上でSELinuxは常に無効になります。

Webページを表示する

Apache以外の設定もたくさんありましたが、これで準備が整いました。早速、テストページを表示させてみます。

クライアントパソコンからブラウザを起動し、アドレスバーにURLを入力し、Enterキーを押してください。ここまでの手順では、DNSにホスト名を登録していないので、URLのホスト名部分にはWebサーバーのアドレスを直接入力します。(もしくはhostsファイルを編集してください。)
また、上記したテスト用Webページの作成手順ではHTMLファイル名を「index.html」としたので、URLは「http://<WebサーバーのIPアドレス>」となります。(「/index.html」の記述は省略できます。)

テストページ

テストページが表示されれば成功です。