9

Django の標準 WSGIHandler を使用して Apache の下の mod_wsgi にデプロイされた私の Django アプリは、Django 側でフォーム ログインを介してユーザーを認証します。したがって、Apache にとって、ユーザーは匿名です。これにより、Apache アクセス ログの有用性が低下します。

リクエストを処理した後、ユーザー名を WSGI ラッパー経由で Apache に戻して、Apache アクセス ログに表示する方法はありますか?

(バージョン: Django 1.1.1、mod_wsgi 2.5、Apache 2.2.9)

4

5 に答える 5

4

組み込みモードを使用している場合、および元の Apache 要求オブジェクトの Python バインディングを提供する apswigpy と呼ばれる別のパッケージを使用している場合にのみ、これを行うことができます。mod_wsgi パッケージは、元の Apache 要求オブジェクトを WSGI 環境で Python CObject 参照として渡すことを可能にするオプションのメカニズムを提供します。次のような apswigpy と組み合わせて使用​​します。

from apache.httpd import request_rec
r = request_rec(environ['apache.request_rec'])
r.user = user

少なくとも、アクセスログが使用できる適切な情報がセットアップされると思います。

この議論は mod_wsgi メーリング リストに持ち込むべきです。

于 2010-02-11T22:21:04.213 に答える
3

mod_auth_tktを使用できます。Anauth_tktは、Apache が理解できるユーザー ID を持つ署名付き Cookie です。ユーザーがログインおよびログアウトするときに、Web アプリケーションで Cookie を設定する必要があります。Apache はREMOTE_USERCookie から を取得し、それを Web アプリまたは同じサーバー上で実行されている Django 以外の Web アプリケーションに渡したり、ログに含めたりすることができます。

于 2010-02-11T22:30:16.243 に答える
1

これはおそらくあなたが期待しているものではありませんが、URL スキームでユーザー名を使用できます。そうすれば、ユーザーは apache ログのパス セクションに表示されます。

認証が必要な応答が apache ログで明確になるように、認証を変更する必要があります。そうしないと、ログを表示するときに、認証されていない要求が認証されたユーザーに起因する可能性があります。たとえば、リクエストが認証されない場合、ログイン ページへの一時的なリダイレクトを返します。

于 2010-02-11T12:17:06.573 に答える