LoginSignup
7

More than 5 years have passed since last update.

posted at

updated at

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

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>

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
What you can do with signing up
7