Apacheの設定

この記事は1年以上前に投稿されたものです。
内容が古い可能性がありますのでご注意ください。

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に関する設定
  • sites-available
    #バーチャルホスト用のサイト定義ファイルを置くディレクトリ

    • 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です。

参考サイト様

「Apacheの設定」への4件のフィードバック

  1. ピンバック: AWStatsの導入 « SkyGarden出張所

  2. ピンバック: このブログについて « SkyGarden出張所

  3. ピンバック: 新サーバ用マシンの備忘録(5) | Corsa Libera.

  4. ピンバック: 新サーバ用マシンの備忘録(5) | corsalibera.

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA