国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

nginx配置獲取客戶端的真實ip

這篇具有很好參考價值的文章主要介紹了nginx配置獲取客戶端的真實ip。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

場景描述:

訪問路徑: A機器 - > B機器的 ->C虛擬機 :

A機器為客戶端用戶,本地地址為 192.168.0.110

B機器為服務端反向代理服務器 本地地址為192.168.0.128 –>(192.168.56.1)

C機器為B主機安裝的linux虛擬機,并安裝了nginx ,本地ip為**(192.168.56.10)**

從側面反映了反向代理的好處,直接從A是無法訪問C的,但是在B中做了反向代理 ,就能訪問了,保護了服務端的地址。而無法將C的ip暴露給客戶端A

注意:在B和C直接由于使用了虛擬機,虛擬機的網(wǎng)關的ip為192.168.56.1 所以 在C端取到的上一層ip為192.168.56.1

目的: 在C機器取到 A的ip地址,并輸出日志客戶端的真實ip為192.168.0.110

B機器的nginx 配置:(首層代理)

 location /bb/ {

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;

            proxy_pass http://192.168.56.10/cc/;
       }

在B中的nginx 中 給請求設置了 header 。 X-Real-IP 和 X-Forwarded-For

X-Real-IP 取得值是 r e m o t e a d d r ,而 remote_addr ,而 remotea?ddr,而remote_addr為與主機B直連客戶端A 的ip地址。

X-Forwarded-For 取得值是個用逗號分隔得多個值,主要包括客戶端X-Forwarded-For的值 與 $remote_addr 的值,兩部分用逗號分隔。

所以此時 X-Real-IP 為 192.168.0.110, X-Forwarded-For 為 ,192.168.0.110 此時客戶端并未主動傳 X-Forwarded-For 頭。

  • proxy_set_header X-Real-IP $remote_addr; 這句的作用是將客戶端的IP地址賦值給X-Real-IP請求頭,$remote_addr變量表示與nginx服務器直接連接的客戶端或代理服務器的IP地址。這句一般用于第一層代理服務器,以便后續(xù)的代理服務器能夠獲取到客戶端的IP地址。
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 這句的作用是將客戶端請求頭中的X-Forwarded-For和 r e m o t e a d d r 兩部分用逗號分隔后賦值給 X ? F o r w a r d e d ? F o r 請求頭, remote_addr兩部分用逗號分隔后賦值給X-Forwarded-For請求頭, remotea?ddr兩部分用逗號分隔后賦值給X?Forwarded?For請求頭,proxy_add_x_forwarded_for變量表示客戶端請求頭中的X-Forwarded-For和$remote_addr兩部分。這句一般用于非首層代理服務器,以便將客戶端和所有經過的代理服務器的IP地址都記錄下來。

C中nginx 輸出的log-format

   log_format main '$http_x_forwarded_for|$realip_remote_addr|$http_x_real_ip|$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    '$upstream_addr $request_time $upstream_response_time ';

C中nginx的配置

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    proxy_set_header        X-Real-IP       $remote_addr; 
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
 #   real_ip_header X-Forwarded-For;
 #   set_real_ip_from 192.168.56.1;
 #   real_ip_recursive on;
}

在這一層中 X-Real-IP 取到的是上層代理的地址,也就是192.168.56.1

X-Forwarded-For 是上兩層的地址?192.168.0.110,192.168.56.1 (這一層其實就一個值還是192.168.0.110,在下一層才是這兩個值,這里有些歧義,原因是這一層接收到值之后 還沒有拼接本層獲取上一層的地址。這一層只是待發(fā)送狀態(tài)。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for 這個是將頭拼接后發(fā)給下一層的。所以在下一層取到地址才是 192.168.0.110,192.168.56.1

所以在c中的輸出日志中打印的值為

192.168.0.110|192.168.56.1|192.168.0.110|192.168.56.1 - - [15/Sep/2023:02:32:43 +0000] "GET /cc/ HTTP/1.0" 200 15539 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" "192.168.0.110" 123.121.155.167:16002 0.326 0.326

如果我使用nginx自帶的模塊 realip 再固定一層,重點觀察$remote_addr的值

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    real_ip_header X-Forwarded-For;
    set_real_ip_from 192.168.56.1;
    real_ip_recursive on;
}

如果我將配置改成這樣,我們再來觀察一下日志輸出

192.168.0.110|192.168.56.1|192.168.0.110|192.168.0.110 - - [15/Sep/2023:02:46:38 +0000] "GET /cc/ HTTP/1.0" 200 15539 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" "192.168.0.110" 123.121.155.167:16002 0.796 0.796

