Apache2.2構築の記事一覧

セキュアなWebサーバー(Apache-SSL)を構築する

SSLを使ってセキュアなWebページを作成するための方法を見ていきます。

ApacheからSSLを使用する

ApacheでSSLを利用するには以下のソフトウェアが必要です。

ソフトウェア 概要
OpenSSL SSLを利用するために必要なソフトウェア
mod_ssl OpenSSLを使ってApacheをSSLに対応させるモジュール

以降、それぞれのソフトウェアのインストール方法から見ていきます。

OpenSSLのインストール

OpenSSLはCentOSをデフォルト設定でインストールした場合は既にインストールされています。まず、OpenSSLがインストールされているかどうか確認しましょう。

# rpm -qa | grep openssl
openssl-1.0.1e-42.el6.i686

上記のようにgrepの結果が出力されれば、既にインストールされています。もし、何も出力されていなければインストールされていません。その場合は、以下コマンドでインストールします。

# yum install openssl

OpenSSLのバージョンも確認しておきましょう。

# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

mod_sslのインストール

mod_sslはOpenSSLを使ってApacheをSSLに対応させるモジュールです。Apacheのモジュールもyumを使用してインストールできます。

# yum install mod_ssl
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
Setting up Install Process

 ~ 省略 ~

Installed:
  mod_ssl.i686 1:2.2.15-47.el6.centos

Complete!

インストールされたかどうか以下コマンドで確認します。

# rpm -qa | grep mod_ssl
mod_ssl-2.2.15-47.el6.centos.i686

grepの結果が出力されれば、無事にインストールされています。

サーバー証明書の作成

ApacheでSSLを使えるようにするためには、サーバー証明書を作成しApacheに組み込む必要があります。証明書の作成はOpenSSLのコマンドを使用します。

# cd /etc/pki/tls/certs/
# make server.crt
umask 77 ; \
        /usr/bin/openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus
.......+++
..+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
        /usr/bin/openssl req -utf8 -new -key server.key -x509 -days 365 -out server.crt -set_serial 0
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Aichi
Locality Name (eg, city) [Default City]:Nagoya
Organization Name (eg, company) [Default Company Ltd]:Person
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.test.com
Email Address []:test@test.com

これで秘密鍵「server.key」とサーバー証明書「server.crt」が作成されました。ただ、このままでは秘密鍵を使用する都度、パスフレーズが要求されます。つまり、Apacheの起動の際、毎回パスフレーズを入力しないといけません。セキュリティ上の観点からはこのままの方が望ましいですが、ここでは秘密鍵のパスフレーズを解除します。

# mv server.key server.key.bak
# openssl rsa -in server.key.bak -out server.key
Enter pass phrase for server.key.bak:
writing RSA key

これで、パスフレーズは解除されました。

秘密鍵「server.key」とサーバー証明書「server.crt」が同じディレクトリに保存されていますが、管理上、秘密鍵は以下のディレクトリに移動させます。

# mv /etc/pki/tls/certs/server.key /etc/pki/tls/private/server.key

ApacheにSSL設定をする

サーバー証明書と秘密鍵を生成したら、それらをApacheに組み込む作業を行ないます。SSLに関する設定は「/etc/httpd/conf.d/ssl.conf」に記述することにします。

# cd /etc/httpd/conf.d/
# vi ssl.conf

 ~ 省略 ~

Listen 443

 ~ 省略 ~

<VirtualHost _default_:443>

ServerName www.sample.com:443

SSLCertificateFile /etc/pki/tls/certs/server.crt

SSLCertificateKeyFile /etc/pki/tls/private/server.key

 ~ 省略 ~

</VirtualHost>

「<VirutalHost _default_:443>」というように記述すると、他の仮想ホスト設定に該当しないリクエストをすべてここで受け付けるようになります。

サーバー証明書と秘密鍵のパスはそれぞれ以下ディレクティブで指定します。

SSLCertificateFile SSLサーバ証明書の保存ディレクトリ
SSLCertificateKeyFile 秘密鍵の保存ディレクトリ

以上で「ssl.conf」の設定は完了です。
あとはApacheを再起動させ、設定を反映させます。

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

httpsでテストページにアクセスする

早速、SSLのWebサーバーに接続してみます。プロトコルはhttpのかわりにhttpsを指定します。
セキュリティ証明書警告画面

