Apacheのhttpd.confの設定について

この内容に関しては、基本的な項目および設定方法のみ記載してあります。
利用目的に合わせて設定項目および設定方法を取捨選択する必要があります。

Apacheの設定ファイル「httpd.conf」は、「/etc/httpd/conf」にあります。
また、httpd.confにインクルードされているファイル群が「/etc/httpd/conf.d」にあります。
このディレクトリに「xxx.conf」というように、拡張子に「.conf」が付いたファイルを入れておけば、そのファイルの内容もhttpd.confに読み込まれます。

Section 1: Global Environment

■ ServerTokens
クライアントに返信するレスポンスヘッダの情報。
デフォルトでは、「OS」となっているので、サーバのOSが分かってしまう。
そこで、これを「ProductOnly」もしくは「Prod」とする。
ServerTokens Prod

■ ExtendedStatus
各リクエストに対する拡張ステータス情報の保存。
デフォルトでは、「Off」となっているので、このまま。
#ExtendesStatus On

Section 2: 'Main' server configuration

■ ServerName
WEBサーバのドメイン名(FQDN)。
RapidSiteでは、ドメイン名がxxxxx.jpの場合、wwwが付かないxxxxx.jpのままがServerNameのひな形となっています。
#ServerName xxxxx.jp
ここで、行頭の「#」を削除して、www.を追加します。
ServerName www.xxxxx.jp
※この設定は利用ドメインに応じて、任意に設定して下さい。

■ UseCanonicalName
自己参照URLの作成。
この設定を「On」にすると、「ServerName」、「Port」で設定されている名前を使って、URLの正式名称を生成します。
一方、「Off」の場合には、アクセスされたURLのままで処理を行います。
デフォルトでは「Off」です。これは、このままで構いません。
UseCanonicalName Off

■ DocumentRoot
公開ルートディレクトリ。
このディレクトリ名は利用状況に合わせて、任意に変更して下さい。
DocumentRoot "/var/www/html"

■ <Directory "/var/www/html">
DocumentRootで指定したディレクトリの設定。
もし「DocumentRoot」でディレクトリ名も変更したら、このディレクトリ名も同様に変更して下さい。
デフォルトでは、
<Directory "/var/www/html">
  Options Indexes FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>
のようになっています。
ここで、「Options」の設定に「Indexes」が入っていて、セキュリティ的に問題があるのでこの指定を削除します。
<Directory "/var/www/html">
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
※ラピッドサイトの最新のVPSシリーズは、最初から上記の設定になっているようです。

■ ErrorLog
エラーが発生した場合のログのファイル名の指定。
ErrorLog logs/error_log

■ LogFormat
ログを出力する形式の指定。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

新規に自分で追加することもできます。
(例:Urchinアクセス解析用にCookie情報を追加する場合)
LogFormat "%h %v %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" addcookie

■ CustomLog
ログのファイル名および出力形式の指定。
出力形式は、「LogFormat」で指定した形式名を指定します。
CustomLog logs/access_log combined

(例:画像ファイルを記録させない場合)
SetEnvIf Request_URI "\.(gif|jpg|png|ico)$" image-object
CustomLog logs/access_log combined env=!image-object

■ ServerSignature
サーバが生成するドキュメントに付与するフッタ情報の設定。
デフォルトでは、「On」となっているので、セキュリティ上問題があります。
そこで、「Off」に設定します。
ServerSignature Off

■ DefaultLanguage
htmlファイルに言語設定が付いていない場合のデフォルトの言語設定。
デフォルトでは、
#DefaultLanguage nl
となっていて、コメントアウトされています。
コメント記号「#」を削除して、「ja」とします。
DefaultLanguage ja

Section 3: Virtual Hosts

■ TRACE、OPTIONSメソッドの制限
HTTPのリクエストメソッドの「TRACE」が許可されていると、クロスサイトトレーシング攻撃などの脆弱性となるので、これを制限する必要があります。
VPS-0xシリーズは、デフォルトでTRACEメソッドのリクエストの制限が設定されています。
  RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
  RewriteRule .* - [F]