上述描述只是兩層代理,為了測試出 X-Forwarded-For 的值,我們設置了3層代理。

A -》B-》c-》d

A:192.168.0.110 B:192.168.0.104 C:192.168.0.128(192.168.56.1) D:192.168.56.10

B nginx 配置:

location /testIp/ {
            # set $current-X-Fowarded-for X-Forwarded-For 
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://192.168.0.128:6666/testIp/;
       }

C nginx配置:

 location /testIp/ {
            # set $current-X-Fowarded-for X-Forwarded-For 
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.56.10/testIp/;
       }

D nginx 配置:

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   # real_ip_header X-Forwarded-For;
   #  set_real_ip_from 192.168.56.1;
   #  real_ip_recursive on;
   .....
        
        localtion /testIp/ {
            porxy_pass  http://666.com
         }
   }

D 中nginx的日志

192.168.0.110, 192.168.0.104|192.168.56.1|192.168.0.104|192.168.56.1 - - [15/Sep/2023:03:26:30 +0000] "GET /testIp/ HTTP/1.0" 200 15539 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" "192.168.0.110, 192.168.0.104" 192.168.0.104:82 0.299 0.299

192.168.0.110, 192.168.0.104 是輸出的X-forwarded-for 的值。

   real_ip_header X-Forwarded-For;
   set_real_ip_from 192.168.56.1;
   real_ip_recursive on;

這三個值一般是加到最后的D中,為了設置授信ip為上層的remot_addr的值,

  • set_real_ip_from:用于設置信任的 IP,即請求頭中的 IP 中 nginx 認為可信的 IP。一般是前幾層代理的 IP。
  • real_ip_header:用于告訴 nginx 從哪個請求頭字段中獲取客戶端真實的 IP。一般是 X-Forwarded-For 或 X-Real-IP。
  • real_ip_recursive:用于控制 nginx 如何從請求頭字段中獲取多個 IP 中的一個。當值為 on 時,nginx 會從右往左排除信任的 IP,取最后一個非信任的 IP 作為客戶端真實的 IP。

例如,如果您想從 X-Forwarded-For 字段中獲取客戶端真實的 IP,并且信任 192.168.56.1 這個 IP,您可以在 location 中添加以下代碼:

location /test {
    proxy_pass http://backend;
    real_ip_header X-Forwarded-For;
    set_real_ip_from 192.168.56.1;
    real_ip_recursive on;
}

這樣,nginx 就會把 X-Forwarded-For 字段中最后一個非 192.168.56.1 的 IP 賦值給 $remote_addr 變量,作為客戶端真實的 IP。

對于nginx 獲取客戶端真實ip做個總結
  • 對于首層代理服務器,使用proxy_set_header X-Forwarded-For $remote_addr;來將客戶端IP賦值給X-Forwarded-For請求頭
  • 對于非首層代理服務器,使用proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;來將客戶端請求頭中的X-Forwarded-For和$remote_addr兩部分用逗號分隔后賦值給X-Forwarded-For請求頭
    ursive on;
    }
    這樣,nginx 就會把 X-Forwarded-For 字段中最后一個非 192.168.56.1 的 IP 賦值給 $remote_addr 變量,作為客戶端真實的 IP。

對于nginx 獲取客戶端真實ip做個總結

對于首層代理服務器,使用proxy_set_header X-Forwarded-For $remote_addr;來將客戶端IP賦值給X-Forwarded-For請求頭文章來源地址http://www.zghlxwxcb.cn/news/detail-742640.html

  • 對于非首層代理服務器,使用proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;來將客戶端請求頭中的X-Forwarded-For和$remote_addr兩部分用逗號分隔后賦值給X-Forwarded-For請求頭
  • 如果有多層代理服務器,可以使用nginx的realip模塊來從XFF中拋棄指定的可信IP,從而獲取用戶真實IP