正式なサーバー証明書ではない旨のメッセージが表示されます。本来、証明書はCAで証明されたものを使用する必要がありますが、今回は自分で署名をする証明書(オレオレ証明書)を使っているので、この警告が出力されます。

「このサイトの閲覧を続行する」をクリックし、次に進めます。
テストページ

Webページが表示されれば、httpsでのアクセスに成功したことになります。

2015年11月26日(木)|Apache2.2構築

ApacheをSSLに対応させる

ApacheをSSLに対応させ、セキュアなWebページを作成するための仕組みについて見ていきます。

SSLとは

SSLとは、インターネットなどのTCP/IPネットワークでデータを暗号化して送受信するプロトコルです。

インターネットの活用方法が広がった現在では、住所や電話番号といった個人情報、クレジットカード番号や企業秘密情報など機密性の高いデータが頻繁に扱われるようになり、データの盗聴や改ざんを防ぎ、インターネットで安全な通信をするための仕組みは必須と言えます。

その仕組みがSSL(Secure Sockets Layer)です。SSLでクライアントとサーバー間のデータを暗号化したり、認証したりすることで重要なデータを守ります。
SSL 3.0の次のバージョンから名称が「TLS」(Transport Layer Security)に変更されたため、正確にはTLSと呼びますが、SSLという名称が広く定着されたため、実際にはTLSを指していてもSSLと呼ばれることの方が多いです。「SSL/TLS」「TLS/SSL」などと両者を併記したりすることもありますが、どれも同じ意味ですので混合しないように注意してください。

SSLは次の機能から成り立ちます。

相互認証

通信相手のサーバーやクライアントが信頼できるかどうかを調べます。通信相手の証明書をCA(Cerificate Authority:認証局)を介して検証することで認証を行い、クライアントやサーバーのなりすましを防ぎ、安全な通信を確保します。インターネットショッピングなど不特定多数のクライアントがいる場合はサーバー認証のみを行ないますが、クライアントが限られる場合は、SSLでクライアントを認証することで、信頼できるクライアントのみにアクセスを許可するようにWebサーバーを設定することも可能です。

データの完全性

データの完全性とはデータが改ざんされていないこと保証することです。電子署名という技術を使い、データが通信相手から送られたものかどうか、送信されたデータがすべて届いているかどうかを確認します。

プライバシー保護

データの盗聴を防ぎます。通信内容を暗号化することで、通信の途中でデータを盗み見れないようになります。

このようにSSLを使用することで、WebサーバーとWebブラウザ(クライアント)間を安全に通信することができるようになります。逆に言うと、SSLを使わない普通のWebサイトは盗聴や改ざんされたりする危険があるということです。

2015年11月23日(月)|Apache2.2構築

ポートベースの仮想ホストを設定する

ポートベースの仮想ホストを設定していきます。
ポートベースでは、IPアドレスは同じとし、ポート番号だけでリクエストを振り分けて、表示するWebページを切り替えます。
今回は以下2つの仮想ホストを作成します。

  • 172.16.0.10:80
  • 172.16.0.10:81

それぞれの仮想ホストに届いたリクエストに対し、それぞれ異なるレスポンスを返すようにします。

テストページ作成

まずは仮想ホストごとにテストページを作成しましょう。
ドキュメントルートには以下を指定するものとします。

仮想ホスト ドキュメントルート
172.16.0.10:80 /var/www/html/
172.16.0.10:81 /var/www/public_html/
# cd /var/www/html/
# vi index.html
<html>
<head><title>テストページ1</title></head>
<body>
<p>テストページ1(Port:80)</p>
</body>
</html>
# cd /var/www/public_html/
# vi index.html
<html>
<head><title>テストページ2(Port:81)</title></head>
<body>
<p>テストページ2(Port:81)</p>
</body>
</html>

httpd.confの編集

ポートベースの仮想ホストを設定します。

# cd /etc/httpd/conf
# vi httpd.conf
Listen 80
Listen 81
NameVirtualHost 172.16.0.10:80
NameVirtualHost 172.16.0.10:81

<VirtualHost 172.16.0.10:80>
    DocumentRoot /var/www/html
    ServerName www.sample.com:80
</VirtualHost>
<VirtualHost 172.16.0.10:81>
    DocumentRoot /var/www/public_html
    ServerName www.sample.com:81
</VirtualHost>

