2009-07-10 13 views
3

ApacheのDjango FastCgiの設定からlighttpdの設定に移行中です。lighttpd mod_rewriteとApache mod_rewriteとDjangoとFastCGIを使用する

Apacheでは、私はDjangoのドキュメントで説明されているfcgi設定を使用していました。コア部分は/mysite.fcgi/$1するために、すべての私の非静的URLを書き換えている:

RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L] 

、その後、FastCGIのため/mysite.fcgiに対するすべての要求を転送:

<IfModule mod_fastcgi.c> 
    FastCGIExternalServer /opt/www/mysite.fcgi -host 127.0.0.1:8000 
</IfModule> 

セットアップが働いていましたDjangoのために。たとえば、http://www.mydomain.com/help/に行って、{{ request.get_full_path }}をテンプレートに印刷すると、結果は/help/となりました。人生は良かったし、私は幸せだった。しかし、私はいくつかの問題に遭遇し、Apacheよりも多くの同時接続をサポートするWebサーバーに移動させてしまいました。

lighttpdへの早送り。すべてが設定されています。私はmod_rewriteをして私のURLを書き換えています:

url.rewriteワンス=( "^(/メディア/ )$" => "$ 1"、 "^/favicon.icoをします$" =>「/ MED/IMG /ファビコン/ favicon.icoを」、 "^(/。)$" => "/mysite.fcgi$1"、 )

およびFastCGIが取り扱いしている/mysite.fcgi:

fastcgi.server = (
     "/mysite.fcgi" => (
      "main" => (
       "host" => "127.0.0.1", 
       "port" => 8000, 
       "check-local" => "disable", 
      ) 
     ), 
    ) 

一般的には動作し、私のDjangoサイトはうまく動作します。しかし、http://www.mydomain.com/help/に行って、テンプレートに{{ request.get_full_path }}を印刷すると、結果は/mysite.fcgi/help/になります。これはいくつかの問題を引き起こします。

これはDjangoサイトがうまく動作するため、一般的に問題はありませんが、SSLを使用すると問題が発生します。具体的には、http://www.djangosnippets.org/snippets/240/の "Stephen Zabel - [email protected]"のsslmiddlewareを使用しています。このソフトウェアは、request.get_full_pathに依存しています。これは、lighttpdでApacheとは異なる値を返します。 request.pathと同じです。

誰もこの問題を解決する方法を提案できますか?理想的には、lighttpd mod_rewriteがApacheのmod_rewriteと同じ動作をするようにしたいと思います。可能でない場合は、私が使用しているsslmiddlewareパッケージと互換性のあるlighttpd FastCGI Djangoセットアップが必要です。代わりに、lighttpdのmod_rewriteがURLを書き換える方法と互換性があるようにsslmiddlewareパッケージを変更することもできます。

この回答は素晴らしい30歳の誕生日プレゼントになります!

+0

トランクのDjangoや安定版を使用していますか?私はほとんど同じlighttpd設定を持っていて、 "request.get_full_path"はあなたが望むように動作します。 – Glader

答えて

3

settings.pyに ""のFORCE_SCRIPT_NAMEを定義してから、fastcgiサーバーを再起動しましたか?

FORCE_SCRIPT_NAME="" 
+1

また、URL confを設定する前に、FORCE_SCRIPT_NAMEがsettings.pyで定義されていることを確認してください。 – shreddd

1

lighttpdで修正する場合はhttp://redmine.lighttpd.net/issues/show/729を参照してください。

つまり、1.4.23にアップグレードし、 "fix-root-scriptname" => "enable"をfcgi configに追加します。