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

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

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

应用服务器无法从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

,
    推荐阅读
  • 漫威电影钢铁侠的观看顺序(收藏23部漫威电影观看顺序)

    ,我来为大家科普一下关于漫威电影钢铁侠的观看顺序?下面希望有你要的答案,我们一起来看看吧!漫威电影钢铁侠的观看顺序

  • 买的玉米和自己种的有什么区别(紫粒比红粒贵10元)

    不同厂家、不同的品种,玉米拌种剂的颜色可能会有差别,比如有红色、紫色、蓝色等之分。第二种情况,拌种剂颜色不同,所使用的拌种剂成分、含量、剂型也不同,价格有高有低属于正常。拌种剂有颜色的初衷,其实为了达到一个警示的作用,由于拌种剂中含有杀虫剂和杀菌剂,害怕拌种之后被误食,所以加入了染色剂,警示人们这是已经拌种后的种子,不要误食了。

  • 刘禹锡生平简介(诗人刘禹锡的生平简介说明)

    安史之乱后,父刘绪迁居南方,刘禹锡是在苏州诞生和长大的。刘禹锡是王叔文政治集团的重要人物之一。这个集团主张限制贵族大地主的兼并,加强中央集权,进行政治改革。唐宪宗即位后,在藩镇、宦官及腐朽官僚们的反扑下,改革失败,王叔文被杀,王伾病死。刘禹锡与柳宗元等八人被贬到远州作司马。晚年回长安任集贤殿学士,后回洛阳任太子宾客,最后官至检校礼部尚书。这就是刘禹锡历史的、阶级的局限性。

  • 华为手机怎么能跟电脑无线连接(华为手机无线连接电脑)

    华为首创无线连接电脑,可以在电脑上对手机的文件和图片直接操作,步骤如下:一,打开电脑和手机,共同在WIFI局域网环境下,点击手机的“设置”,然后找到“设备与连接”,点击。

  • 感人的情话(催人泪下的情话短句)

    我愿与你比翼双双飞,身影步步随。因为我爱你,所以我愿感受你所有的感受。

  • 4s店和汽贸店购车有什么区别(汽车4S店跟汽贸有什么区别)

    4S店是品牌授权,一般执行的是单店单品牌政策,即单店只提供某一种品牌的汽车销售和其他服务。统一的VI形象,标准的格局和装修,完善的人员和设备配置,不同车型的试驾车配备,大量的商品车库存,都是4S店需要花钱去投入的。因此,4S店是需要丰厚的利润才能弥补这些投入带来的成本。首先他们依托于4S店生存,只能通过4S店拿到商品车。这种商业模式短期内不会改变,除非顶层改革,改变现在汽车厂家向4S店压货的模式。

  • 社保缴纳怎么用支付宝查询(社保支付系统号是什么)

    申领社保卡,应到社会保障卡的服务网点办理下列手续:填写《潍坊市社会保障卡信息采集表》.交验居民身份证及户口簿;现场采集照片.签字确认《社会保障卡申领表》并粘贴身份证复印件.按照有关规定交纳工本费.7如何领取社保卡?通过拨打95533可查询个人医保账户余额、公积金存款账户余额.社保卡在电话银行上实现的金融功能及其操作同普通银联卡.15社保卡在网上银行上具有哪些功能?

  • 江西米粉怎么做(江西米粉如何做)

    以下内容大家不妨参考一二希望能帮到您!江西米粉怎么做原料:米粉、生菜、豆皮、肉丸、肥牛、植物油、盐、酱油、十三香、鸡精。江西米粉半斤,提前凉水浸泡。锅内烧水,加入米粉煮,米粉特别耐煮,大概煮了20多分钟。自己尝,没有硬结即可。锅内加油,炒香葱花,加入肥牛翻炒。豆皮提前用水浸泡,浸泡几分钟即可。加入水,煮开加入海米,加入酱油,盐,鸡精,十三香。加入米粉,丸子,继续煮1分钟左右。

  • 科特迪瓦国家简介(全球唯一被移民毁掉的国家)

    加上科特迪瓦国内只有800万人左右,是典型的国富人富的小国。外来的移民多为穆斯林信仰,与本国原住民基督教信仰矛盾重重。短短的十年之中,疯狂的移民让科特迪瓦的原800万人口飙升至1400万,甚至一度到达2000万。科特迪瓦的兴衰史又一次证明了政权不掌握在人民的手中,只能是兴,百姓苦;亡,百姓苦。