我在访问我网站的登录页面时遇到问题。它具有django-axes访问日志记录中间件监视它的功能:
from axes.decorators import watch_login
@method_decorator(watch_login, name="dispatch")
class UserLogin(FormView): ...
Run Code Online (Sandbox Code Playgroud)
对登录页面的 GET 请求会导致:
数据错误在 /path/to/login/
inet 类型的无效输入语法:“b''”
回溯中的 IP 地址(根据错误)是b''; 所以我猜nginx 代理没有通过这个。
这是我的 nginxsites-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;
}
Run Code Online (Sandbox Code Playgroud)
我的 nginx 配置缺少什么才能django-axes正常工作?
如果有人现在遇到此问题,只需更新。AXES_BEHIND_REVERSE_PROXY 已被弃用。
以下设置对我有用:
AXES_META_PRECEDENCE_ORDER = [
'HTTP_X_FORWARDED_FOR',
'REMOTE_ADDR',
]
Run Code Online (Sandbox Code Playgroud)
该文档提到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;
}
Run Code Online (Sandbox Code Playgroud)
可能是你忘记设置了AXES_BEHIND_REVERSE_PROXY。即设置为True在你的Django设置应允许的Django轴上看到HTTP_X_FORWARDED_FOR头。
AXES_BEHIND_REVERSE_PROXY: 如果True,它将从 处定义的标头中查找 IP 地址AXES_REVERSE_PROXY_HEADER。请确保您启用此设置以配置您的代理以设置正确的标头值,否则您可能会因在每个请求中直接设置此标头而受到攻击。默认:False
AXES_REVERSE_PROXY_HEADER: 如果AXES_BEHIND_REVERSE_PROXY是True,它会从这个头中寻找 IP 地址。默认:HTTP_X_FORWARDED_FOR
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |