このページの対象Linuxディストリビューションは次のものです。

ページ内リンク

サイト内リンク


2011/03/28 作成
2011/05/01 更新

webサーバ(apache2)の設定


事前準備

Ubuntuはaptitudeをインストールしておく
もしくはaptitudeの代わりにapt-getを使用する。
またdebianではsudoの設定を行っておく

環境

目標

作業

インストール

$ sudo aptitude update
$ sudo aptitude install apache2

最初の動作確認

この時点でwebサーバは動いている。
webブラウザでhttp://sampleにアクセスすると以下のように表示される。

It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.

ここで表示されているhtmlは/var/www/index.htmlだ。
/var/www/がhttpでアクセスしたときのルートになる。
この設定が書かれているのは/etc/apache2/sites-enabled/000-defaultだ。
このファイルはリンクで実体は/etc/apache2/sites-available/defaultになる。

設定

debian、ubuntuでのapache2のサイトの設定方法は設定ファイルを作成しその設定を有効にする事で行う。
/etc/apache2/sites-available/にバーチャルホストの設定を作成する。
そして/etc/apache2/sites-available/にリンクを作成しその設定を有効にする。
バーチャルホストとは1台のマシンで複数のサイトを実現する技術である。
1台のマシンで複数のサイトを実現するのは仮想マシンでもできる。
バーチャルホストは仮想マシンではなくはwebサーバの機能だ。
サイトの切替はIPアドレス、ホスト名、ポート番号によって行うことが出来る。
(ポート番号の違いでサイトを分けるのはバーチャルホストではないが設定方法の考え方は同じ。)

現在稼動しているサイトはデフォルトの設定ファイルで動いている。
このファイルは直接修正しない。
設定ファイルをバーチャルホスト毎にコピーする。
このコピーしたファイルを修正して使用する。

現在稼動しているデフォルトの設定である000-defaultを削除する。

$ sudo a2dissite 000-default

a2dissiteは/etc/apache2/sites-enabled/にあるリンクを削除するコマンドになる。
設定は削除したがバーチャルホスト設定'default'はまだ有効なままだ。
設定ファイルの再読込みをする。

$ sudo /etc/init.d/apache2 reload

これでバーチャルホスト設定'default'は無効になった。
'default'をコピーしバーチャルホスト設定'www'を作成する。

$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/www

'www'を有効にする

$ sudo a2ensite www

a2ensiteは/etc/apache2/sites-available/にある設定のリンクを/etc/apache2/sites-enabled/に作成するコマンドだ。
/etc/apache2/sites-enabled/に/etc/apache2/sites-available/にあるのと同じ名前でリンクが出来る。
ここでは/etc/apache2/sites-enabled/wwwが出来た。

ユーザのホームディレクトリにアクセス出来る様になるモジュールを有効にする。
モジュール名はuserdirだ。

$ sudo a2enmod userdir

a2enmodは/etc/apache2/mods-available/にある設定のリンクを/etc/apache2/mods-enabled/に作成するコマンドだ。
モジュールもバーチャルホストの設定と同じように/etc/apache2/mods-enabled/にリンクを作成することでモジュールが有効になる。
設定を再読込みする。

$ sudo /etc/init.d/apache2 reload

これで「http://sample/~ユーザー名/」で各ユーザのホームディレクトリのpublic_htmlをアクセス出来る。

2011/03/29

設定その2

userdirモジュールを使用した場合すべてのバーチャルホストでこの機能が有効になる。
この機能が必要ないバーチャルホストはこの機能を無効にする設定をする必要がある。
無効にする方法はバーチャルホストの設定の中でUserDir disableと記述することである。
またこの記述のあとユーザーをenableにする記述をすればそのユーザは機能が有効になる。
dummyuserを有効にする場合はUserDir enabled dummyuserと記述する。
どのディレクトリをUserDirとしてアクセスするかの記述も必要になる。
このディレクトリはシンボリックリンクでも構わない。
UserDir public_htmlと記述する。
バーチャルホスト設定'www'を修正する。

$ sudo nano /etc/apache2/sites-available/www

