内容が古い可能性がありますのでご注意ください。
Webサーバー「Apache」の設定を行います。
【2010.5.20追記】DocumentRootの設定を変更致しました。
ubuntu serverにおけるApacheの特徴
「キャッシュ専用DNSサーバー構築」のBINDと同じく、Apacheも基本設定ファイルをいじらず、専用のファイルを追加して管理するやり方になっています。
【設定ファイルの構造】
/etc/apach2/以下のファイルおよびディレクトリ
- apache2.conf
#Apache2のデフォルト設定ファイル - httpd.conf
#apache2.confにインクルードされる独自設定ファイル - envvars
#apache2.confにインクルードされる環境変数ファイル - ports.conf
#apache2.confにインクルードされるポート関連の設定ファイル - conf.d/
#apache2.confにインクルードされる各設定ファイルのディレクトリ- charset
#AddDefaultCharsetに関する設定
- charset
- sites-available
#バーチャルホスト用のサイト定義ファイルを置くディレクトリ- default
#サンプル用のサイト定義ファイル
- default
- sites-enabled
#有効になっているサイト定義ファイル一覧 - mods-available
#モジュール関連の設定ファイルを置くディレクトリ - mods-enabled
#有効になっているモジュール一覧
また、サイト設定とモジュールに関して、専用のコマンドが用意されています。
【サイト設定について】
バーチャルホストの設定を有効・無効にするコマンドです。
[html]sudo a2ensite サイト定義ファイル #←有効にする
sudo a2dissite サイト定義ファイル #←無効にする[/html]
【モジュールについて】
Apacheモジュールの有効・無効に関連するコマンドです。
[html]sudo a2enmod モジュール名#←有効にする
sudo a2dismod モジュール名#←無効にする[/html]
さらに、ubuntu serverにおいてはApacheのユーザー名と所属グループが他のディストリビューションと異なり「www-data」になっています。
Apache設定の方針
- CGIはどこでも実行可にする
- SSIは.shtmlファイルのみ実行可にする
- .htaccessファイルを使えるようにする
- バーチャルホストの前提でサイトを構築する
- Perlのパスで/usr/bin/perlと/usr/local/bin/perlを使えるようにする
- PHPを使えるようにする
- BasicおよびDigest認証を使えるようにする
- SSLを使えるようにする
- mod_rewriteを使えるようにする
- mod_deflateはサーバー負荷を考えて使用しない
以上の方針でApacheを設定していきます。
各設定ファイルの調整
まず最初に設定ファイルを作成していきます。
- 全サイト共通→conf.d/ディレクトリ内に設定ファイルを個別に作成
- サイト定義→sites-available/ディレクトリ内に設定ファイルを作成
- モジュール→a2enmod、a2dismodで変更する
以上の方針で作成します。
1.conf.d/securityファイル(新規作成)
[html]sudo nano /etc/apache2/conf.d/security
#エラーページ等でOS名を表示しないようにする
ServerTokens Prod
#エラーページ等でApacheのバージョンを非表示にする
ServerSignature Off[/html]
2.conf.d/defaultファイル(新規作成)
[html]sudo nano /etc/apache2/conf.d/default
#CGIの設定
AddHandler cgi-script .cgi .pl
#Indexページの優先順位を設定
DirectoryIndex index.html index.htm index.shtml index.php index.cgi
#長すぎるURI(414エラー)はログに記録しないように変更
LogFormat “%h %l %u %t \”%!414r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
#ワームからのアクセスを記録しないようにする
SetEnvIf Request_URI “cmd\.exe” nolog
SetEnvIf Request_URI “root\.exe” nolog
SetEnvIf Request_URI “Admin\.dll” nolog
SetEnvIf Request_URI “NULL\.IDA” nolog
SetEnvIf Request_URI “^/_mem_bin/” nolog
SetEnvIf Request_URI “^/_vti_bin/” nolog
SetEnvIf Request_URI “^/c/” nolog
SetEnvIf Request_URI “^/d/” nolog
SetEnvIf Request_URI “^/msadc/” nolog
SetEnvIf Request_URI “^/MSADC/” nolog
SetEnvIf Request_URI “^/scripts/” nolog
SetEnvIf Request_URI “^/default.ida” nolog
#画像やCSSへのアクセスログを記録しないようにする
SetEnvIf Request_URI “\.(gif)|(jpg)|(png)|(ico)|(css)$” nolog
#サーバー自身や自宅LAN内からのアクセスを記録しないようにする
SetEnvIf Remote_Addr 192.168.xxx. nolog
SetEnvIf Remote_Addr 192.168.xxx. nolog
SetEnvIf Remote_Addr 127.0.0.1 nolog
#nolog以外を記録
CustomLog /var/log/apache2/access.log combined env=!nolog
#favicon用設定を追加
AddType image/x-icon .ico
#SSIのMIME設定を追加(拡張子が.shtmlのみ許可)
#モジュールを有効にして下さい
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml[/html]
3.sites-available/【サイト名】ファイル(新規作成)
各サイト用の定期ファイルです。
[html]#デフォルトをコピーして各サイト用の定義をします。
※ここではサイト名「demo」を例に記載します。
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/demo
sudo nano /etc/apache2/sites-available/demo
NameVirtualHost *:80
<VirtualHost *:80>
#ServerAdmin webmaster@localhost
ServerAdmin xxxxxxxxxx@xxx.xxx
#↑エラーページ等に表示される管理者メールアドレスを指定
ServerName ドメイン名:80
#↑Webサーバーが動作しているホストの「ホスト名:ポート番号」を指定
#ダイナミックDNSサービスにて取得したサブドメインまたは独自ドメインを記載します。
#DNSに登録されていない場合はIPアドレスでも可。
#DocumentRootを変更
#DocumentRoot /var/www/
DocumentRoot /home/demo/www/ #←2010.5.20修正:サイト名の配下にWebサイト専用のディレクトリを追加するように変更致しました。
#ルートディレクトリ以下の設定
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
#/home/demo/www/以下の設定
#ディレクティブのセクションパスを変更しておきます
<Directory /home/demo/www/>
#Options Indexes FollowSymLinks MultiViews
#AllowOverride None
#Optionsディレクティブの変更
#SSI、CGI、mod_negotiation、オーナー一致の場合のみのシンボリックリンクを辿ることを許可
#indexesは必ず外すこと
Options ExecCGI SymLinksIfOwnerMatch Includes MultiViews
#.htaccessの設定を全て有効にする
AllowOverride All
#アクセス制限は無し
Order allow,deny
allow from all
</Directory>
#以下のディレクティブを全てコメントアウト
# ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
# <Directory “/usr/lib/cgi-bin”>
# AllowOverride None
# Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
# Order allow,deny
# Allow from all
# </Directory>
#エラーログの場所を指定
ErrorLog /var/log/apache2/error.log
#以下の設定はそのまま
Alias /doc/ “/usr/share/doc/”
<Directory “/usr/share/doc/”>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>[/html]
一通り設定したらサイト定義を有効にします。
[html]sudo a2dissite default
sudo a2ensite demo[/html]
サイト定義ファイルをチェックしてみます。
[html]sudo apache2ctl configtest
Syntax OK #このように表示されればOKです。[/html]
最後にSSIを有効にします。
[html]sudo a2enmod include[/html]
その他の設定について
1.サイト用のディレクトリを作成
[html]mkdir -p /home/demo/www #2010.5.20修正(-pオプションと/wwwを追加致しました)
ls -alt /home/|grep demo
xxx xxx demo
ls -alt /home/demo/ #2010.5.20追加
xxx xxx www
#所有者と所属グループが現在のユーザーになっているか確認(rootではない)
※所有者でないとFTPでアップ出来ないので注意
[/html]
2.Perlのパスを追加する
[html]sudo ln -s /usr/bin/perl /usr/local/bin/perl
#シンボリックリンクを作成
whereis perl
perl: /usr/bin/perl /usr/local/bin/perl #←このように表示されればOK[/html]
3.PHPを使えるようにする
LAMPサーバーセットアップ時に自動的に使えるようになっています。
有効になっていない場合は下記コマンドを実行して下さい。
[html]sudo a2enmod php5[/html]
※PHPの設定につきましてはPHPの設定ページにて説明します。
4.BasicおよびDigest認証を使えるようにする
共にアクセス制限を行えるようになりますが、Basic認証はユーザー情報が平文で流れるのに対し、Digest認証はMD5による暗号化およびチャレンジ・レスポンス型の認証を行いますのでより安全になります(但し古いWebブラウザには対応していません)
[html]sudo a2enmod auth_basic auth_digest[/html]
それぞれの.htaccessの書式は以下の通りです。
※.htaccessは、そのファイルを置いたディレクトリ配下に対して有効になります。
▼Basic認証
[html]AuthUserFile /home/hogehoge/.htpasswd
AuthGroupFile /dev/null
AuthName “xxxxxxxxxx”
AuthType Basic
require valid-user[/html]
1行目:パスワードファイルの場所をルートからの絶対パスで指定します。
パスワードファイルはWebからアクセス出来ない場所に置きましょう。
2行目:グループに対するアクセスは許可しないようにします。
3行目:確認ダイアログに表示する文字列を入力します。日本語だと文字化けする可能性があるので半角英数字が無難です。
4行目:認証形式を指定します。
5行目:パスワードファイルに登録したすべてのユーザーにアクセスを許可します。
次にパスワードファイルを作成します。サーバー上で作成するのと、外部サービスで作成する方法がありますが、ここではサーバー上で作成します。
[html]sudo htpasswd -c /home/hogehoge/.htpasswd 認証ユーザー名
~パスワードを確認も含めて2回入力します~
※次回以降は、-c無しで実行します(-cをつけたまま実行するとそれまでのパスワードファイルが消去されるので注意)
sudo htpasswd /home/hogehoge/.htpasswd 追加ユーザー名
~パスワードを確認も含めて2回入力します~[/html]
▼Digest認証
[html]AuthUserFile /home/hogehoge/.htdigest
AuthName “xxxxxxxxxxx”
AuthType Digest
require valid-user
BrowserMatch “MSIE” AuthDigestEnableQueryStringHack=On[/html]
1行目:パスワードファイルの場所をルートからの絶対パスで指定します。
Basic認証の時と同じく、パスワードファイルはWebからアクセス出来ない場所に置きましょう。
2行目:realmの設定を行います。後述するパスワードファイルを作成する際に必要になります。必ず半角英数字で入力して下さい。
3 行目:認証形式を指定します。
4行目:パスワードファイルに登録したすべてのユーザーにアクセスを許可します。
5行目:IE用の記述です。これが無いとIEで上手く動作しないことがあるようです。
次にパスワードファイルを作成します。Digest認証の場合はサーバー上にてファイルを作成します。
[html]sudo htdigest -c /home/hogehoge/.htdigest “xxxxxxxxxx” 認証ユーザー名
~パスワードを確認も含めて2回入力します~
※”xxxxxxxxxx”のxxxxxxxxxxには、.htaccessファイルのAuthNameとしてつけたrealmを正確に入力します。
※次回以降は、-c無しで実行します(-cをつけたまま実行するとそれまでのパスワードファイルが消去されるので注意)
sudo htdigest /home/hogehoge/.htdigest “xxxxxxxxxx”追加ユーザー名
~パスワードを確認 も含めて2回入力します~[/html]
※.htaccessや.htpasswd、.htdigestファイルは外部から直接アクセス出来無いよう、Apacheのデフォルト設定(apache2.confのFilesタグ)で対策が施されています。
5.SSLを使えるようにする
[html]sudo a2enmod ssl[/html]
※Apacheに専用のディレクティブ設定ファイルを作成する必要があります。詳しくはSSLの導入ページにて説明します。
6.mod_rewriteを使えるようにする
当ブログのパーマネントリンク設定などに使っています。
[html]sudo a2enmod rewrite[/html]
7.mod_deflateを無効にする
当サーバーはスペック的に厳しいと思ったので無効にしました。
[html]sudo a2dismod deflate[/html]
Apacheの再起動及び設定の再読み込み
ここまで設定を行ったら、最後にApacheを再起動します。
モジュール関連を変更した場合は再起動して下さい。
[html]sudo /etc/init.d/apache2 restart[/html]
設定ファイルのみを再読込させる場合はforce-reloadでOKです。
[html]sudo /etc/init.d/apache2 force-reload[/html]
Webサイトへアクセスしてみる
/home/demo/ディレクトリにindex.htmlを作成します。
その後、以下のURLにてアクセスしてみて下さい。
[html]sudo cp /var/www/index.html /home/demo/
sudo chown ユーザー名:ユーザー名 /home/demo/index.html
#Webブラウザにてアクセスします。
http://サーバーのプライベートIPアドレス/[/html]
太文字で「It works!」と表示されればOKです。
参考サイト様
- HTTPD – Apache2 Web Server|ubuntu documentation
- マルチサイト構築(Apacheバーチャルホスト設定)するには|Ubuntu Japanese Wiki
- Apache HTTP サーバ バージョン 2.2 ドキュメント
- apacheをインストール|おれ最前線ねっと
- Webサーバー構築(Apache)|CentOSで自宅サーバー構築
- Apache2の基本設定|Vine Linuxで自宅サーバー
- Webサーバの設定 – Apache|tech.ckme.co.jp
- Ubuntu/apache2|TOBY SOFT wiki
- Ubuntuのapache設定|ふっくんのブログっぽいサイト
- 基本認証でアクセス制限をかける方法|[ホームページ作成]All About
- Apacheで認証したい|パソコンおやじ
ピンバック: AWStatsの導入 « SkyGarden出張所
ピンバック: このブログについて « SkyGarden出張所
ピンバック: 新サーバ用マシンの備忘録(5) | Corsa Libera.
ピンバック: 新サーバ用マシンの備忘録(5) | corsalibera.