計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)

Solaris 8 上で Apache 2.2 の応答を UTF-8 に変換する中継サーバを構築する


必要なもの
  Delegate
    中継サーバ[リバースプロキシサーバ](ここではバージョン9.9.7を利用)
    http://www.delegate.org/delegate/
  Apache
    モジュールの動的リンクが可能なように構築された, すでに稼働中の apache
  mod_extract_forwarded
    中継サーバが付加したアクセス元のIPアドレスを要求元としてapacheに渡すapacheモジュール(ここではバージョン0.6を利用)
    これを利用しないとアクセス制御ができない.
    http://www.openinfo.co.uk/apache/index.html

Delegateの構築

  src/Makefile の ADMIN を設定
  gmake CC=gcc を実行 (Forte6 の cc は不可)
  src/delegated を適当なディレクトリにインストール
  下記の起動スクリプトを作成し /etc/rc3.d/S99codeconv などとする
    ここでは delegated は /usr/local/sbin にインストールしてある
    delegated は 10080 番ポートを開いた apache サーバにクライアントからのリクエストを中継するものとする (MOUNT)
    POST で Apache が受け取る漢字コードは Solaris8 標準の EUC-JP にしておく (CHARCODE)

#!/bin/sh
#
# Code conversion / Delegate
#

DELEGATED='/usr/local/sbin/delegated'

case "$1" in

'start')
        exec $DELEGATED -P80 \
          SERVER=http \
          MOUNT="/* http://<Apacheサーバのホスト名>:10080/*" \
          URICONV=where:any \
          PERMIT="http:<Apacheサーバのホスト名>:*" \
          RELAY=proxy \
          HTTPCONF="add-qhead:X-Forwarded-For:%a" \
          HTTPCONF=post-ccx-type:+,multipart/form-data \
          CHARCODE=UTF-8 CHARCODE=EUC-JP:tosv:http
        ;;

'stop')
        exec $DELEGATED -P80 -Fkill
        ;;

'restart')
        exec $DELEGATED -P80 -Fkill-HUP
        ;;

*)
        echo "Usage: $0 { start | stop | restart }"
        exit 1
        ;;

esac
exit 0


mod_extract_forwardedのインストール

  Apache 2.2 で利用するためのソースの修正
    http://d.hatena.ne.jp/dayflower/20060603/1149314379 による下記のパッチを mod_extract_forwarded.c にあてる.
  
--- mod_extract_forwarded.c.orig	2004-03-09 00:27:36.000000000 +0900
+++ mod_extract_forwarded.c	2007-04-18 10:27:08.945045803 +0900
@@ -758,7 +758,7 @@
     {
         if (conf->debug == MEF_DEBUG_ON) 
         {
-            fprintf(stderr,"MEF: phase:%s, $s not acceptabler proxy, %s\n", 
+            fprintf(stderr,"MEF: phase:%s, %s not acceptabler proxy, %s\n", 
                     phase, conn->remote_ip, r->unparsed_uri);
             fflush(stderr);
         }
@@ -925,6 +925,9 @@
  * spoof one) is added to the X-Forwarded-For header.
  */
 static int mef_before_proxy_http(request_rec *r, 
+#if AP_SERVER_MINORVERSION_NUMBER >= 2
+                                 proxy_worker *worker,
+#endif
                                  proxy_server_conf *pconf,
                                  char *url, const char *proxyname, 
                                  apr_port_t proxyport)

  コンパイル&インストール

    apxs -i -c -a mod_extract_forwarded.c

  設定
    下記の内容の <Apache Root>/conf/extra/httpd-extract-forwarded.conf を作成

MEForder refuse,accept
MEFrefuse all
MEFaccept [Apacheの稼働するサーバのIPアドレス]

    httpd.conf に下記のエントリを追加

Include conf/extra/httpd-extract-forwarded.conf

    httpd.conf にて delegated から中継されたパケットを受け取るポートを通常の80から変更
      ここでは delegated の設定に合わせて 10080 とする

Listen 10080


Delegate の起動と Apache の再起動

  /etc/rc3.d/S99codeconv start
  apachectl -k restart


計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)
海洋大循環分野
daigo@ocg.aori.u-tokyo.ac.jp