<VirtualHost *:80>と</VirtualHost>の間に以下の設定を記述する。
ServerAdminの設定の後ろで良いだろう。

UserDir public_html
UserDir disabled
UserDir enabled dummyuser

複数のユーザーにuserdirの機能を有効にするにはenableのあとに複数ユーザを連続して記述しても良いし、複数のenableを記述しても良い。

UserDir enabled ユーザー1 ユーザー2 ユーザー3

UserDir enabled ユーザー1
UserDir enabled ユーザー2
UserDir enabled ユーザー3

2011/03/31

ポート番号でサイト挙動を変える

今まで設定したのはポート番号が80だった。
今度はポート番号が81のサイトを作る。
ポート番号が81のサイトはpublic_htmlフォルダへのアクセスの仕方を変える。
ポート番号が80のサイトは「http://sample/~ユーザー名/」で各ユーザのpublic_htmlにアクセス出来るようにした。
ポート番号が81のサイトは「http://sample:81/ユーザー名/」で各ユーザのpublic_htmlにアクセス出来るようにする。

/etc/apache2/ports.confにポート番号81で待ち受けする設定を追加する。

$ sudo nano /etc/apache2/ports.conf

Listen 80の行の次の行にListen 81と記述する。

'default'をコピーしバーチャルホスト設定'www2'を作成する。

$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/www2

'www2'を編集してポート番号81用の設定ファイルにする
userdirの機能を無効にする。
ユーザー名でpublic_htmlにアクセス出来る設定を追加する。

$ sudo nano /etc/apache2/sites-available/www2

<VirtualHost *:80>を<VirtualHost *:81>に変更する。

ServerAdminの設定の下の行にUserDir disabledを追加する。

ScriptAliasの前の行にAlias /dummyuser/ /home/dummyuser/public_html/を追加する。

'www2'を有効にする。

$ sudo a2ensite www2

設定を反映する。

$ sudo /etc/init.d/apache2 reload

動作確認をする。
/home/dummyuser/public_html/にindex.htmlを置く。
http://sample/~dummyuser/」、「http://sample:81/dummyuser/」でindex.htmlにアクセス出来る。
http://sample/dummyuser/」、「http://sample:81/~dummyuser/」ではアクセス出来ない。
完了。

2011/04/01

SSL(HTTPS)を使用するサイトの設定

SSLを使用するサイトの設定を行う。
SSLを使用するバーチャルホストの雛形も用意されている。
/etc/apache2/sites-available/default-sslがそれだ。
default-sslをコピーして設定ファイルを作成する。

$ sudo cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-available/www-ssl

'www-ssl'を有効にする。

$ sudo a2ensite www-ssl

sslモジュールを有効にする。

$ sudo a2enmod ssl

apache2を再起動する。

$ sudo /etc/init.d/apache2 restart

動作確認をする。
SSLを使用する場合はURIで指定するプロトコルはhttpではなくhttpsになる。
https://sample/
セキュリティ証明書が自己署名証明書で認証局に登録された正式な証明書ではないためセキュリティ警告が出る。

自己署名証明書を更新もしくは新規作成する。
ルートになる。

$ sudo -s

自己署名証明書を現在のホスト名で更新する。

# make-ssl-cert generate-default-snakeoil --force-overwrite

更新される証明書は/etc/ssl/certs/ssl-cert-snakeoil.pemになる。
更新される秘密鍵は/etc/ssl/private/ssl-cert-snakeoil.keyになる。

別の自己署名証明書を作成する場合もmake-ssl-certを使用する。

# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf ~/apache.crt

作成したapache.crtは秘密鍵と証明書が一体になっている。
証明書ファイルを作成する。

# openssl x509 -in ~/apache.crt > /etc/ssl/certs/apache.pem

秘密鍵ファイルを作成する。

# openssl rsa -in ~/apache.crt > /etc/ssl/private/apache.key

パーミッションを変更する。

# chown root:ssl-cert /etc/ssl/private/apache.key
# chmod 640 /etc/ssl/private/apache.key

apache.crtを削除する。

# rm ~/apache.crt