ただし、以前にセキュリティ監査会社より、「OPTIONS」メソッドも無効化するように言われましたので、これを付け加えます。
OPTIONSメソッドは、サーバで許可されているHTTPメソッドを調べるものです。
  RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
  RewriteRule .* -[F]

■ テンポラリドメイン名のアクセス制限
RapidSiteのVPSでは、テンポラリドメイン名でのアクセスができます。
テンポラリドメイン名とは、VPSの各仮想サーバに割り振られているマシン名のことで、例えば、「xxx.tempdomainname.com」といった全く脈絡のない名前です。
ただし、http://xxx.tempdomainname.comのようにアドレスを入力すると、実際にアクセスできてしまいます。
この名前を有効にしていると、Googleなど検索エンジンにも、このドメインでリスト化される場合があり、あまり好ましくありません。
そこで、テンポラリドメイン名でアクセスしてきた場合には、本当のドメイン名へリダイレクトさせます。
  RewriteCond %{HTTP_HOST} ^(xxx\.tempdomainname\.com)(:80)?
  RewriteRule ^/(.*)$ http://www.xxxxx.jp/$1 [R=301,L]
また同様に、SSLでのアクセスの場合でも
  RewriteCond %{HTTP_HOST} ^(xxx\.tempdomainname\.com)(:443)?
  RewriteRule ^/(.*)$ https://www.xxxxx.jp/$1 [R=301,L]
というようにします。
※最新のVPSシリーズでは、テンポラリドメイン名が無い場合があります。その場合には、上記設定は不要です。

それから、RapidSiteでサーバをホスティングするのと同時にドメインを取得すると、
  • xxxxx.jp
  • www.xxxxx.jp
のように、wwwの有り、無し両方でアクセスできてしまって、これも検索エンジン上で、両方のドメインがリスト化されるケースもあります。
そこで、www有りのドメインのみを有効にさせる場合は、以下のように追加します。
  RewriteCond %{HTTP_HOST} ^(xxx\.tempdomainname\.com)(:80)? [OR]
  RewriteCond %{HTTP_HOST} ^(xxxxx\.jp)(:80)?
  RewriteRule ^/(.*)$ http://www.xxxxx.jp/$1 [R=301,L]
これだと、テンポラリドメイン名およびwww無しでアクセスしてきた場合には、www.xxxxx.jpにリダイレクトすることができます。

なお、参考までに、上記の記述をまとめたVirtual Hosts設定を記載しておきます。
# default virtual hosts
<VirtualHost xxx.xx.xxx.xx:80>
    SSLEngine off
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteOptions inherit
        RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
        RewriteRule .* - [F]
        RewriteCond %{HTTP_HOST} ^(xxx\.tempdomainname\.com)(:80)? [OR]
        RewriteCond %{HTTP_HOST} ^(xxxxx\.jp)(:80)?
        RewriteRule ^/(.*)$ http://www.xxxxx.jp/$1 [R=301,L]
    </IfModule>
</VirtualHost>
 
<VirtualHost xxx.xx.xxx.xx:443>
    SSLEngine on
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteOptions inherit
        RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
        RewriteRule .* - [F]
        RewriteCond %{HTTP_HOST} ^(xxx\.tempdomainname\.com)(:443)? [OR]
        RewriteCond %{HTTP_HOST} ^(xxxxx\.jp)(:443)?
        RewriteRule ^/(.*)$ https://www.xxxxx.jp/$1 [R=301,L]
    </IfModule>
</VirtualHost>

httpd.confの設定が完了したら、エラーがないかどうかチェックします。
# /usr/sbin/apachectl configtest

ここで「Syntax OK」と表示されたら、OKです。
一方、「Syntax error」と表示されたら、該当の行番号の箇所にエラーがありますので、修正して下さい。

設定に問題がなかったら、Apacheのサービスを再起動します。
RapidSiteでは、専用のコマンドが用意されています。
# restart_apache


最終更新:2014年05月21日 18:09