科百科
当前位置: 首页 范文大全

nginx如何获取客户端ip(多级代理下如何获取客户端真实IP地址)

时间:2023-07-12 作者: 小编 阅读量: 1 栏目名: 范文大全

应用服务器无法从X-Forwarded-For中获取到与它直连的代理服务器的IP,此时我们可以使用远程ip,当服务器无法过http_x_forwarded_for获得上级代理或者客户端的ip时,应该使用$remote_addr。在代理过程中至少有一个代理设置了X-Forwarded-For,否则后面的代理或者应用服务器无法获得相关信息。X-Forwarded-For中虽然包含了真实的客户端IP,一般是第一个IP,但是如果客户端伪造了请求头,那么真实的客户端IP就不是第一个了。

多级代理中获取客户端真实IP

日志的格式

nginx中常用日志格式配置如下:

log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log/var/log/nginx/access.logmain;

其中的main为日志格式的别名,在使用的时候直接使用别名即可。

例子:

10.0.3.137 - - [09/Oct/2020:09:41:020800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" "10.1.9.98"

日积月累下,日志文件会越来越大,日志文件太大严重影响服务器效率,所以需要定时对日志文件进行切割。

由于这里是演示区,所以切割方式是按分钟来切割,正常生产上使用一般是按天来进行分割:

#!/bin/bash#日志文件存放目录LOGS_PATH=/usr/local/nginx/logs#备份文件名称YESTERDAY=$(date -d "yesterday"%Y%m%d%H%M)#重命名日志文件mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.logmv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

然后添加定时任务:

# crontab -e*/1 * * * * /bin/bash /usr/local/nginx/logs/nginx_log.sh

获取客户端真实IP

服务器资源分配情况如下:

  • 10.1.9.98:充当客户端
  • 10.0.3.137:一级代理
  • 10.0.4.105:二级代理
  • 10.0.4.129:三级代理
  • 10.0.4.120:服务器端,为了方便,这里使用一个nginx充当服务器端,正常情况下一般是一个web服务器,如tomcat。

各个服务初始配置如下:

10.0.3.137的配置:

worker_processes1;events {worker_connections1024;}http {includemime.types;default_typeapplication/octet-stream;log_format main '$remote_addr - $http_x_forwarded_for - $http_x_real_ip';access_loglogs/access.logmain;server {listen80;location / {# proxy_set_header X-Real-IP $remote_addr;# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://10.0.4.105;}}}

0.0.4.105的配置,其他配置与10.0.3.137的一致:

...location / {# proxy_set_header X-Real-IP $remote_addr;# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://10.0.4.129;}...

10.0.4.129的配置,其他配置与10.0.3.137的一致:

...location / {# proxy_set_header X-Real-IP $remote_addr;# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://10.0.4.120;}...

10.0.4.120的配置,其他配置与10.0.3.137的一致

...location / {root html;index index.html;}...

下面的记录为access.log中打印的结果:

总结:
  • X-Forwarded-For是一个追加的过程,后面的代理会把前面代理的IP追加到X-Forwarded-For尾部,用逗号进行分隔。
  • 应用服务器(10.0.4.120)无法从X-Forwarded-For中获取到与它直连的代理服务器的IP(10.0.4.129),此时我们可以使用远程ip(表示直连的那台代理),当服务器无法过http_x_forwarded_for获得上级代理或者客户端的ip时(可能没有经过代理),应该使用$remote_addr。
  • 在代理过程中至少有一个代理设置了X-Forwarded-For,否则后面的代理或者应用服务器无法获得相关信息。
  • X-Forwarded-For中虽然包含了真实的客户端IP,一般是第一个IP,但是如果客户端伪造了请求头,那么真实的客户端IP就不是第一个了。
  • HTTP中header里面的X-Real-IP只是一个变量,后面的设置会覆盖前面的设置,所以只需要在第一个代理服务器上设置proxy_set_header X-Real-IP $remote_addr即可,然后在应用端直接引用$http_x_real_ip就行。

在java中,如果请求没有经过nginx代理,可以使用如下方法获取客户端的真实IP:

# 类似nginx中的$remote_addrrequest.getRemoteHost();

如果请求经过了nginx代理,可以从请求头中获取(前提是必须正确配置nginx才能获取到):

request.getHeader("x-real-ip");

如果是用的其他Apache,Squid等反向代理软件,同样是从请求头中获取真实IP,只是属性名不一样而已。

来源:morris131.blog.csdn.net/article/details/108991869

,
    推荐阅读
  • zippo怀炉有日本版吗(Zippo怀炉孔雀怀炉暖手炉新手三千问之你问我答)

    ,现在小编就来说说关于zippo怀炉有日本版吗?zippo怀炉有日本版吗〖怀炉新手三千问〗Q:最适合新手性价比又高的怀炉是什么?A:11尾孔雀,大号孔雀,沈阳怀炉,九尾编制头孔雀,各种孔雀改装炉子Q:怀炉到了怎么使用?所以加油应当适量切不可为了续航盲目加油。味道最小的油是佐罗金,性价比最高的普瑞克怀炉油,imco的油也是非常好用的。

  • 青椒牛肉煲仔饭的家常做法(如何做青椒牛肉煲仔饭)

    青椒牛肉煲仔饭的家常做法洋葱一个,去膜,洗净,切成小段。还有八角、桂皮、干红辣椒是,适量即可。将牛肉洗净后,放入高压锅里,加入姜片,加入适量的水,盖上锅盖开始压煮。将牛肉连同汤汁全部倒入锅里,再加入适量的料酒、生抽、蚝油,一汤匙郫县豆瓣酱;翻搅均匀,煮开。小火慢炖10分钟,再加入适量的盐和鸡精进行调味。最后将小青菜下入锅里,翻搅至熟,即可。

  • 胆固醇高献血有好处吗(献血对胆固醇高有好处吗)

    通过献血,可以减少血液有形成分,可使血液黏稠度明显降低,加快血液流速,从而达到降低血液中胆固醇含量的目的。胆固醇高要多吃蔬菜、水果和菌藻类食物。大量研究证实,增加膳食纤维的摄入具有降低胆固醇的明确作用。香烟中含有大量的尼古丁,长期吸烟会使血清中总胆固醇及甘油三酯水平升高,高密度脂蛋白胆固醇水平降低。胆固醇高的患者要避免过度紧张,因为情绪紧张、过度兴奋,可以引起血中胆固醇及三酸甘油酯含量增高。

  • 藕怎么种(按照这个顺序种植)

    挑选藕尾巴有藕孔和新藕芽的藕苗,现在小编就来说说关于藕怎么种?下面内容希望能帮助到你,我们来一起看看吧!把藕苗的尾巴向上,藕苗的芽一端倾斜向下。挖一个合适的坑,并将藕苗种在挖的坑并埋好。种好藕苗后,给藕苗浇透水,使水没过泥面即可。藕,又称莲藕,属莲科植物根茎,可餐食也可药用。在我国的大部分省份均有种植。藕微甜而脆,可生食也可煮食,是常用餐菜之一。

  • 宝马扁平化标志(宝马采用扁平化新Logo......先别急着喷)

    ↓宝马总部发现新冠病例↓据路透社消息,宝马慕尼黑总部研发中心的一名员工于3月2日被确诊为新型冠状肺炎患者。截止目前,中国尚未有汽车厂商曝光发生感染病例的消息,看来国内厂商对于疫情的防控还是很到位的。↓丰田、日产大幅裁员↓受到戈恩事件和新冠疫情等多方面影响,日产汽车最近的财务状况表现低迷。每年都会在日内瓦车展上宣布获奖车型。虽然今年的日内瓦车展因疫情取消,但并未影响该评选的正常进行。

  • 开化县生态产品价值实现机制(周宁生态赋能逐绿奋进)

    近年来,周宁强化“一把手”招商、“小分队”招商,制定招商引资奖励办法,推行每季度“集中签约集中开工”,全年签约项目15个,协议总投资38.8亿元。乡村振兴深入实施2020年4月份,省委办公厅、省政府办公厅发布公告,同意周宁退出省级扶贫开发工作重点县,标志周宁正式脱贫“摘帽”了。

  • 辣丝瓜怎么做(辣炒丝瓜做法介绍)

    跟着小编一起来看一看吧!辣丝瓜怎么做首先将丝瓜洗干净去头去皮切成厚片。然后辣椒去蒂去芯切成块备用。锅中倒入油烧热后倒入葱花,蒜片和花椒爆香。最后大火翻炒丝瓜变软后加盐调味倒入一点点醋翻炒匀即可出锅。

  • 七开头的成语(七开头的成语有哪些)

    我们一起去了解并探讨一下这个问题吧!七上八下,汉语成语,读音为qīshàngbāxià,意思是形容心里慌乱不安,无所适从的感觉;也指零落不齐或纷乱不齐。七零八落,汉语成语,拼音是qīlíngbāluò,是形容零散稀疏的样子,特指原来又多又整齐的东西现在零散了。七拼八凑,汉语成语,拼音是qīpīnbācòu,意思是指把零碎的东西拼凑起来;引申为胡乱凑合。