0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Nginx的配置文件如何設(shè)置頭信息保留真實(shí)IP不丟失

馬哥Linux運(yùn)維 ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-11-30 10:54 ? 次閱讀

在 Nginx 配置中設(shè)置頭信息以保留客戶端的真實(shí) IP 地址通常是在使用反向代理的場(chǎng)景中需要的。當(dāng) Nginx 作為反向代理時(shí),客戶端的真實(shí) IP 地址可能會(huì)在轉(zhuǎn)發(fā)請(qǐng)求時(shí)丟失,因?yàn)榈竭_(dá)應(yīng)用服務(wù)器的請(qǐng)求看起來是從 Nginx 代理服務(wù)器發(fā)出的。為了解決這個(gè)問題,你可以使用X-Real-IP或X-Forwarded-For頭信息來轉(zhuǎn)發(fā)真實(shí)的客戶端 IP。

這里是一個(gè)基本的配置示例:


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;將請(qǐng)求的 Host 頭設(shè)置為原始請(qǐng)求的 Host 頭。

proxy_set_header X-Real-IP $remote_addr;將真實(shí)的客戶端 IP 地址添加到請(qǐng)求頭中。這里的$remote_addr是 Nginx 變量,代表客戶端的 IP 地址。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;添加一個(gè)X-Forwarded-For頭,其中包含原始客戶端的 IP 地址。$proxy_add_x_forwarded_for會(huì)追加客戶端的 IP 地址到已有的X-Forwarded-For頭信息中,如果存在的話。

請(qǐng)確保將http://backend_server替換為你的后端服務(wù)器的實(shí)際地址。

此外,確保你的應(yīng)用服務(wù)器或框架已配置為從這些頭信息中讀取真實(shí)的客戶端 IP 地址。不同的應(yīng)用和框架可能有不同的配置方法來支持這一點(diǎn)。

java代碼里怎么獲取真是的客戶端ip

在 Java 應(yīng)用中獲取真實(shí)的客戶端 IP 地址通常涉及到解析 HTTP 請(qǐng)求的頭信息。當(dāng)你的應(yīng)用部署在一個(gè)反向代理(如 Nginx)后面時(shí),代理通常會(huì)在每個(gè)請(qǐng)求中添加特定的頭信息(例如X-Real-IP或X-Forwarded-For),以傳遞原始客戶端的 IP 地址。

以下是一個(gè)基本的 Java 代碼示例,展示了如何在一個(gè)基于 Servlet 的應(yīng)用中獲取這些頭信息:


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();
        }
    }
}

在這個(gè)例子中,getClientIp方法首先檢查X-Forwarded-For頭信息。如果這個(gè)頭信息存在,方法會(huì)解析它并返回列表中的第一個(gè) IP 地址,因?yàn)閄-Forwarded-For可能包含由多個(gè)代理添加的多個(gè) IP 地址,其中第一個(gè)通常是原始客戶端的 IP 地址。如果X-Forwarded-For頭信息不存在,方法會(huì)回退到使用HttpServletRequest的getRemoteAddr()方法,這通常返回直接建立連接的客戶端(在這種情況下是代理服務(wù)器)的 IP 地址。

請(qǐng)注意,當(dāng)處理來自不受信任源的X-Forwarded-For頭信息時(shí),需要謹(jǐn)慎,因?yàn)樗赡鼙粣阂饪蛻舳藗卧?。確保你的應(yīng)用只在可信任的代理后面運(yùn)行,并且考慮驗(yàn)證頭信息中的 IP 地址。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8843

    瀏覽量

    84946
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    555

    瀏覽量

    24633
  • 客戶端
    +關(guān)注

    關(guān)注

    1

    文章

    287

    瀏覽量

    16625
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    141

    瀏覽量

    12143

