nginxx-forwarded-for使用教程

一、 Forwarded For是什么?

在理解nginxx-forwarded-for之前,我们先了解一下Forwarded For。

简单的说,当我们通过代理访问网站时,网站只会记录代理服务器的IP地址,这样会影响我们运维的判断和处理方式,于是就有了Forwarded For这个标准。

它允许代理服务器在数据包头部加入“X-Forwarded-For”的字段,用于记录原始请求的客户端真实IP地址。

二、为什么要使用nginxx-forwarded-for?

如果你的架构中使用了nginx这个反向代理服务器,而且又想记录用户的真实IP地址,那么就要使用nginxx-forwarded-for配置来保存这个信息。

nginx默认只保存最后一个代理服务器的IP地址,而没有保存前面的IP地址信息,因此它不能完整记录用户的信息。为此,nginx的官方提供了一个设置,即ngx_http_realip_module。

ngx_http_realip_module模块只在HTTP请求的第一个请求头中包含一个IP地址,并且它只改变IP地址。

当启用这个模块后,如果客户端经过代理服务器访问应用,则可以通过nginx的标准变量(如access_log,ngx_http_limit_req_module等),将它们的真正公网IP地址转嫁回应用。

三、怎么使用nginxx-forwarded-for?

1. 安装ngx_http_realip_module模块

如果安装了完整版nginx,则可以通过检查所有已默认安装模块列表来检查是否已安装ngx_http_realip_module:

“`
./configure –help | grep realip
“`

如果看到了–with-http_realip_module的选项,并且这个选项已启用,则表示已将ngx_http_realip_module模块包含到nginx进程中。

如果没有启用,则必须重新编译nginx,启用它,或使用其他软件源重新安装该软件,带有ngx_http_realip_module模块的nginx。

2. 配置nginx.conf文件

“`
http {
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_recursive on;
}
“`

在http{…}内配置,配置real_ip_header,告诉nginx使用哪个请求头来读取客户端真实IP地址。 标准填写为X-Forwarded-For。

set_real_ip_from用于指定信任的代理服务器的IP或范围。如果设置为空,则视为代理服务器具有等同于客户端的权威性,容易受到恶意定义的X-Forwarded-For攻击。

real_ip_recursive,默认情况下,ngx_http_realip_module模块的真正的转发人IP地址是从客户端或从最后一个代理服务器的IP地址中获取的,另一个代理服务器的IP地址是不能获取的,如果要获取,需要开启这一设置。

四、小结

若要获取客户端真实IP,则需要使用ngx_http_realip_module 模块。ngx_http_realip_module 模块在经过代理服务器时,支持从http请求头X-Forwarded-For中获取客户端真实IP,并将客户端真实IP保存到nginx标准变量中。

因此,如果你的应用有代理服务器的话,请建议节省时间,并建议使用ngx_http_realip_module mod。

原创文章,作者:VTIGU,如若转载,请注明出处:https://www.506064.com/n/334505.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
VTIGUVTIGU
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • Python for循环求1到100的积

    Python中的for循环可以方便地遍历列表、元组、字典等数据类型。本文将以Python for循环求1到100的积为中心,从多个方面进行详细阐述。 一、for循环语法 Pytho…

    编程 2025-04-29
  • MQTT使用教程

    MQTT是一种轻量级的消息传输协议,适用于物联网领域中的设备与云端、设备与设备之间的数据传输。本文将介绍使用MQTT实现设备与云端数据传输的方法和注意事项。 一、准备工作 在使用M…

    编程 2025-04-29
  • Python3.6.5下载安装教程

    Python是一种面向对象、解释型计算机程序语言。它是一门动态语言,因为它不会对程序员提前声明变量类型,而是在变量第一次赋值时自动识别该变量的类型。 Python3.6.5是Pyt…

    编程 2025-04-29
  • Deepin系统分区设置教程

    本教程将会详细介绍Deepin系统如何进行分区设置,分享多种方式让您了解如何规划您的硬盘。 一、分区的基本知识 在进行Deepin系统分区设置之前,我们需要了解一些基本分区概念。 …

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Qt雷达探测教程

    本文主要介绍如何使用Qt开发雷达探测程序,并展示一个简单的雷达探测示例。 一、环境准备 在开始本教程之前,需要确保你的开发环境已经安装Qt和Qt Creator。如果没有安装,可以…

    编程 2025-04-29
  • 猿编程python免费全套教程400集

    想要学习Python编程吗?猿编程python免费全套教程400集是一个不错的选择!下面我们来详细了解一下这个教程。 一、课程内容 猿编程python免费全套教程400集包含了从P…

    编程 2025-04-29
  • Python使用for循环打印99乘法表用法介绍

    本文介绍如何使用python的for循环语句来打印99乘法表,我们将从需要的基本知识、代码示例以及一些加强版来详细讲解。 一、基础知识 在学习如何使用for循环打印99乘法表之前,…

    编程 2025-04-29
  • Python烟花教程

    Python烟花代码在近年来越来越受到人们的欢迎,因为它可以让我们在终端里玩烟花,不仅具有视觉美感,还可以通过代码实现动画和音效。本教程将详细介绍Python烟花代码的实现原理和模…

    编程 2025-04-29
  • 使用Snare服务收集日志:完整教程

    本教程将介绍如何使用Snare服务收集Windows服务器上的日志,并将其发送到远程服务器进行集中管理。 一、安装和配置Snare 1、下载Snare安装程序并安装。 https:…

    编程 2025-04-29

发表回复

登录后才能评论