欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

request.META无法获取到IP

程序员文章站 2022-05-11 18:09:55
...

在做小站反向代理遇到的问题,在调试模式的时候使用reqeust.META.get("REMOTE_ADDR")是没有问题,但是到生产模式的时候,为什么就出问题了呢?

来自:request.META无法获取到IP

调试模式下获取真实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; #添加压缩头
}