LoginSignup
8
7

More than 5 years have passed since last update.

WordPressなどにリバースプロキシする際にバックエンドのホスト名でURL生成されるのを防ぐ

Last updated at Posted at 2016-03-30

wordpressなど、バックエンド側でサーバ変数のHTTP_HOSTを使用してURLを生成しているスクリプトがある場合、リバースプロキシの設定のProxyPreserveHostをOnにすることで、バックエンドのホスト名でURLが生成されるのを防ぐことができます。

ProxyPreserveHostは、バックエンドへのプロキシの要求に、クライアントがリクエストしたホスト名を伝播します。
http://httpd.apache.org/docs/2.4/ja/mod/mod_proxy.html#proxypreservehost

バックエンドで動作しているPHPなどのスクリプトは、URLを組み立てる際$_SERVER['HTTP_HOST']を使用します。

HTTP_HOSTには、[現在のリクエストに Host: ヘッダが もしあればその内容]が入っているので、バックエンドのスクリプトは、クライアントがリクエストしたホスト名(public.co.jp)からURLを組み立てます。
http://php.net/manual/ja/reserved.variables.server.php

ただし、この方法は、バックエンドのサーバが別の用途でも使用されている場合は、注意が必要です。
特に、HTTP_HOSTを単に自ホスト名として利用しているスクリプトがある場合は、プロキシすることで、意図しないURLを生成したりするかもしれません。

<VirtualHost public.co.jp:80>

    ServerName public.co.jp
    DocumentRoot /var/www/html
    ErrorLog /var/log/httpd/error_log
    CustomLog /var/log/httpd/access_log combined

    # Reverse Proxy settings.
    # Cookie's proxy settings.
    ProxyPassReverseCookieDomain public.co.jp backend.co.jp
    ProxyPassReverseCookiePath / /

    # プロキシリクエストに、受け付けた Host HTTP ヘッダを使う.
    # Using accepted Host HTTP header at proxy request.
    # @see http://httpd.apache.org/docs/2.4/ja/mod/mod_proxy.html#proxypreservehost
    ProxyPreserveHost On

    #wordpress
    ProxyPass /wp/ http://backend.co.jp/wp/
    ProxyPassReverse /wp/ http://backend.co.jp/wp/

</VirtualHost>
8
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7