点赞
评论
收藏
分享
举报
nginx proxy_set_header设置,自定义header
发表于2021-02-01 12:51

浏览 642

  • 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用request.getRemoteAddr()就可以获取到客户端ip,但是当我们使用了nginx作为反向代理后,使用request.getRemoteAddr()获取到的就一直是nginx服务器的ip的地址,那这时应该怎么办?
  • 而且有些场景做了一些客户端浏览器url的判断,比如,浏览器输入baidu.com是可以访问到百度的,但是输入!@#¥*.com有可能也是可以访问到百度,但是百度内部并不希望以这种方式访问(或者防止一些网络攻击),这时候应该怎么办?

其实nginx允许重新定义或者添加发往后端服务器的请求头。value可以包含文本、变量或者它们的组合。

默认情况下,有两个请求头会被重新定义:

proxy_set_header Host $proxy_host; //默认会将后端服务器的HOST填写进去

proxy_set_header Connection close;

我们可以通过设置nginx配置去调整转发报文的头部:

  • proxy_set_header X-real-ip $remote_addr;

    其中这个X-real-ip是一个自定义的变量名,名字可以随意取,这样做完之后,用户的真实ip就被放在X-real-ip这个变量里了,然后,在web端可以这样获取:

    request.getHeader("X-real-ip")

  • proxy_set_header X-Forwarded-For $remote_addr;

    同上。

    真实的显示出客户端原始ip。(nginx更多使用这条配置,X-Forwarded-For为默认字段,以下介绍均为默认字段)

  • proxy_set_header Host $http_host;

    如果想获取客户端访问的头部,可以这样来设置。

    但是,如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。

  • proxy_set_header Host $host;

    这个配置相当于上面配置的增强。

    它的值在请求包含"Host"请求头时为"Host"字段的值,在请求未携带"Host"请求头时为虚拟主机的主域名。

  • proxy_set_header Host $host:$proxy_port;

    服务器名和后端服务器的端口(访问端口)一起传送。

  • proxy_set_header <<<*>>> "";

    请求头的值为空,请求头将不会传送给后端服务器。

  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    在默认情况下经过proxy转发的请求,在后端看来远程地址都是proxy端的ip 。

    添加这条配置之后:

    意思是增加一个$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增加,而不是覆盖,当然由于默认的X-Forwarded-For值是空的,所以我们总感觉X-Forwarded-For的值就等于$proxy_add_x_forwarded_for的值,实际上当你搭建两台nginx在不同的ip上,并且都使用了这段配置,那你会发现在web服务器端通过request.getHeader("X-Forwarded-For")获得的将会是客户端ip第一台nginx的ip

    在第一台nginx中,使用

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    现在的$proxy_add_x_forwarded_for变量的"X-Forwarded-For"部分是空的,所以只有$remote_addr,而$remote_addr的值是用户的ip,于是赋值以后,X-Forwarded-For变量的值就是用户的真实的ip地址了。

    到了第二台nginx,也使用

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    现在的$proxy_add_x_forwarded_for变量,

    X-Forwarded-For部分包含的是用户的真实ip,

    $remote_addr部分的值是上一台nginx的ip地址,

    于是通过这个赋值以后现在的X-Forwarded-For的值就变成了"用户的真实ip,第一台nginx的ip"。

已修改于2023-03-09 02:20
创作不易,留下一份鼓励
守望

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
守望
这家伙很懒还未留下介绍~
89
文章
0
问答
17
粉丝
相关文章
TA社区将陆续在北京、深圳、上海落地线下Meetup与技术大咖畅聊云原生和最热开源话题;从此网友变战友。免费都不是重点,关键是有钱你也买不到。
点赞 1
浏览 814
原文作者:妙正灰原文链接:基于Nginx的HTTPS性能优化实践转载来源:阿里云开发者社区前言随着相关浏览器对HTTP协议的“不安全”、红色页面警告等严格措施的出台,以及向iOS应用的ATS要求和微信、支付宝小程序强制HTTPS需求,以及在合规方面如等级保护对传输安全性的要求都在推动HTTPS的发展。虽然HTTPS优化了网站访问体验(防劫持)以及让传输更加安全,但是很多网站主赶鸭子上架式的使用了HTTPS后往往都会遇到诸如:页面加载速度变慢、服务器负载过高以及证书过期不及时更新等问题。所以本文就来探讨一下HTTPS的优化实践。选型其实像ApacheHttpd、LigHttpd、Canddy等Web服务软件都可以设置HTTPS,但是在相应的扩展生态和更新率上都不如Nginx。Nginx作为大型互联网网站的Web入口软件有着广泛的支持率,例如阿里系的Tengine、CloudFlare的cloudflare-nginx、又拍云用的OpenResty都是基于Nginx而来的,Nginx是接受过大规模访问验证的。同时大家
点赞 1
浏览 1.2k
原文作者:AmirRawdat 原文链接:NGINXIngressController在动态Kubernetes云环境中的性能测试-NGINX 转载来源:NGINX官方网站随着越来越多的企业在生产环境中运行容器化应用,Kubernetes将持续巩固其作为标准容器编排工具的地位。与此同时,在疫情中崛起的居家办公模式加快了互联网流量的增长,导致云计算需求提前几年爆发。目前很多公司都在紧锣密鼓地升级基础架构,帮助客户解决正在面临的重大网络中断和过载问题。为了在基于云的微服务环境中达到所需的性能水平,您需要使用快速、完全动态的软件来释放下一代超大规模数据中心的可扩展性和性能潜力。许多使用Kubernetes管理容器的企业和机构都依赖基于NGINX的IngressController来实现应用交付。  在这篇博客中,我们针对在互联网中客户端连接的延迟情况,提供了三种NGINXIngressController在真实多云环境中的性能测试结果。这三种控制器分别为:基于NGINX开源版的NGINXIngressControll
点赞 1
浏览 553