まず、「Listen」ディレクティブにはApacheが待ち受けるポート番号を指定します。今回は80番、81番の2つのポートで待ち受けることにするため、2つ設定します。

次に「NameVirtualHost」ディレクティブを設定します。これは「名前ベースの仮想ホストを使用する」という宣言です。「172.16.0.10:80」と「172.16.0.10:81」の2つを宣言しています。(「ポートベースの仮想ホスト」の実体は名前解決を行なわない「名前ベースの仮想ホスト」ということです。)

「VirtualHost」セクションコンテナを使い、仮想ホストごとに個別の設定を行ないます。
Apacheは、リクエストヘッダーに含まれるHostフィールドを参照し、「VirtualHost」と一致するブロックを探します。一致したブロックが見つかった場合にはそのブロック内の設定が適用されます。

設定を反映させるため、Apacheを再起動します。

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

以上で「httpd.conf」の設定は完了です。

ファイアウォール設定

今回は81番ポートも使用するため、ファイアウォールの設定も適宜変更します。ここでは前回の記事で設定した状態からの編集方法を記述します。

# iptables -I INPUT 6 -p tcp --dport 81 -j ACCEPT

上記で外部からの接続に81も許可しています。

続いて、設定を保存します。

# 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    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:81
7    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

Webページを表示する

これで準備が整いました。早速、テストページを表示させてみます。

クライアントパソコンからブラウザを起動し、アドレスバーにURLを入力し、Enterキーを押してください。

「http://172.16.0.10/」にアクセスしたときは以下のテストページが表示されます。
テストページ1

「http://172.16.0.10:81」にアクセスしたときは以下のテストページが表示されます。
テストページ2

それぞれ別のWebページが表示されれば成功です。

2015年11月22日(日)|Apache2.2構築

Apacheの仮想ホスト機能を使用する

Apacheには1台サーバーで複数のWebサイトを公開するための仮想ホスト(バーチャルホスト)という機能があります。

仮想ホスト機能により、複数のURLを使って、1台のサーバーで同一あるいはそれぞれ別の公開ディレクトリへアクセスさせることができます。

仮想ホスト機能

1台のサーバー上でインターネットに複数のサイトを公開する、あるいは、開発環境で複数の案件のアプリケーションを同一サーバーに設置したい場合など、使い方は様々でたいへん便利な機能です。

1台のサーバーで複数のWebサイトを公開する

仮想ホストは1台のサーバーを複数のサーバーであるかのように見せる機能です。複数のサーバーに見せるための手段として以下2つの方法があります。

  • 名前ベースの仮想ホスト
  • IPアドレスベースの仮想ホスト

通常はWebサーバーを運用するのにドメインの数以上のサーバーが必要となりますが、上記方法を使えば、1台のサーバーで複数のWebサイトを運用することができ、サーバーの数を減らし運用のコストを下げられるなどのメリットがあります。

では、それぞれの仕組みについて順に見ていきましょう。

名前ベースの仮想ホスト

名前ベースバーチャルホストは、利用するドメイン名すべてに同じIPアドレスを使用します。
WebブラウザはWebサイトへアクセスする際、アクセス先のホスト名をリクエストヘッダー内のHostフィールドに指定することが必須とされています。ApacheはHostフィールドを参照し、アクセス先のホストを識別します。

名前ベースの仮想ホストは、1つのサーバーに必要なIPアドレスが1つで済み、複数の異なるURLでアクセスできる構成を、比較的容易に設定できます。

IPベースの仮想ホスト

IPベースの仮想ホストは、利用するドメイン名ごとにIPアドレスを用意し、1つのサーバーに複数のIPアドレスを割り当て、IPアドレスごとに仮想ホストを設定する方法です。

クライアントが接続したいドメインごとに異なるIPアドレスへ接続してくるため、Apacheは接続先IPアドレスを見てアクセス先のホストを識別します。

汎用性の高い方法ですが、一般的にIPアドレスの取得は高コストであり、比較的敷居が高い方法です。

ただ、接続先ホストを識別するための識別子はIPアドレスだけではありません。IPアドレスに加えてポート番号も含めて識別できます。
そのため、IPアドレスは同じにし、ポート番号だけでリクエストを振り分けて表示するサイトを切り替えることもできます。この方法を上記2つの方法と区別して、ポートベースの仮想ホストと呼ばれることもあります。

ポートベースの仮想ホスト

ドメインもしくはIPアドレスを複数取得する必要がないこの方法が最も容易に仮想ホストを構成できます。