(ubuntuではapache.crtのリンクが作成されているのでそれも削除する。)

ルートを抜ける。

# exit

自己署名証明書を更新した場合は設定ファイルを変更する必要はない。
別の自己署名証明書を作成した場合は設定ファイルを変更する。

$ sudo nano /etc/apache2/sites-available/www-ssl

SSLCertificateFile/etc/ssl/certs/ssl-cert-snakeoil.pemから /etc/ssl/certs/apache.pemに変更する。
SSLCertificateKeyFile/etc/ssl/private/ssl-cert-snakeoil.keyから /etc/ssl/private/apache.keyに変更する。

設定を反映する。

$ sudo /etc/init.d/apache2 reload

内向きの証明書なら自己署名証明書でよいが外部に公開するなら正式な証明書を購入して使用する。

サイトをパスワードで保護する設定

SSL(HTTPS)を使用するサイトの設定」にパスワード保護の設定を追加する。

パスワードファイルを作成しユーザーを追加する。
コマンドは「htpasswd -c パスワードファイル ユーザー」となる。

$ sudo htpasswd -c /etc/apache2/.passwd dummyuser
New password:
パスワードを入力する。
Re-type new password:
確認のためもう一度パスワードを入力する。
Adding password for user dummyuser

-cオプションはパスワードファイルを作成するオプションだ。
すでにパスワードファイルが存在する場合は使用しない。
別のユーザーを追加するコマンドは「htpasswd パスワードファイル ユーザー」となる。
同じコマンドで既に登録してあるユーザーのパスワードを更新する事も出来る。
この場合は最後のメッセージが追加ではなく更新になる。
Updating password for user dummyuser

設定ファイルを変更する。

$ sudo nano /etc/apache2/sites-available/www-ssl

<Directory /var/www/>と</Directory>の間に以下の設定を記述する。
allow from allの下に記述すればよい。

AuthType Basic
AuthName "www-ssl"
AuthUserFile /etc/apache2/.passwd
Require valid-user

意味はBasic認証を行う。
パスワードファイルは/etc/apache2/.passwd。
認証できたユーザしかアクセス出来ない。
AuthNameはこの認証設定の名前で、ほかの認証設定の名前と被らない様にする。

設定を反映する。

$ sudo /etc/init.d/apache2 reload

完了。

WebDAVの設定

WebDAVはネットワークフォルダ(ドライブ)の機能だ。
バーチャルホスト'www'でこの機能を使用できるように設定する。

文字化け対策用のモジュールをインストールする。

$ sudo aptitude update
$ sudo aptitude install libapache2-mod-encoding

dav_fsモジュールを有効にする。

$ sudo a2enmod dav_fs
Considering dependency dav for dav_fs:
Enabling module dav.
Enabling module dav_fs.

davモジュールも依存関係で有効になる。

encodingモジュールを有効にする。

$ sudo a2enmod encoding

WebDAVでアクセスするディレクトリを作成する。

$ sudo mkdir /var/dav

ディレクトリの所有権を変更する。

$ sudo chown www-data:www-data /var/dav

'www'にWebDAVの設定を追加する。

$ sudo nano /etc/apache2/sites-available/www

以下の記述を追加する。

Alias /dav /var/dav
<Directory /var/dav>
        DAV On
</Directory>

設定を反映する。

$ sudo /etc/init.d/apache2 reload

apache側の設定は完了。
文字化け対策用のモジュールであるencodingは有効にはしたが設定はしていない。
apache側の文字コードがja_JP.UTF-8でWindows側がs-jisの場合、何も設定しなくても文字化けはしていない。
(エンコードするのはファイル名でファイルの内容に関してはエンコードしない。)

