我在访问我网站的登录页面时遇到了麻烦。它让django-axes
访问日志记录中间件监视它:
from axes.decorators import watch_login
@method_decorator(watch_login, name="dispatch")
class UserLogin(FormView): ...
对登录页面的GET请求将导致:
DataError在/path/to/登录/ inet类型的输入语法无效:"b''“
跟踪中的ip地址(根据错误)是b''
;所以我猜是nginx代理没有传递这个。
下面是我的nginx sites-available
配置的摘录(调试时我还没有启用ssl ):
upstream app_servers {
server unix:/tmp/gunicorn.sock;
}
location / {
proxy_pass http://app_servers;
proxy_redirect off;
real_ip_header X-Real-IP;
proxy_set_header Host $http_host;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
为了让django-axes
工作,我在nginx配置中遗漏了什么?
发布于 2017-01-07 18:31:02
很可能你已经忘记设置AXES_BEHIND_REVERSE_PROXY
了。在django设置中将其设置为True
应该允许django-axes查看HTTP_X_FORWARDED_FOR头。
AXES_BEHIND_REVERSE_PROXY
:如果是True
,它将从AXES_REVERSE_PROXY_HEADER
定义的报头中查找IP地址。如果启用此设置,请确保将代理配置为为标头设置正确的值,否则会通过在每个请求中直接设置此标头而受到攻击。默认值:False
AXES_REVERSE_PROXY_HEADER
:如果AXES_BEHIND_REVERSE_PROXY
是True
,它将从这个报头中查找IP地址。默认值:HTTP_X_FORWARDED_FOR
发布于 2020-09-07 02:01:58
如果现在有人遇到这个问题,那就更新一下。AXES_BEHIND_REVERSE_PROXY一直是已弃用。
以下设置对我有效:
AXES_META_PRECEDENCE_ORDER = [
'HTTP_X_FORWARDED_FOR',
'REMOTE_ADDR',
]
文档也提到了AXES_PROXY_COUNT。但是,对于我的设置,将默认设置保留为None。
我的Nginx设置如下:
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8000;
}
https://stackoverflow.com/questions/41459523
复制相似问题