request.META无法获取到IP
程序员文章站
2022-05-11 18:09:55
...
在做小站反向代理遇到的问题,在调试模式的时候使用reqeust.META.get("REMOTE_ADDR")是没有问题,但是到生产模式的时候,为什么就出问题了呢?
调试模式下获取真实IP
request.META.get("REMOTE_ADDR") # 可以获取到本地IP
request.META.get("HTTP_X_FORWARDED_FOR") # 当IP使用代理的时候,可以通过这种方式获取到代理的IP地址
生产模式下如何获取
生产模式下,获取request.META.get("HTTP_X_FORWARDED_FOR")的时候会得到None,同时获取到request.META.get("REMOTE_ADDR")的时候只会得到空字符串,这是因为当你使用nginx反向代理的时候,需要设置header返回:
## nginx配置添加
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
## 同时脚本里重写获取方式
if request.META.get('HTTP_X_FORWARDED_FOR'):
ip = request.META.get("HTTP_X_FORWARDED_FOR")
else:
ip = request.META.get("HTTP_X_REAL_IP")
另外添加以下前两天遇到的新增配置
## nginx避免nobody启动,产生502的错误
user root; # 直接在最外面添加
## nginx隐藏版本号,有效防止服务器被对应漏洞攻破
http{
server_tokens off; #避免服务器版本号泄漏
}
## nginx添加压缩功能
http{
gzip on; #开启压缩
gzip_http_version 1.1; #对应压缩协议
gzip_disable 'MSIE[1-6]'; #拒绝ie1-6版本压缩
gzip_types text/css text/javascript application/javascript image/jpeg image/png image/gif; #压缩对象
gzip_buffers 4 8k; # 压缩使用的服务器内存 是4k - 8k
gzip_min_length 1k; #压缩最小的大小
gzip_comp_level 9; # 压缩级别
gzip_vary on; #添加压缩头
}
推荐阅读