Мое приложение Django, развернутое в mod_wsgi под Apache с помощью стандартного WSGIHandler Django, аутентифицирует пользователей через вход в систему формы на стороне Django. Таким образом к Apache, пользователь является анонимным. Это заставляет доступ Apache зарегистрироваться менее полезный.
Существует ли способ пасовать назад имя пользователя через обертку WSGI к Apache после обрабатывания запроса, так, чтобы это появилось в журнале доступа Apache?
(Версии: Django 1.1.1, mod_wsgi 2.5, Apache 2.2.9)
Вы можете сделать это только при использовании встроенного режима и только при использовании отдельного пакета под названием apswigpy, который обеспечивает привязку Python для исходного объекта запроса Apache. Пакет mod_wsgi предоставляет дополнительный механизм, позволяющий передавать исходный объект запроса Apache в качестве ссылки Python CObject в среде WSGI. Вы используете это в сочетании с apswigpy, например:
from apache.httpd import request_rec
r = request_rec(environ['apache.request_rec'])
r.user = user
По крайней мере, я думаю, что это установит соответствующую информацию, которую затем может использовать журнал доступа.
Вам действительно стоит перенести это обсуждение в список рассылки mod_wsgi.
Вероятно, это не то, что вы ожидаете, но вы можете использовать имя пользователя в своей схеме URL. Таким образом, пользователь будет в разделе пути ваших журналов apache.
Вам нужно будет изменить вашу аутентификацию так, чтобы ответы, требующие аутентификации, были очевидны в журналах apache, в противном случае при просмотре журналов вы можете приписать неаутентифицированные запросы аутентифицированным пользователям. Например. вернуть временное перенаправление на страницу входа, если запрос не аутентифицирован.
Вы можете использовать mod_auth_tkt . auth_tkt
- это подписанный файл cookie с идентификатором пользователя, понятным Apache. Ваше веб-приложение должно установить cookie , когда пользователь входит в систему и выходит из нее. Apache может получить REMOTE_USER
из файла cookie, передать его вашему веб-приложению или веб-приложению, отличному от Django, работающему на том же сервере, включить его в журналы и т.д.