原文標(biāo)題:Nginx的配置文件如何設(shè)置頭信息保留真實(shí)IP不丟失

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux上Nginx獲得最佳性能的8種方法

    NGINX 是一種流行的、免費(fèi)的開源 Web 服務(wù)器。默認(rèn)的 NGINX 配置足以讓 Web 服務(wù)器正常工作。 但是,如果您想充分利用 NGINX,則需要使用其
    發(fā)表于 01-16 09:51 ?519次閱讀

    【NanoPi NEO試用體驗(yàn)】之安裝配置Nginx環(huán)境WEB網(wǎng)站詳解

    /nginx/conf.d/在這里我們建立一個(gè)自己測(cè)試的配置文件nrjs.conf來進(jìn)行測(cè)試。root@nrjs-cn:~# vi /etc/nginx/conf.d/nrjs.conf配置文
    發(fā)表于 10-18 12:25

    主要學(xué)習(xí)下nginx的安裝配置

    ##setenforce 1 設(shè)置SELinux 成為enforcing模式修改配置文件(需要重啟機(jī)器):修改/etc/selinux/config 文件,將SELINUX=enforcing改為SELINUX
    發(fā)表于 10-19 14:12

    開卡配置文件設(shè)置工具,sss量產(chǎn)INI文件設(shè)置工具

    開卡配置文件設(shè)置工具,sss量產(chǎn)INI文件設(shè)置工具
    發(fā)表于 04-21 01:22 ?27次下載
    開卡<b class='flag-5'>配置文件</b><b class='flag-5'>設(shè)置</b>工具,sss量產(chǎn)INI<b class='flag-5'>文件</b><b class='flag-5'>設(shè)置</b>工具

    ICD配置文件的詳細(xì)介紹和配置內(nèi)容的詳細(xì)概述

    配置文件配置文件是利用SCL語言描述變電站設(shè)備對(duì)象模型后生成的文件,用于在不同廠商的配置工具之間交換配置信息。
    的頭像 發(fā)表于 06-02 11:16 ?1.8w次閱讀
    ICD<b class='flag-5'>配置文件</b>的詳細(xì)介紹和<b class='flag-5'>配置</b>內(nèi)容的詳細(xì)概述

    AD8283評(píng)估板設(shè)計(jì)和配置文件

    AD8283評(píng)估板設(shè)計(jì)和配置文件
    發(fā)表于 05-31 16:04 ?9次下載
    AD8283評(píng)估板設(shè)計(jì)和<b class='flag-5'>配置文件</b>

    labview讀寫配置文件實(shí)例分享

    labview讀寫配置文件實(shí)例分享
    發(fā)表于 11-01 16:05 ?45次下載

    SpringBoot配置文件application

    Map配置 YML配置文件: sys-num: mymap: "{'a':'aaa','b':'bbb'}" 方法內(nèi): public class learnMap { @Value
    的頭像 發(fā)表于 01-13 15:28 ?586次閱讀

    KT142C語音芯片配置文件總是不起作用?配置文件的問題集中歸納

    KT142C語音芯片配置文件總是不起作用?配置文件的問題集中歸納
    的頭像 發(fā)表于 10-20 15:04 ?487次閱讀
    KT142C語音芯片<b class='flag-5'>配置文件</b>總是不起作用?<b class='flag-5'>配置文件</b>的問題集中歸納

    ubuntu系統(tǒng)ip地址配置

    配置。但是這種方式只能臨時(shí)修改,當(dāng)服務(wù)器重啟后,配置信息會(huì)丟失。 直接修改配置文件。Ubuntu系統(tǒng)的配置文件在:/etc/network/
    的頭像 發(fā)表于 11-13 17:01 ?1.2w次閱讀

    linux修改網(wǎng)卡ip配置文件

    Linux是一種開源的操作系統(tǒng),因此,它給用戶提供了很高的自由度,可以根據(jù)個(gè)人需要進(jìn)行各種定制和配置。其中,修改網(wǎng)絡(luò)接口配置文件是常見的操作,可以通過修改網(wǎng)卡ip配置文件
    的頭像 發(fā)表于 11-17 10:51 ?1995次閱讀

    springboot的全局配置文件有幾種

    Spring Boot是一種快速開發(fā)框架,其通過提供配置文件來實(shí)現(xiàn)對(duì)應(yīng)用程序的配置。全局配置文件在Spring Boot中起著非常重要的作用,可以用于配置各種不同的屬性,包括數(shù)據(jù)庫(kù)連接
    的頭像 發(fā)表于 12-03 15:28 ?1433次閱讀

    php的配置文件是什么

    ,配置文件的名稱默認(rèn)為php.ini。該文件通常位于PHP安裝目錄下的conf文件夾中。當(dāng)PHP解釋器啟動(dòng)時(shí),會(huì)自動(dòng)加載php.ini文件,并根據(jù)其中的
    的頭像 發(fā)表于 12-04 15:55 ?1415次閱讀

    oracle配置文件類型關(guān)聯(lián)

    ,并介紹它們之間的關(guān)聯(lián)關(guān)系。 init.ora文件 init.ora文件是Oracle數(shù)據(jù)庫(kù)的主要配置文件之一。它包含了數(shù)據(jù)庫(kù)實(shí)例的各種參數(shù)設(shè)置,例如SGA大小、用戶連接數(shù)、日志模式等
    的頭像 發(fā)表于 12-06 10:17 ?424次閱讀

    鴻蒙開發(fā):【Stage模型應(yīng)用配置文件

    應(yīng)用配置文件中包含應(yīng)用配置信息、應(yīng)用組件信息、權(quán)限信息、開發(fā)者自定義信息等,這些信息在編譯構(gòu)建、
    的頭像 發(fā)表于 06-15 09:15 ?1411次閱讀
    鴻蒙開發(fā):【Stage模型應(yīng)用<b class='flag-5'>配置文件</b>】