次回はそのポートベースの仮想ホストの設定方法について見ていきます。

2015年11月21日(土)|Apache2.2構築

Apacheを起動してWebページを表示する

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」の記述は省略できます。)

テストページ

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

2015年11月19日(木)|Apache2.2構築

.htaccessの編集

Apache全般に関する設定は「httpd.conf」で行ないますが、ディレクトリ単位で設定が必要な場合は「.htaccess」を使用します。

ディレクトリをアクセス不可能にしたり、認証ダイアログを出力しパスワードを入力しないと閲覧できないようにするなどの設定ができます。

本来それらの設定は「httpd.conf」で行なうことが望ましいのですが、「httpd.conf」を編集するには管理者権限が必要であるため、Webサーバーの管理者しか編集できません。しかし、Webサイトの管理者がWebサーバーの管理者であるとは限りません。例えば当サイトはレンタルサーバー上で公開していますが、そのような共有型サービスでは、当然、ユーザーひとりひとりに管理者権限が付与されるようなことはありません。しかし、Webサイトを運営していく上で、パスワードを設定して閲覧できるユーザーを限定したいなどの要望もあるでしょう。そのような要望に応えるためには一般ユーザーでもApacheの設定を変更できる仕組みが必要です。そこで出てくるのが「.htaccess」です。

「.htaccess」ファイルは、ユーザーに付与されたアクセス権限で設置し、設定します。「httpd.conf」に記述することができる設定のうちの多くは「.htaccess」にも記述することができます。

ただ、一般ユーザーにあれこれWebサーバーの設定を変更されると、サーバー負荷がかかる設定をされたり、セキュリティホールが発生する危険性があります。そのような事態を防ぐため、「.htaccess」で設定できる内容は「httpd.conf」で制限するのが一般的です。

「.htaccess」も「httpd.conf」と同様に構文があります。もし構文エラーがあると “500 internal server error” (サーバー内部エラー)をクライアント(Webブラウザ)に返します。「httpd.conf」の場合、構文エラーがあったらApacheの起動に失敗しますが、「.htaccess」は、実際に当該ディレクトリにアクセスしてみないとエラーかどうかわからないため、設置する場合は十分な動作確認が必要です。

「.htaccess」の主な使われ方として以下のようなものがあります。

ユーザーIDとパスワードによる制限 Basic認証やDigest認証を用いて特定のユーザーIDとパスワードを入力しないと閲覧できないようにする。
IPアドレス・ホスト名による制限 特定のIPアドレスもしくはホスト名からのアクセスのみを許可、あるいは拒否する。
エラーメッセージのカスタマイズ ユーザーID・パスワード不正、アクセス許可がない、ページが見つからない、サーバーエラーが発生した場合等、エラーメッセージを独自のものに設定できる。
MIMEタイプの指定 MIMEタイプを用いてファイル種類(jpg、pdf、zipなど)を判別する。

上記はあくまで一例であり、他にも検索エンジンにキャッシュされないようにするなど様々な設定が可能です。

2015年11月18日(水)|Apache2.2構築

httpd.confの編集

Apacheの設定はおもに「httpd.conf」ファイルを編集することで行ないます。

「httpd.conf」のインストール先はパッケージでインストールした場合と、ソースファイルからインストールした場合で異なります。

インストール方法 インストール先
バイナリパッケージ /etc/httpd/conf/httpd.conf
ソースファイルのビルド /usr/local/apache2/conf/httpd.conf

「httpd.conf」自体はただのテキストファイルであり、決められたルールや構文に従いエディタを使って直接編集します。また、設定の一部を外部ファイルに分割することもできます。設定ファイル本体は「httpd.conf」とし、モジュールや機能単位で設定ファイルを分割することで可読性を高めることができます。
httpd.conf分割

設定ファイルをうまく分割しておけば、途中で不要な機能となった場合など、その機能に対応する設定ファイルを読み込まないようにするだけで、機能を停止できます。また、他のシステムで設定ファイルを使いまわすこともでき、生産性が向上します。

httpd.confの構文

「httpd.conf」には決められた構文に従ってファイルを記述します。行単位で設定を行い、1行で1つの内容を設定します。1行の先頭で、その行で何の設定をするのかを識別するための記述をします。その記述を「ディレクティブ(Directive)」と言います。

