してみるテストロゴ
Apache 2.4系でHTTP/2サーバを構築してみるテスト。

mod_rewriteの設定例

HTTP/2やLet's Encryptを使っていると、mod_rewiteで設定すると便利になる場面がたくさんあります。

そこで、mod_rewriteの設定例を紹介していきたいと思います。

ここでの説明は、当サイトで説明したインストールするものLet's Encrypt(無償の証明書発行機関)から取得HTTP/2の各種設定といった設定例をベースにしています。

mode_rewriteの有効化

ご存じとは思いますが、念のためmod_rewriteを有効にする方法を説明します。

# vi /usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
…(省略)…
LoadModule rewrite_module modules/mod_rewrite.so ←コメント解除
…(省略)…

つづいて、以下の設定を入れます。

リクエストメソッドの制限

先日のCVE-2017-9798では、OPTIONSリクエストメソッドに関する脆弱性が発見されました。

普段から、使わないリクエストメソッドを制限しておくと、このような脆弱性を防ぐことができます。

以下の例では、GETメソッド、POSTメソッド、HEADメソッド以外はエラーとします。

# vi /usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/extra/httpd-vhosts.conf
…(省略)…
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
RewriteRule .* - [F] </IfModule>
…(省略)…

apachctl -tで、設定ファイルの間違いが無いことを確認の上、下記のように

# /usr/local/apache2/bin/apachctl -t
Syntax OK
# /usr/local/apache2/bin/apachctl stop
# /usr/local/apache2/bin/apachctl start

再起動します。これで、GET/POST/HEAD以外のメソッドはエラーとなります。

Let's Encryptの認証用ディレクトリのみHTTPSにリダイレクトさせない。

Let's Encryptのサーバはドメイン認証の際に、HTTP/1.1⇒HTTPSのリダイレクトを経て、HTTPS側の

/.well-known/acme-challenge/

にある認証用のファイルをとってきてくれます。

そのため非暗号のHTTPに来たリクエストは、丸ごと、HTTPSに転送するようにmod_rewriteを設定してもいいのですが、HTTPSに認証用のフォルダを作成したくない時もあります。

そこで、ACME認証のみHTTPで処理し、それ以外をHTTPSに転送する設定を紹介します。

# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
/usr/local/apache2/conf/extra/httpd-vhosts.conf
…(省略)…
<VirtualHost *:80>
…(省略)…
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
…(省略)… </VirtualHost> …(省略)…

apachctl -tで、設定ファイルの間違いが無いことを確認の上、下記のように

# /usr/local/apache2/bin/apachctl -t
Syntax OK
# /usr/local/apache2/bin/apachctl stop
# /usr/local/apache2/bin/apachctl start

再起動します。これで、「ACMEプロトコルにおけるドメイン認証」、以外のリクエストは、80番ポートから443番ポートに飛びます。

NEXT >> http/2のチューニング

©Copyrights 2015-2018, non-standard programmer

このサイトは、あくまでも私の個人的体験を、綴ったものです。 軽く参考程度にご利用ください。