ZopeとApacheの連携 [Plone3.3]

ここでは Apache でプロクシを行い、Apache 経由で Zope にアクセスする仕組みを構築する。

Web サイトのホスト : www.example.ac.jp
Plone のホスト : 192.168.2.2

Apacheの設定

モジュールの追加

mod_rewrite と mod_proxy が必要なので、読み込む設定を追加する。
/etc/httpd/conf/httpd.conf (抜粋)

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

rewriteの設定

http でのアクセスを Apache でプロクシする場合は /etc/httpd/conf/httpd.conf の適当な場所(VirtualHost ディレクティブ内等)に、Zope の VirtualHostMonster が理解できる形で記述する。(\\は1行で入力)

RewriteEngine On
RewriteRule ^/XXX[/]?(.*) http://192.168.2.2:8080/VirtualHostBase/     \\
             http/www.example.ac.jp:80/YYY/VirtualHostRoot/_vh_XXX/$1 [P]

この例は Plone サイトに直接アクセス(http://192.168.2.2:8080/YYY)するかわりに、Apache 経由(http://www.example.ac.jp/XXX)でアクセスできるように書き換えを行った例である。
同様に、https でのアクセスを Apache でプロクシする場合は /etc/httpd/conf.d/ssl.conf の適当な場所(VirtualHost ディレクティブ内等)に、設定を記述する。(\\は1行で入力)

RewriteEngine On
RewriteRule ^/XXX[/]?(.*) http://192.168.2.2:8080/VirtualHostBase/     \\
            https/www.example.ac.jp:443/YYY/VirtualHostRoot/_vh_XXX/$1 [P]

この例では、Plone サイトに直接アクセス(http://192.168.2.2:8080/YYY)するかわりに、Apache 経由(https://www.example.ac.jp/XXX)でアクセスできるように書き換えが行われる。ただし、Web サイトと Plone サイト間の通信は暗号されない。

さらにログイン時のみSSL接続とするには、最終的に次のように設定すれば良い。

  • http.conf
# ログインフォーム
RewriteRule ^/XXX/(.*)login_(.*) https://www.example.ac.jp/XXX/$1login_$2 [NE,L]
RewriteRule ^/XXX/(.*)require_login https://www.example.ac.jp/XXX/$1require_login$2 [NE,L]

# それ以外
RewriteRule ^/XXX[/]?(.*) http://192.168.2.2:8080/VirtualHostBase/      \\
    http/%{SERVER_NAME}:80/YYY/VirtualHostRoot/_vh_XXX/$1 [L,P]
  • ssl.conf
    下記の @@upload_file は collective.uploadify を用いる場合のみ必要。
# ログアウト時
RewriteRule ^/XXX/(.*)logged_out http://www.example.ac.jp/XXX/$1 [NE,L]

# ログインしていない かつ ログインフォームでない
RewriteCond %{HTTP_COOKIE} !__ac=
RewriteCond %{REQUEST_URI} !^/XXX/.*(login_|require_login|@@upload_file).*
RewriteRule ^/XXX[/]?(.*) http://www.example.ac.jp/XXX/$1 [NE,L]

# ログイン済み かつ ログインフォーム
RewriteCond %{HTTP_COOKIE} __ac=
RewriteCond %{QUERY_STRING} came_from=http%3A//www\.example\.ac\.jp[/]?(.*)
RewriteRule ^/XXX /XXX/%1?

# それ以外
RewriteRule ^/XXX[/]?(.*) http://192.168.2.2:8080/VirtualHostBase/     \\
    https/www.example.ac.jp:443/YYY/VirtualHostRoot/_vh_XXX/$1 [L,P]