Personal tools
You are here: Home Wiki ApacheConf2

ApacheConf2

Document Actions
last edited 5 years ago by jack

VHMの仕様が変更されました

Zope 2.7.5以降のどこかで Virtual Host Monster の仕様が変わりました。mod_proxy の場合はかわりませんが、FastCGIの場合には

 宣言ZMIでのpath宣言 
RewriteRule? ^/(.*) /VirtualHostBase/example_folder/VirtualHostRoot/$1
で、大丈夫です。

前の仕様が中途半端だったか、中途半端なものを敢えて通すような仕様だったかなんだと思います。こっちのほうが断然わかりやすいですね。

Zope 2.6, 2.7 と Apache 2.0 に関するまとめです

順番に記述します。

  • Zope も Web Server なのに、なぜ、別に Apache を使うのですか

    使わなくてよいなら使わないほうがよいと私は思います。しかし、フロントに Apache を置くことでいろいろな利点があると考えます。

    1. 対攻撃性

      一般的に、Apache のセキュリティパッチは Zope より出てくるのが速いような気がします。ヘッダをみて Apache に見えることに利点があると思います(FastCGI 方式のときのみ)

    2. キャッシング

      特に Plone を使っているとき、「遅い」と感じることは多いと思います。これは img tag の問題で、ブラウザがふらふらと再構成をやりまくるせいもあります。image/* を Apache がキャッシュしてくれると、この問題はかなり解消されます。

      Zope にもキャッシュの仕組みはありますが、単純なキャッシュであれば、Apache にやってもらったほうが速いでしょう。

    3. 柔軟性

      Zope は、前バージョンを捨てさることに、非常に思い切りがよいです(^^;; このような場合、サイトを並行稼働させて、あるとき切りかえる、けど、URL は一切変更せず、DNS のタイムアウト問題も起こしたくない、というような移行作業が必要になるでしょう。

      これは Zope を素で立てていると、結構たいへんそうに思えます(できるとは思いますが)。特に Zope 2.6/2.7 では設定ファイルの形式もかわったし、混乱しそう(少なくとも私は)です。

      Apache の httpd.conf で切り替えるようにすれば、テストもそこそこできますし、ダウンタイムも少なくてすみます。もちろん、Zope にそのときログインしているユーザのセッションは失われます。ただ、ユーザ側に協力を依頼できるのであれば、混乱を最小限にすることは可能でしょう。

  • どうやればできるのですか?また、どういう方式があるのですか?

    ここでは Zope 2.6.3, Zope 2.7.0 と Apache 2.0.4x での実績から記述しています。

    • Virtual Host Monster の理解

      まずは、VHM の書式を理解しましょう。これがあれば SiteRoot が不要です。

      飛び先宣言httpVirtualHostZMIでのpath宣言URI(/ の直下に見せるなら不要)
      http://localhost:8080/VirtualHostBase/http/www.example.com:80/example_folder/VirtualHostRoot/_vh_main/

      飛び先については、FastCGIのときは / から始めればよいです(http: は不要)。

      また、最後の _vh_は http://localhost:8080/member/ = http://member.example.com/ = http://www.example.com/member/ のようにする場合の、最後のときに使います。並列して存在するフォルダのうちのいくつかだけを見せたいときにも有効でしょう。

    • Proxy 方式

      Proxy 方式は Apache の mod_proxy と、必要であれば mod_rewrite を使う方式です。mod_rewrite の中で P オプションを使っていれば、Proxy 方式 となり、使っていなければ別の方式となります。

      この方式のメリットはわかりやすいことです。また、いろいろなモジュールの追加が不要なのもメリットでしょう(mod_cache群がインストールされている場合(RH9 はだめです。Fedora1は ok です))。

      デメリットは、上で記述した「ヘッダを見てApacheに見える」という利点がないことです。

    • Proxy 方式の実現方法

      ProxyPass を利用する方法と、RewriteRule を利用する方法がありますが、基本的に動作にはかわりがないように見えました。

      • ProxyPass

        mod_proxy が load されていれば VirtualHost 宣言内で

           ProxyPass / http://localhost:8080/VirtualHostBase/http/www.example.com:80/example/VirtualHostRoot/
           ProxyPassReverse / http://localhost:8080/VirtualHostBase/http/www.example.com:80/example/VirtualHostRoot/
           

        を記述すればOkです。

      • RewriteRule

        mod_proxy および mod_rewrite が必要です。 VirtualHost 宣言内で

           RewriteEngine On
           RewriteCond %{REQUEST_URI} !=^/example/
           RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/www.example.com:80/example/VirtualHostRoot/$1 [L, P]
           

        で、動きそうですが、このような場合にはむしろ FastCGIにこそ RewriteRule が向いているような気もしました

    • Gateway 方式

      FastCGI に代表される、Apache を Gateway として使用する方式は、バックエンドの隠蔽性に優れるのが特徴です。mod_proxy でも、Apache 側でいろいろと処理をする機能は付いておりますが、基本的に、Proxy は代理応答なのに対し、Gateway 方式はApache が応答し、その処理の一部(この場合ほとんど全部の内部処理ですが)をバックエンドに投げるという方式になります。

      デメリットは追加インストールが必要になる場合がほとんどである、ということです。また、独自方式*でない*場合には、オーバーヘッドが問題になることがありますが、FastCGI のように mod_xxx で plug-in してしまうようなものの場合その心配はあまり必要ないです。

    • Gateway方式 -- FastCGIの実現方法

      Gateway 方式には、FastCGI 以外にも、PCGI などや、Apache 以外では Zeus Distributed Authentication and Contents (マイナーな・・・)などがありますが、実績や、現状でのメンテナンスのされかたなどを考えると、FastCGI をプライマリの選択肢とすることに問題があるとは思えません。というか、他にあまりないというか・・・

      まずは FastCGI をみて、インストールします。Zope 側での設定は FastCGI 用のポートを開くこととなります。Zope 2.6 の設定は、そちらに書いてあります。

      Zope 2.7 では instance/etc/zope.conf から

        <fast-cgi>
         # valid key is "address"; the address may be hostname:port, port,
         # or a path for a Unix-domain socket
         address 8180
        </fast-cgi>
        
      のようなところを探してコメントアウトしてください。

      Apache のVirtualHost 宣言内には以下のようなディレクティブを書きます

        DocumentRoot /tmp/nofile
        RewriteEngine On
        RewriteRule ^/(.*) /VirtualHostBase/http/example.com:80/example/VirtualHostRoot//$1 [L]
        # RewriteRule ^/(.*) /VirtualHostBase/http/example.com:80/example/VirtualHostRoot/_vh_example/$1 [L]
        <Location />
          SetHandler fastcgi-script
        </Location>
        
      それと、VirtualHost 宣言の外に
        FastCgiExternalServer /tmp/nofile \
              -host localhost:8180 \
              -idle-timeout 90 \         # 追加しました。      
              -pass-header Authorization # これ、重要です。ないと Zope で auth できない
        

      と、書きます。/tmp/nofile は存在しなくてもかまいません(warning が出ますけど)。

      この書き方の場合、mod_rewrite, mod_fastcgi の両方が必要です。

  • Cache はどうやるのですか

    上記の二つについて、一つ誤解があるとすれば、FastCGI ではキャッシュが効かないのではないか、と思われていることでしょう。結論からいえば効きます。

    Apache 2.0 は 1.3 と違い、proxy と cache が分離されているため、cache だけを使うことができるからです。Web 上の情報では 1.3 の情報もまだまだ多いため、このような誤解がある可能性が高いと考えております。

    Cache を実現するには mod_cache 群が必要です。LoadModule cache_module modules/mod_cache.so がうまくいけば入ってます。そうでなければ、コンパイルや、どこかからもってくることが必要です。

    RedHat 9.0 では rpm で Apache 2.0.40 が入っていましたが、これに簡単に mod_cache を入れる方法は、どうもあまりないようです。少なくともソースツリーからコンパイルしてしまったほうがラクでした。

    ソースからの場合には、詳しくは Apache のドキュメントを参照していただくとして、例えば

    ./configure --prefix=/path/to/apache --enable-mods-shared="all proxy cache disk_cache mem_cache"

    とすれば、proxy も含めて必要なモジュールができるようです。

    • httpd.conf の設定

      これも詳しくは Apache のドキュメントを見ていただくとして、コピペして必要そうなところを直すというのもアリでしょう。私も Apache のドキュメントなどからコピペしていますので(^^;;

        <IfModule mod_disk_cache.c>
        CacheRoot "/path/to/apache/cache"
        CacheSize 524288
        CacheEnable disk /
        CacheDirLevels 3
        CacheDirLength 3
        CacheGcInterval 2
        CacheMaxExpire 24
        CacheLastModifiedFactor 0.1
        CacheDefaultExpire 1
        CacheMinFileSize 1
        CacheMaxFileSize 524288
        ExpiresActive On
        ExpiresByType image/gif A86400
        ExpiresByType image/png A86400
        ExpiresByType image/jpeg A86400
        ExpiresByType text/css A86400
        ExpiresByType text/javascript A86400
        ExpiresByType application/x-javascript A86400
        </IfModule>

      <IfModule mod_mem_cache.c> CacheEnable mem / MCacheSize 65536 MCacheMaxObjectCount 1000 MCacheMinObjectSize 1 MCacheMaxObjectSize 65536 </IfModule>

    • mem or disk ?

      この設定では、mem_cache, disk_cache の 実行パスが重複してます。実際にはどちらかの LoadModule をコメントアウトすることで切りかえできます。

      また、VirtualHostごとにきりかえることもできますので、ここは ディスク、ここはメモリ、ここはなし、などということも可能です。

      この場合は IfModule 内 では Enable をせずに、VirtualHost 内で、どちらかを Enable します

      ただ、ディスクのほうがおもいっきり量的に使えるせいか?私の環境では体感できるほど速かったのが意外でした。
      # 直感的にはメモリのほうが速そうな気がしませんか?わたしだけ?

      単に、ブラウザの違いでした。とほほ・・・

  • mod_ssl を使いたいのですが make が通りません

    RedHat9 で、Apache 2.0.4x あたりをソースからコンパイルすると、そのままではエラーになります。これは kerberos の path が違うことが原因のようです。よって

    • export CPPFLAGS=-I/usr/kerberos/include

    と指定することにより、configure, make が通るようになります。

 
そちらのOSの時刻なので 正確性はあなた次第
 
こういう意味のないの好き
 
本をお勧め中
 
CDもお勧め中
のだめカンタービレ ベスト100
ドラマの演奏とは違います。でもこの感じでこの価格ならアリかと
 
消耗品や家電
 
よく使うサイト
社名ロゴ88×631
 
ぐぐってみる
 
誰が使うんだろう
 

Powered by Plone