1行の中でディレクティブに続けて引数を指定します。ディレクティブと引数の間には1つ以上の空白文字かタブを挿入します。

ディレクティブの使用例

ServerAdmin    webmaster@sample.com

引数は1つのディレクティブに対して複数指定することもできます。その場合は、空白文字で仕切ります。また、1つの引数の中に空白文字を含む場合は「”(ダブルクォーテーション)」で括ります。

なお引数は大文字・小文字を区別しますが、ディレクティブは区別しません。ただし、UNIX系OSではファイル名やディレクトリ名を大文字・小文字で区別されるため、ディレクティブも意識的に区別した方が良いでしょう。

最も基本的なディレクティブとして以下のようなものがあります。

ディレクティブ名 設定例 概要
ServerRoot ServerRoot “/etc/httpd” Apacheのシステム全体のルートとなるディレクトリを指定。
Listen Listen 80 Apacheが接続を受け付けるポート番号を指定。
DocumentRoot DocumentRoot “/var/www/html” Webページとして公開するコンテンツを格納する最上位のディレクトリを指定。
ServerAdmin ServerAdmin webmaster@sample.com 管理者のメールアドレスを指定。
Include Include conf.d/*.conf 他の設定ファイルを読み込む。

Apache2.2のディレクティブ一覧は以下サイトから確認できます。
http://httpd.apache.org/docs/2.0/ja/mod/directives.html

ディレクティブはサーバー全体に対しての設定はどこに記述しても構いません。ただし、特定のディレクトリやURLなどに設定を限定する場合は「<Directory ○○> ~ </Directory>」のようなブロック形式で、対象を限定する必要があります。ブロックの最初と最後に記述する指示子を「セクションコンテナ」と言います。

セクションコンテナ 単位 概要
<Directory パス名>~</Directory> ディレクトリ ディレクトリを表すパスはフルパスで指定。「*」や「?」などのワイルドカードを使った指定も可能。
<Files ファイル名>~</Files> ファイル ファイル名で指定する。そのファイルが存在するディレクトリに関係なく指定したファイル名に対応する。ワイルドカード指定も可能。
<Location URLパス名>~</Location> URL パス名はURLの中で「http://ホスト名/aaa/bbb」の「/aaa/bbb」の部分を指定する。

Apache2.2のセクションコンテナ一覧は以下サイトから確認できます。
https://httpd.apache.org/docs/2.2/ja/sections.html

2015年11月15日(日)|Apache2.2構築

自動起動の設定

Webサーバーは、常時稼動させておくのが一般的です。そのため、OS起動と同時にApacheも起動するように設定します。

Linuxでは、システムが必要とするプロセスやサーバープロセスなどを、バックグラウンドで常駐さておきます。このような常駐プロセスを「デーモン(daemon)」と呼びます。

ランレベル

ランレベル(runlevel)とは、Linuxの動作モードのことをいいます。いくつかの種類があり、ランレベル毎に起動させるサービスを設定できます。

ランレベル 動作モード
0 システム停止
1 シングルユーザーモード
2 マルチユーザーモード(CUI,ネットワークなし)
3 マルチユーザーモード(CUI)
4 未使用
5 マルチユーザーモード
6 再起動
S(or s) シングルユーザーモード

ランレベルに応じて、デーモン(サービス)の自動的に起動・停止を操作します。

オプションなしでchkconfigコマンドを実行すると、全てのサービス自動起動の設定「on/off」が確認できます。Apacheのみを確認したい場合は、「–list」オプションを指定します。

# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

全てのランレベルでoffになっていることを確認できます。また、現在CentOSがどのランレベルで動作しているかは、runlevelコマンドで確認できます。

# runlevel
N 5

自動起動の設定

ApacheをOS起動に合わせて起動されるように設定します。

# chkconfig --level 35 httpd on

ランレベル3と5で起動した場合にApacheも自動起動されるよう設定しました。以下コマンドで、登録状況を確認します。

# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:on    4:off   5:on    6:off

以上で自動起動するように設定されました。これでCentOSを再起動しても、OS起動とともにApache(HTTPデーモン)が起動されるようになります。

2015年11月14日(土)|Apache2.2構築

Apache2.2のインストール

Apacheをインストールする方法は以下の方法があります。

  • Apacheソフトウェア財団が配布しているソースアーカイブをビルドする。
  • 各OSに用意されたバイナリパッケージを利用する。

バイナリパッケージを利用する場合、パッケージ管理ユーティリティ(yumやrpm等)を利用できるため、アップデートや削除を簡単に行なえます。さらにApache関連ユーティリティを追加するケースでも、パッケージの依存性やバージョンの差異も自動で解決してくれます。
CentOSやUbuntuのような主要なLinuxディストリビューションにはApacheのバイナリパッケージが最初から含まれています。そのため、わざわざソースアーカイブをダウンロードしてビルドする必要は基本的にありません。

ただし、ソースファイルからインストールする必要があるケースもあります。主なケースとして以下があげれます。

  • 最新バージョンのApacheを使用したい。
  • 使用しているプラットフォームに適合したバイナリパッケージが入手できない。
  • 機能拡張モジュールを静的に組み込みたい。
  • MPMを変更したい。

たいていのバイナリパッケージは動的組み込みが標準となります。そのため、性能を重視し、静的組み込みを利用したい、あるいはマルチスレッド系のMPMを利用したい場合などはソースファイルからインストールする必要があります。(MPMに関してはApache2.3から動的に切り替えることができるようになりました。)

今回はCentOSでバイナリパッケージをインストール手順を見ていきます。

Apacheのインストール

yumを使ってインターネット経由でパッケージをインストールします。

# yum install httpd
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
Setting up Install Process

 ~ 省略 ~

Is this ok [y/N]: y

 ~ 省略 ~

Complete!

途中、インストール内容を確認されるので、「y」を入力してEnterキー押下します。
インストールに成功すれば「Complete!」と表示されます。

このようにパッケージ管理ユーティリティ(yum)を使えば、簡単にインストールできます。

Apacheのバージョン確認

インストールされているApacheのバージョンは「httpd -v」コマンドで確認できます。

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Feb 22 2013 11:17:44

他にも、RPM(Resource Package Manager)ユーティリティからでも確認できます。

# rpm -qa | grep httpd
httpd-tools-2.2.15-47.el6.centos.i686
httpd-2.2.15-47.el6.centos.i686

今回はコマンドライン(CUI)で操作する方法を紹介しましたが、GUIが使える環境ならば、GUIツールをからも同様な操作が可能です。

2015年11月07日(土)|Apache2.2構築

機能拡張モジュールの種類

Apacheには多くの機能がモジュールという単位で組み込まれています。機能をモジュール化することで、さまざまな機能を柔軟に選択することができます。

モジュールは、CGIやSSIが実行できるようにするもの、ドキュメントルートとして指定されたディレクトリ外のファイルを公開するためのエイリアスを設定するもの、プロキシサーバーとして動作させるためのものなど、豊富にあります。

モジュールの種類

ここではそれらモジュールのうち、代表的なものを紹介します。

モジュール 機能概要
mod_deflate サーバーから送信するデータを自動的に圧縮する。圧縮データを受け取ったWebブラウザは、ヘッダー情報から判断して自動的にデータを復元する。
mod_php ApacheにPHPの機能を組み込んで利用できるようにする。
mod_cache スクリプト言語やCGIなどで生成される動的ページをキャッシュする。
mod_proxy Apacheをリバースプロキシとして利用できるようにする。
mod_rewrite アクセスURLを正規表現により別のURLへリダイレクトする。
mod_security ApacheにWebアプリケーションファイアウォールの機能を追加する。

ここで紹介したのは一部に過ぎず、Apacheで利用できるモジュールは他にもたくさんあります。また、すでに公開されているモジュールに目的のものが見つからなかったら、自分で独自のモジュールを作成することもできます。

2015年11月06日(金)|Apache2.2構築

1 2 次へ »

サイト内検索

カテゴリー

  • Apache2.2構築
  • BIND DNSサーバー構築
  • Linux基礎知識
  • NTPサーバー構築
  • vsftpd FTPサーバー構築

サイト情報

  • 当サイトについて
  • 免責
  • お問い合わせフォーム
  1. CentOSサーバー構築入門
  2. Apache2.2構築の記事一覧

CentOSサーバー構築入門

CentOSによるサーバー構築方法をわかりやすく解説しています。
  • 特定商取引法に基づく表示
  • 運営者情報
  • お問い合わせ
  • サイトマップ
  • twitter
  • facebook
  • Google +1
  • RSS
Copyright ©2025 CentOSサーバー構築入門 All Rights Reserved.

[↑]このページの先頭へ