到了這里,關于nginx配置獲取客戶端的真實ip的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • nginx獲取客戶端真實ip

    在nginx中獲取客戶端真實IP的方法有多種,以下是其中兩種常用的方法: 使用nginx的access_log模塊記錄請求日志,并在日志中包含客戶端的真實IP信息。例如: 在上述配置中,通過使用http_x_forwarded_for字段來獲取客戶端的真實IP地址。如果該字段不存在或不合法,則使用remote_ad

    2024年02月16日
    瀏覽(47)
  • Nginx(二十) 獲取真實客戶端IP

    ????????客戶端在訪問互聯(lián)網(wǎng)應用服務器時,與真實的應用服務器之間會因為有多層反向代理,而導致真實應用服務器獲取的僅是最近一層的反向代理服務器 IP。為使 Nginx 后端的上游服務器可以獲得真實客戶端 IP,Nginx 提供了 ngx_http_realip_module 模塊用以實現(xiàn)真實客戶端

    2024年01月16日
    瀏覽(30)
  • nginx如何獲取真實客戶端ip

    nginx作為反向代理服務器,即代理我們的服務端,下面介紹下如何配置nginx獲取真實的客戶端ip 1、配置nginx.con 2、在java程序中可以通過如下方式獲?。?這樣就可以打印出真實ip了!即request.getHeader(\\\"X-Real-IP\\\")的值 引用: 查看端口占用及釋放所占用的端口_查詢谷歌瀏覽器的端口

    2024年02月11日
    瀏覽(14)
  • Nginx代理后獲取客戶端真實IP地址

    Nginx代理后獲取客戶端真實IP地址

    在項目實際應用中,我們可能會需要獲取到用戶也就是客戶端的真實IP地址,比如記錄系統(tǒng)操作日志等情況。 通常情況下我們可以使用以下方式來獲取IP地址 但是當我們使用Nginx反向代理項目地址后,使用以上方法只能獲取到Nginx服務器的IP地址,并不是客戶端的IP地址。 解決

    2023年04月11日
    瀏覽(39)
  • Docker部署Nginx,無法獲取客戶端真實ip地址

    Docker部署Nginx,無法獲取客戶端真實ip地址

    在部署docker版本nginx進行請求轉發(fā),意外發(fā)現(xiàn)nginx打印日志中的客戶端ip并非為客戶端的真實ip(221.237.xxx.xxx),而是docker虛擬網(wǎng)卡的ip(172.17.0.1) 開始猜測是nginx配置問題,對比其他環(huán)境,發(fā)現(xiàn)配置相同,但其他環(huán)境未出現(xiàn)此情況 通過查詢資料,推測是docker網(wǎng)橋和linux防火墻存在

    2023年04月21日
    瀏覽(23)
  • Nginx+netty實現(xiàn)tcp負載均衡,獲取客戶端真實ip

    在nginx.conf文件中,events,http同級添加配置 啟動nginx服務 啟動2個服務netty服務設置nginx中8888,8889端口。 使用tcp工具連接并發(fā)送數(shù)據(jù)測試 參考博客 參考鏈接1 參考鏈接2

    2024年02月06日
    瀏覽(32)
  • nginx配置獲取真實ip

    要想在應用中獲取到真實IP,取決于各個轉發(fā)節(jié)點的傳遞配置, 第一、要確定客戶端使用哪個請求頭傳遞IP地址 第二、第一轉發(fā)點, proxy_set_header field value value是變量值,來源于請求方 field是變量名,是要發(fā)給下一站的變量 注意這個順序,set設置要發(fā)往下一站的變量,緊接著

    2024年02月11日
    瀏覽(21)
  • k8s ingress 添加獲取客戶端真實ip配置

    k8s ingress 添加獲取客戶端真實ip配置

    本環(huán)境是一個互聯(lián)網(wǎng)ip服務器上的nginx轉發(fā)k8s集群內的ingress域名,實現(xiàn)所有服務通過域名訪問, 默認配置下,在pod內獲取客戶端請求地址信息時,獲取的是pod的ip和節(jié)點ip。要獲取客戶端ip,需要添加nginx配置中 除此之外還需要修改configmap ingress-nginx-controller ,增加如下配置

    2024年02月02日
    瀏覽(43)
  • 第13關 解決K8s中Ingress Nginx控制器無法獲取真實客戶端IP的問題

    第13關 解決K8s中Ingress Nginx控制器無法獲取真實客戶端IP的問題

    ------ 課程視頻同步分享在今日頭條和B站 大家好,我是博哥愛運維。 這節(jié)課帶大家探索并分享最全面的解決在使用Kubernetes(K8s)和Ingress-Nginx-Controller中無法獲取客戶端真實IP問題的視頻教程,幫助你快速理解并解決這一問題。 如果我們按下面網(wǎng)絡架構圖,暴露我們服務到公

    2024年02月03日
    瀏覽(22)
  • centos 安裝 nginx配置ssl 和 獲取用戶真實ip

    安裝所需環(huán)境 nginx 是用 C語言開發(fā)的,建議在Linux上使用,如果是windows用戶,也可以使用windows版本。 一. gcc 安裝 安裝 nginx 需要先將官網(wǎng)下載的源碼進行編譯,編譯依賴 gcc 環(huán)境,如果有 gcc 環(huán)境,則不需要安裝,命令: yum install gcc-c++ 二. PCRE pcre-devel 安裝 PCRE(Perl Compatible

    2024年02月13日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包