Windows 7でこのフォルダにアクセスする。
エクスプローラを起動する。
「コンピュータ」を選択する。
右クリックメニューから「ネットワークの場所を追加する」を選択する。
「ネットワークの場所の追加」ウイザードが開く。
「カスタムのネットワークの場所」を選択、「次へ」ボタンをクリック。
「インターネットまたはネットワークのアドレス」にURIを入力する。
今回の場合は「http://sample/dav/」になる。
「次へ」ボタンをクリック。
「名前」にホスト名が入っている。
「次へ」ボタンをクリック。
「完了」ボタンをクリック。
「コンピュータ」の一番下に「sample」フォルダが出来ている。
削除したい場合はこの「sample」フォルダを選択し右クリックメニューから「削除」を選択する。
「ネットワークの場所を追加する」を選んだが「ネットワークドライブの割り当て」を選ぶことも出来る。

WebDAVにはXP Pro(32Bit)でもアクセスできるがXP Pro x64ではアクセス出来ない。

パスワード認証付きWebDAVの設定

WebDAVのアクセスにもパスワード認証がつけられる。
しかしWindows 7はhttpでのパスワード認証付きのネットワークフォルダアクセスが出来ない。
これはパスワードが平文でネットワークに流れるのを避けるための処置だ。
つまりWindows 7はパスワード認証付きのネットワークフォルダアクセスはssl(https)で行う事になる。
SSL(HTTPS)を使用するサイトの設定」にパスワード認証付きWebDAVの設定を追加する。
WebDAVでネットワークフォルダとして提供するディレクトリは 「WebDAVの設定」で作成したディレクトリを使用する。
使用するパスワードファイルは「サイトをパスワードで保護する設定」 で作成したパスワードファイルを使用する。

'www-ssl'にWebDavの設定を追加する。

$ sudo nano /etc/apache2/sites-available/www-ssl


        Alias /dav /var/dav
        <Directory /var/dav>
                DAV On
                AuthType Basic
                AuthName "Web Dav SSL"
                AuthUserFile /etc/apache2/.passwd
                Require valid-user
        </Directory>

設定を反映する。

$ sudo /etc/init.d/apache2 reload

apache側の設定は完了。

Windows 7でこのフォルダにアクセスする。
エクスプローラを起動する。
「コンピュータ」を選択する。
右クリックメニューから「ネットワークドライブの割り当て」を選択する。
「フォルダー」にURIを入力する。
今回の場合は「https://sample/dav/」になる。
「完了」ボタンをクリック。
「Windowsセキュリティ」ダイアログが開く。
ユーザー名とパスワードを入力する。
「OK」ボタンをクリック。
ネットワークドライブが追加される。

httpsを使用した場合、XPだとIPアドレスでもアクセス出来たがが7だとホスト名しかアクセス出来なかった。
またUbuntuからアクセスした場合もIPアドレスでアクセス出来た。
IPアドレスでアクセスできないのは7の仕様かも知れない。


IPv6対応

ubuntuではIPv6でアクセスできなかった。
debianでは一部の機能が使用できなかったがアクセスできる機能もある。

WebDAVのネットワークドライブはIPv6では接続出来なかった。
XP Pro(32bit、64bit)はブラウザからのアクセスも出来なかった。
これらはIPv6アドレスを直接入れた為かも知れない。
IPv6アドレスの名前解決できる環境だと出来るかも。

ブラウザからのアクセスに関しては7上でhttpもhttpsもChrome10とIE8でアクセス出来た。
アドレスの指定方法は'['と']'で囲む方式になる。
インターフェースは指定しない
http://[IPv6アドレス]となる。
以下に例を示す。
http://[fe80::20c:29ff:fe01:44a0]/

またUbuntuのFirefox3.5.6でもIPv6でアクセスできた。
アドレスの指定方法は'['と']'で囲む方式になる。
インターフェースは指定する
http://[IPv6アドレス%インターフェース]となる。
以下に例を示す。
http://[fe80::20c:29ff:fe01:44a0%eth0]/

IPv6アドレスにインターフェースを指定するかしないかはブラウザよりもOSの違いかもしれない。

設定ファイルではNameVirtualHost ディレクティブでIPv6アドレスを指定する場合は'['と']'で囲むと ドキュメントに記述してされている。
<VirtualHost> ディレクティブも同様。



リンク

参考

ページ内リンク

サイト内リンク


[Top][Page Top]

サイト全体のアクセスカウンタ

はてなブックマークに追加 Tweet