トップ > SkyGarden出張所 > Apache > Apacheの設定

Apacheの設定

2010年5月20日 | カテゴリー: Apache, ubuntu server ppc, 自宅サーバー

タグ:

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
    #有効になっているモジュール一覧

また、サイト設定とモジュールに関して、専用のコマンドが用意されています。

【サイト設定について】
バーチャルホストの設定を有効・無効にするコマンドです。

sudo a2ensite サイト定義ファイル #←有効にする
sudo a2dissite サイト定義ファイル #←無効にする

【モジュールについて】
Apacheモジュールの有効・無効に関連するコマンドです。

sudo a2enmod モジュール名#←有効にする
sudo a2dismod モジュール名#←無効にする

さらに、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ファイル(新規作成)

sudo nano /etc/apache2/conf.d/security
#エラーページ等でOS名を表示しないようにする
ServerTokens Prod
#エラーページ等でApacheのバージョンを非表示にする
ServerSignature Off

2.conf.d/defaultファイル(新規作成)

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

3.sites-available/【サイト名】ファイル(新規作成)

各サイト用の定期ファイルです。

#デフォルトをコピーして各サイト用の定義をします。
※ここではサイト名「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>

一通り設定したらサイト定義を有効にします。

sudo a2dissite default
sudo a2ensite demo

サイト定義ファイルをチェックしてみます。

sudo apache2ctl configtest
Syntax OK #このように表示されればOKです。

最後にSSIを有効にします。

sudo a2enmod include

その他の設定について

1.サイト用のディレクトリを作成

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でアップ出来ないので注意

2.Perlのパスを追加する

sudo ln -s /usr/bin/perl /usr/local/bin/perl
#シンボリックリンクを作成
whereis perl
perl: /usr/bin/perl /usr/local/bin/perl #←このように表示されればOK

3.PHPを使えるようにする

LAMPサーバーセットアップ時に自動的に使えるようになっています。
有効になっていない場合は下記コマンドを実行して下さい。

sudo a2enmod php5

※PHPの設定につきましてはPHPの設定ページにて説明します。

4.BasicおよびDigest認証を使えるようにする

共にアクセス制限を行えるようになりますが、Basic認証はユーザー情報が平文で流れるのに対し、Digest認証はMD5による暗号化およびチャレンジ・レスポンス型の認証を行いますのでより安全になります(但し古いWebブラウザには対応していません)

sudo a2enmod auth_basic auth_digest

それぞれの.htaccessの書式は以下の通りです。
※.htaccessは、そのファイルを置いたディレクトリ配下に対して有効になります。

▼Basic認証

AuthUserFile /home/hogehoge/.htpasswd
AuthGroupFile /dev/null
AuthName "xxxxxxxxxx"
AuthType Basic
require valid-user

1行目:パスワードファイルの場所をルートからの絶対パスで指定します。
パスワードファイルはWebからアクセス出来ない場所に置きましょう。

2行目:グループに対するアクセスは許可しないようにします。

3行目:確認ダイアログに表示する文字列を入力します。日本語だと文字化けする可能性があるので半角英数字が無難です。

4行目:認証形式を指定します。

5行目:パスワードファイルに登録したすべてのユーザーにアクセスを許可します。

次にパスワードファイルを作成します。サーバー上で作成するのと、外部サービスで作成する方法がありますが、ここではサーバー上で作成します。

sudo htpasswd -c /home/hogehoge/.htpasswd 認証ユーザー名
~パスワードを確認も含めて2回入力します~
※次回以降は、-c無しで実行します(-cをつけたまま実行するとそれまでのパスワードファイルが消去されるので注意)
sudo htpasswd /home/hogehoge/.htpasswd 追加ユーザー名
~パスワードを確認も含めて2回入力します~

▼Digest認証

AuthUserFile /home/hogehoge/.htdigest
AuthName "xxxxxxxxxxx"
AuthType Digest
require valid-user
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

1行目:パスワードファイルの場所をルートからの絶対パスで指定します。
Basic認証の時と同じく、パスワードファイルはWebからアクセス出来ない場所に置きましょう。

2行目:realmの設定を行います。後述するパスワードファイルを作成する際に必要になります。必ず半角英数字で入力して下さい。

3 行目:認証形式を指定します。

4行目:パスワードファイルに登録したすべてのユーザーにアクセスを許可します。

5行目:IE用の記述です。これが無いとIEで上手く動作しないことがあるようです。

次にパスワードファイルを作成します。Digest認証の場合はサーバー上にてファイルを作成します。

sudo htdigest -c /home/hogehoge/.htdigest "xxxxxxxxxx" 認証ユーザー名
~パスワードを確認も含めて2回入力します~
※"xxxxxxxxxx"のxxxxxxxxxxには、.htaccessファイルのAuthNameとしてつけたrealmを正確に入力します。
※次回以降は、-c無しで実行します(-cをつけたまま実行するとそれまでのパスワードファイルが消去されるので注意)
sudo htdigest /home/hogehoge/.htdigest "xxxxxxxxxx"追加ユーザー名
~パスワードを確認 も含めて2回入力します~

※.htaccessや.htpasswd、.htdigestファイルは外部から直接アクセス出来無いよう、Apacheのデフォルト設定(apache2.confのFilesタグ)で対策が施されています。

5.SSLを使えるようにする

sudo a2enmod ssl

※Apacheに専用のディレクティブ設定ファイルを作成する必要があります。詳しくはSSLの導入ページにて説明します。

6.mod_rewriteを使えるようにする

当ブログのパーマネントリンク設定などに使っています。

sudo a2enmod rewrite

7.mod_deflateを無効にする

当サーバーはスペック的に厳しいと思ったので無効にしました。

sudo  a2dismod deflate

Apacheの再起動及び設定の再読み込み

ここまで設定を行ったら、最後にApacheを再起動します。
モジュール関連を変更した場合は再起動して下さい。

sudo /etc/init.d/apache2 restart

設定ファイルのみを再読込させる場合はforce-reloadでOKです。

sudo /etc/init.d/apache2 force-reload

Webサイトへアクセスしてみる

/home/demo/ディレクトリにindex.htmlを作成します。
その後、以下のURLにてアクセスしてみて下さい。

sudo cp /var/www/index.html /home/demo/
sudo chown ユーザー名:ユーザー名 /home/demo/index.html
#Webブラウザにてアクセスします。
http://サーバーのプライベートIPアドレス/

太文字で「It works!」と表示されればOKです。

参考サイト様

トラックバックURL

コメント / トラックバック4件

  1. […] AWStats用の設定を行います。 Apacheの設定にて作成した設定ファイルを編集します。 […]

  2. […] Apacheの設定Skygardenhttp://skygarden.pgw.jp/wordpress/home-published-server/setting-of-apache […]

コメントをどうぞ

宜しければコメントをどうぞ