さくらのレンタルサーバの .htaccess に RewriteRule を書いてリバースプロキシする


概要

  • さくらのレンタルサーバの .htaccess に RewriteRule ディレクティブを記述してリバースプロキシする
  • 今回の環境: さくらのレンタルサーバ スタンダードプラン
  • 2019年12月18日時点の動作確認結果
  • https のサーバにリバースプロキシすると Internal Server Error になってしまう問題がある

http://example.sakura.ne.jp/ から http://www.example.com/ にリバースプロキシする例

~/www/.htaccess に書く例。

# http://example.sakura.ne.jp/ にアクセスする際に
# http://www.example.com/index.html にリクエストを投げてしまうため
# disabled で無効にする
DirectoryIndex disabled

# URL書き換え機能を有効にする
RewriteEngine On

# リバースプロキシ先のURLに書き換える正規表現
RewriteRule (.*) http://www.example.com/$1 [P,L,QSA]

# バックエンドのサーバが Host ヘッダを必要とする場合は設定する
RequestHeader set Host www.example.com

http://example.sakura.ne.jp/foo/bar/ から http://www.example.com/foo/bar/ にリバースプロキシする例

~/www/.htaccess に書く場合

# URL書き換え機能を有効にする
RewriteEngine On

# リバースプロキシ先のURLに書き換える正規表現
RewriteRule ^foo/bar/(.*) http://www.example.com/foo/bar/$1 [P,L,QSA]

# バックエンドのサーバが Host ヘッダを必要とする場合は設定する
RequestHeader set Host www.example.com

~/www/foo/.htaccess に書く場合

# URL書き換え機能を有効にする
RewriteEngine On

# リバースプロキシ先のURLに書き換える正規表現
RewriteRule ^bar/(.*) http://www.example.com/foo/bar/$1 [P,L,QSA]

# バックエンドのサーバが Host ヘッダを必要とする場合は設定する
RequestHeader set Host www.example.com

https のサーバにリバースプロキシすると Internal Server Error になってしまう問題

いくつかのパターンで試してエラーログを見たところ、どうやら https にはリバースプロキシできないようだ。

AH01961: SSL Proxy requested for example.sakura.ne.jp:80 but not enabled [Hint: SSLProxyEngine]
AH00961: HTTPS: failed to enable ssl support for xxx.xxx.xxx.xxx:443 (www.example.com)
SSLProxyEngine not allowed here
ProxyRequests not allowed here

SSLProxyEngine ディレクティブは .htaccess では使えないものなので SSLProxyEngine を On にすることもできない。

mod_ssl - Apache HTTP Server Version 2.4

Context: server config, virtual host, proxy section

参考資料