当前位置:首页 > 技术文章 > 正文内容

Nginx 之 realip模块 使用详解

arlanguage5个月前 (12-19)技术文章34



realip 功能介绍

用途:当本机 Nginx 处于反向代理后端时可以获取到用户的真实IP地址。

使用:realip 功能需要 Nginx 添加 ngx_http_realip_module 模块,默认情况下是不被编译,如果需要添加,请在编译时添加 --with-http_realip_module 选项开启它。

realip 作用域

set_real_ip_from、real_ip_header 和 real_ip_recursive 都可以用于 http、 server、location 区域配置。

realip 部分参数解释

  • set_real_ip_from:设置反向代理服务器,即信任服务器IP
  • real_ip_header X-Forwarded-For:用户真实IP存在X-Forwarded-For请求头中
  • real_ip_recursive:
    • off:会将real_ip_header指定的HTTP头中的最后一个IP作为真实IP
    • on:会将real_ip_header指定的HTTP头中的最后一个不是信任服务器的IP当成真实IP

http 头中的 X-Forwarded-For、X-Real-IP、Remote Address 解释

X-Forwarded-For 位于HTTP请求头,是HTTP的扩展 header,用于表示HTTP请求端真实IP。

格式如下:


X-Forwarded-For: client, proxy1, proxy2

Nginx 代理一般配置为:




proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

解释:

  • X-Forwarded-For:Nginx追加上去的,但前面部分来源于nginx收到的请求头,这部分内容不是很可信。符合IP格式的才可以使用,否则容易引发XSS或者SQL注入漏洞。
  • Remote Address:HTTP协议没有IP的概念,Remote Address来自于TCP连接,表示与服务端建立TCP连接的设备IP,因此,Remote Address无法伪造。
  • X-Real-IP:HTTP代理用于表示与它产生TCP连接的设备IP,可能是其他代理,也可能是真正的请求端。

realip 功能举例说明

下面是一个简单的架构图:

假设一:

1、如果 Nginx 没有使用 realip模块,第二台 Nginx中 X-Forwarded-For 请求是 1.1.1.1,但 remote_addr 地址是 2.2.2.2,这时应用服务可以通过 X-Forwarded-For 字段获取用户真实IP。不过这里有点风险,如果中间多几层反向代理服务,就无法获取唯一一个用户真实IP。

2、如果 Nginx 使用realip模块,并如下设置;Nginx 会取 X-Forwarded-For 最后一个IP也就是 2.2.2.2 作为真实IP。最后应用服务拿到的地址也是 2.2.2.2,但事实这不是用户IP。





set_real_ip_from 2.2.2.2;set_real_ip_from 2.2.2.3;real_ip_header X-Forwarded-For;real_ip_recursive off;

3、如果 Nginx 使用realip模块,并如下设置;由于 2.2.2.2 是信任服务器IP,Nginx 会继续往前查找,发现 1.1.1.1 不是信任服务器IP,就认为是真实IP。但事实 1.1.1.1 也就是用户IP。最后应用服务也拿到唯一的用户真实IP。





set_real_ip_from 2.2.2.2;set_real_ip_from 2.2.2.3;real_ip_header X-Forwarded-For;real_ip_recursive on;

参考链接

  • https://cloud.tencent.com/developer/article/1521273
  • https://www.cnblogs.com/amyzhu/p/9610056.html

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/340.html

标签: nginx 指定ip
分享给朋友:

“Nginx 之 realip模块 使用详解” 的相关文章

运维笔记:Windows下如何实现nginx服务自启动,看完你就会了

Nginx作为有每一个两三年工作经验的程序员来说都不陌生,基本上每个线上部署的项目都需要用到,Nginx常用的功能有负载均衡、反向代理、正向代理、搭建FTP服务等等。为了满足Nginx服务可以随操作系统启动,如果是Linux服务器的话可以通过shell脚本设置Nginx自启动,对于Windows操作...

Nginx的安装及配置详解 nginx1.12安装

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(Django, Flask, etc)。熟悉Nginx的配置对Web开发和运维人员来说至关重要。本文整理了Nginx的配置大全,可以作为...

轻量级日志平台 Loki 2.3 发布:15 倍最近数据查询速度提升

一、前言Loki v2.3.0 中添加了出色的新功能,进行了 bug 修复。除此之外,性能也得到了提升。二、自定义保留规则Loki 中的保留对于集群来说一直是全局的,并推迟到底层对象存储。Loki 现在可以通过 Compactor 组件处理保留。 你可以配置每个租户和每个流的保留时间。 这些不同的保...

好程序员:2023年自学Java四阶段学习法,真滴好用麻啦!

同学们,我是好程序员小源,今天给大家整理了自学Java的四个阶段,大家可以按照这四个阶段学习哦~会更加规划系统一点!第一阶段: JavaSE[5周]本阶段从零基础起步,荃面深入的学系JavaSE课程,主要内容包括Java概述与环境搭建、语言基础、条件、分支结构 、循环、方法/数、数组、面向对象基础、...

Nginx 的性能调优: 从入门到精通

Nginx 是一种高效的 Web 服务器和反向代理,广泛应用于互联网中。通过性能调优,Nginx 可以进一步提高其服务质量和性能。本文将从入门到精通,介绍 Nginx 性能调优的方法和技巧。一、什么是 Nginx?Nginx 是一种开源的 Web 服务器和反向代理软件,由 Igor Sysoev 创...

Nginx 重定向 HTTP 到 HTTPS 的便捷方法

问题描述 自从大规模使用 HTTPS 之后,所有的 HTTP 访问都要重定向到 HTTPS 站点。不然,客户只会输入域名,而很多浏览器又默认使用 HTTP 协议,如果我们没有提供 HTTP 访问,又不重定向,那客户将看到一个空白页(无法访问),客户会以为我们的站点有问题,毕竟客户哪里知道什么是 HT...