0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Nginx的配置文件如何设置头信息保留真实IP不丢失

马哥Linux运维 来源:稀土掘金技术社区 2023-11-30 10:54 次阅读

在 Nginx 配置中设置头信息以保留客户端的真实 IP 地址通常是在使用反向代理的场景中需要的。当 Nginx 作为反向代理时,客户端的真实 IP 地址可能会在转发请求时丢失,因为到达应用服务器的请求看起来是从 Nginx 代理服务器发出的。为了解决这个问题,你可以使用X-Real-IP或X-Forwarded-For头信息来转发真实的客户端 IP。

这里是一个基本的配置示例:


server {
    listen 80


    location / {
        proxy_set_header Host $host
        proxy_set_header X-Real-IP $remote_addr
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
        proxy_pass http://backend_server
    }
}

proxy_set_header Host $host;将请求的 Host 头设置为原始请求的 Host 头。

proxy_set_header X-Real-IP $remote_addr;将真实的客户端 IP 地址添加到请求头中。这里的$remote_addr是 Nginx 变量,代表客户端的 IP 地址。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;添加一个X-Forwarded-For头,其中包含原始客户端的 IP 地址。$proxy_add_x_forwarded_for会追加客户端的 IP 地址到已有的X-Forwarded-For头信息中,如果存在的话。

请确保将http://backend_server替换为你的后端服务器的实际地址。

此外,确保你的应用服务器或框架已配置为从这些头信息中读取真实的客户端 IP 地址。不同的应用和框架可能有不同的配置方法来支持这一点。

java代码里怎么获取真是的客户端ip

在 Java 应用中获取真实的客户端 IP 地址通常涉及到解析 HTTP 请求的头信息。当你的应用部署在一个反向代理(如 Nginx)后面时,代理通常会在每个请求中添加特定的头信息(例如X-Real-IP或X-Forwarded-For),以传递原始客户端的 IP 地址。

以下是一个基本的 Java 代码示例,展示了如何在一个基于 Servlet 的应用中获取这些头信息:


javaCopy code
import javax.servlet.http.HttpServletRequest;


public class NetworkUtils {


    public static String getClientIp(HttpServletRequest request) {
        String xForwardedForHeader = request.getHeader("X-Forwarded-For");
        if (xForwardedForHeader == null) {
            return request.getRemoteAddr();
        } else {
            
            
            return xForwardedForHeader.split(",")[0].trim();
        }
    }
}

在这个例子中,getClientIp方法首先检查X-Forwarded-For头信息。如果这个头信息存在,方法会解析它并返回列表中的第一个 IP 地址,因为X-Forwarded-For可能包含由多个代理添加的多个 IP 地址,其中第一个通常是原始客户端的 IP 地址。如果X-Forwarded-For头信息不存在,方法会回退到使用HttpServletRequest的getRemoteAddr()方法,这通常返回直接建立连接的客户端(在这种情况下是代理服务器)的 IP 地址。

请注意,当处理来自不受信任源的X-Forwarded-For头信息时,需要谨慎,因为它可能被恶意客户端伪造。确保你的应用只在可信任的代理后面运行,并且考虑验证头信息中的 IP 地址。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9010

    浏览量

    85161
  • 文件
    +关注

    关注

    1

    文章

    561

    浏览量

    24692
  • 客户端
    +关注

    关注

    1

    文章

    289

    浏览量

    16659
  • nginx
    +关注

    关注

    0

    文章

    142

    浏览量

    12161

原文标题:Nginx的配置文件如何设置头信息保留真实IP不丢失

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux上Nginx获得最佳性能的8种方法

    NGINX 是一种流行的、免费的开源 Web 服务器。默认的 NGINX 配置足以让 Web 服务器正常工作。 但是,如果您想充分利用 NGINX,则需要使用其
    发表于 01-16 09:51 535次阅读

    【NanoPi NEO试用体验】之安装配置Nginx环境WEB网站详解

    /nginx/conf.d/在这里我们建立一个自己测试的配置文件nrjs.conf来进行测试。root@nrjs-cn:~# vi /etc/nginx/conf.d/nrjs.conf配置文
    发表于 10-18 12:25

    主要学习下nginx的安装配置

    ##setenforce 1 设置SELinux 成为enforcing模式修改配置文件(需要重启机器):修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX
    发表于 10-19 14:12

    开卡配置文件设置工具,sss量产INI文件设置工具

    开卡配置文件设置工具,sss量产INI文件设置工具
    发表于 04-21 01:22 27次下载
    开卡<b class='flag-5'>配置文件</b><b class='flag-5'>设置</b>工具,sss量产INI<b class='flag-5'>文件</b><b class='flag-5'>设置</b>工具

    ICD配置文件的详细介绍和配置内容的详细概述

    配置文件配置文件是利用SCL语言描述变电站设备对象模型后生成的文件,用于在不同厂商的配置工具之间交换配置信息
    的头像 发表于 06-02 11:16 1.8w次阅读
    ICD<b class='flag-5'>配置文件</b>的详细介绍和<b class='flag-5'>配置</b>内容的详细概述

    AD8283评估板设计和配置文件

    AD8283评估板设计和配置文件
    发表于 05-31 16:04 9次下载
    AD8283评估板设计和<b class='flag-5'>配置文件</b>

    labview读写配置文件实例分享

    labview读写配置文件实例分享
    发表于 11-01 16:05 45次下载

    SpringBoot配置文件application

    Map配置 YML配置文件: sys-num: mymap: "{'a':'aaa','b':'bbb'}" 方法内: public class learnMap { @Value
    的头像 发表于 01-13 15:28 614次阅读

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳
    的头像 发表于 10-20 15:04 544次阅读
    KT142C语音芯片<b class='flag-5'>配置文件</b>总是不起作用?<b class='flag-5'>配置文件</b>的问题集中归纳

    ubuntu系统ip地址配置

    配置。但是这种方式只能临时修改,当服务器重启后,配置信息丢失。 直接修改配置文件。Ubuntu系统的配置文件在:/etc/network/
    的头像 发表于 11-13 17:01 1.3w次阅读

    linux修改网卡ip配置文件

    Linux是一种开源的操作系统,因此,它给用户提供了很高的自由度,可以根据个人需要进行各种定制和配置。其中,修改网络接口配置文件是常见的操作,可以通过修改网卡ip配置文件
    的头像 发表于 11-17 10:51 2135次阅读

    springboot的全局配置文件有几种

    Spring Boot是一种快速开发框架,其通过提供配置文件来实现对应用程序的配置。全局配置文件在Spring Boot中起着非常重要的作用,可以用于配置各种不同的属性,包括数据库连接
    的头像 发表于 12-03 15:28 1503次阅读

    php的配置文件是什么

    配置文件的名称默认为php.ini。该文件通常位于PHP安装目录下的conf文件夹中。当PHP解释器启动时,会自动加载php.ini文件,并根据其中的
    的头像 发表于 12-04 15:55 1462次阅读

    oracle配置文件类型关联

    ,并介绍它们之间的关联关系。 init.ora文件 init.ora文件是Oracle数据库的主要配置文件之一。它包含了数据库实例的各种参数设置,例如SGA大小、用户连接数、日志模式等
    的头像 发表于 12-06 10:17 457次阅读

    鸿蒙开发:【Stage模型应用配置文件

    应用配置文件中包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、
    的头像 发表于 06-15 09:15 1542次阅读
    鸿蒙开发:【Stage模型应用<b class='flag-5'>配置文件</b>】