1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      利用Nginx反向代理怎么獲取真實IP

      本篇文章給大家分享的是有關(guān)利用Nginx 反向代理怎么獲取真實IP,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

      創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,濂溪企業(yè)網(wǎng)站建設,濂溪品牌網(wǎng)站建設,網(wǎng)站定制,濂溪網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,濂溪網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

      一、前言

      前文Nginx 解決WebApi跨域二次請求以及Vue單頁面問題 當中雖然解決了跨域問題帶來的二次請求,但也產(chǎn)生了一個新的問題,就是如果需要獲取用戶IP的時候,獲取的IP地址總是本機地址。

      二、原因

      由于Nginx反向代理后,在應用中取得的IP都是反向代理服務器的IP,取得的域名也是反向代理配置的Url的域名。

      三、解決方案

      解決該問題,需要在Nginx反向代理配置中添加一些配置信息,目的將客戶端的真實IP和域名傳遞到應用程序中。同時,也要修改獲取IP地址的方法。

      但是需要注意的是,通過Nginx反向代理后,如果訪問IP通過了幾層代理,可能取得的IP地址是這種格式:clientIP,proxy1,proxy2。

      如果需要將IP地址插入到數(shù)據(jù)庫的話,需要做防止注入。因此要對上述的IP地址的格式進行截取。

      3.1 Nginx 配置如下

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      server {

        listen  9461; # 監(jiān)聽端口號

        server_name localhost 192.168.88.22; # 訪問地址

        location / {

         root 項目路徑; # 例如:E:/Publish/xxx/;

         index index.html;

         

         # 此處用于處理 Vue、Angular、React 使用H5 的 History時 重寫的問題

         if (!-e $request_filename) {

          rewrite ^(.*) /index.html last;

          break;

         }

        }

        

        # 代理服務端接口

        location /api {

         proxy_pass http://localhost:9460/api;# 代理接口地址

         # Host配置以及域名傳遞

         proxy_set_header Host $host;

         proxy_set_header X-Real-IP $remote_addr;

         proxy_set_header REMOTE-HOST $remote_addr;

         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

       }

      3.2 C#代碼獲取真實IP方法

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      117

      118

      119

      120

      121

      122

      123

      124

      125

      126

      127

      128

      129

      130

      131

      132

      133

      134

      135

      136

      137

      138

      139

      140

      141

      142

      143

      144

      145

      146

      147

      148

      149

      150

      151

      152

      153

      154

      155

      156

      157

      158

      159

      160

      161

      162

      163

      164

      165

      166

      167

      168

      169

      170

      171

      172

      173

      #region Ip(客戶端IP地址)

      /// <summary>

      /// 客戶端IP地址

      /// summary>

      public static string Ip

      {

       get

       {

        var result = string.Empty;

        if (HttpContext.Current != null)

        {

         result = GetWebClientIp();

        }

        if (string.IsNullOrWhiteSpace(result))

        {

         result = GetLanIp();

        }

        return result;

       }

      }

      /// <summary>

      /// 獲取Web客戶端的IP

      /// summary>

      /// <returns>returns>

      private static string GetWebClientIp()

      {

       var ip = GetWebProxyRealIp() ?? GetWebRemoteIp();

       foreach (var hostAddress in DNS.GetHostAddresses(ip))

       {

        if (hostAddress.AddressFamily == AddressFamily.InterNetwork)

        {

         return hostAddress.ToString();

        }

       }

       return string.Empty;

      }

      /// <summary>

      /// 獲取Web遠程IP

      /// summary>

      /// <returns>returns>

      private static string GetWebRemoteIp()

      {

       try

       {

        return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ??

          HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] ?? "";

       }

       catch (Exception e)

       {

        return string.Empty;

       }

      }

      /// <summary>

      /// 獲取Web代理真實IP

      /// summary>

      /// <returns>returns>

      private static string GetWebProxyRealIp()

      {

       var request = HttpContext.Current.Request;

       string ip = request.Headers.Get("x-forwarded-for");

       if (string.IsNullOrEmpty(ip) || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase))

       {

        ip = request.Headers.Get("Proxy-Client-IP");

       }

       if (string.IsNullOrEmpty(ip) || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase))

       {

        ip = request.Headers.Get("WL-Proxy-Client-IP");

       }

       if (string.IsNullOrEmpty(ip) || string.Equals("unknown", ip, StringComparison.OrdinalIgnoreCase))

       {

        ip = request.UserHostAddress;

       }

       if (string.IsNullOrEmpty(ip))

       {

        return string.Empty;

       }

       // 可能存在如下格式:X-Forwarded-For: client, proxy1, proxy2

       if (ip.Contains(", "))

       {

        // 如果存在多個反向代理,獲得的IP是一個用逗號分隔的IP集合,取第一個

        // X-Forwarded-For: client 第一個

        string[] ips = ip.Split(new string[1] {", "}, StringSplitOptions.RemoveEmptyEntries);

        var i = 0;

        for (i = 0; i < ips.Length; i++)

        {

         if (ips[i] != "")

         {

          // 判斷是否為內(nèi)網(wǎng)IP

          if (false == IsInnerIp(ips[i]))

          {

           IPAddress realIp;

           if (IPAddress.TryParse(ips[i], out realIp) && ips[i].Split('.').Length == 4)

           {

            //合法IP

            return ips[i];

           }

           return "";

          }

         }

        }

        ip = ips[0];// 默認獲取第一個IP地址

       }

       return ip;

      }

      ///

      /// 判斷IP地址是否為內(nèi)網(wǎng)IP地址

      /// summary>

      /// <param name="ip">IP地址param>

      /// <returns>returns>

      private static bool IsInnerIp(string ip)

      {

       bool isInnerIp = false;

       ulong ipNum = Ip2Ulong(ip);

       /**

        * 私有IP

        * A類:10.0.0.0-10.255.255.255

        * B類:172.16.0.0-172.31.255.255

        * C類:192.168.0.0-192.168.255.255

        * 當然,還有127這個網(wǎng)段是環(huán)回地址

        */

       ulong aBegin = Ip2Ulong("10.0.0.0");

       ulong aEnd = Ip2Ulong("10.255.255.255");

       ulong bBegin = Ip2Ulong("172.16.0.0");

       ulong bEnd = Ip2Ulong("10.31.255.255");

       ulong cBegin = Ip2Ulong("192.168.0.0");

       ulong cEnd = Ip2Ulong("192.168.255.255");

       isInnerIp = IsInner(ipNum, aBegin, aEnd) || IsInner(ipNum, bBegin, bEnd) || IsInner(ipNum, cBegin, cEnd) ||

          ip.Equals("127.0.0.1");

       return isInnerIp;

      }

      /// <summary>

      /// 將IP地址轉(zhuǎn)換為Long型數(shù)字

      /// summary>

      /// <param name="ip">IP地址param>

      /// <returns>returns>

      private static ulong Ip2Ulong(string ip)

      {

       byte[] bytes = IPAddress.Parse(ip).GetAddressBytes();

       ulong ret = 0;

       foreach (var b in bytes)

       {

        ret <<= 8;

        ret |= b;

       }

       return ret;

      }

      /// <summary>

      /// 判斷用戶IP地址轉(zhuǎn)換為Long型后是否在內(nèi)網(wǎng)IP地址所在范圍

      /// summary>

      /// <param name="userIp">用戶IPparam>

      /// <param name="begin">開始范圍param>

      /// <param name="end">結(jié)束范圍param>

      /// <returns>returns>

      private static bool IsInner(ulong userIp, ulong begin, ulong end)

      {

       return (userIp >= begin) && (userIp <= end);

      }

      /// <summary>

      /// 獲取局域網(wǎng)IP

      /// summary>

      /// <returns>returns>

      private static string GetLanIp()

      {

       foreach (var hostAddress in Dns.GetHostAddresses(Dns.GetHostName()))

       {

        if (hostAddress.AddressFamily == AddressFamily.InterNetwork)

        {

         return hostAddress.ToString();

        }

       }

       return string.Empty;

      }

      #endregion

      以上就是利用Nginx 反向代理怎么獲取真實IP,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

      原文鏈接:http://www.cnblogs.com/jianxuanbing/p/8254284.html


      分享標題:利用Nginx反向代理怎么獲取真實IP
      文章地址:http://ef60e0e.cn/article/pisccg.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        灵川县| 习水县| 隆尧县| 德保县| 榆树市| 新巴尔虎右旗| 宝鸡市| 麻江县| 龙井市| 吉木萨尔县| 酒泉市| 峡江县| 北海市| 北碚区| 深泽县| 嘉义县| 滦南县| 望都县| 榆树市| 务川| 涪陵区| 丁青县| 武清区| 甘孜县| 韶山市| 瓦房店市| 青田县| 博野县| 理塘县| 墨江| 迁西县| 乡宁县| 穆棱市| 旬邑县| 榆中县| 阳曲县| 靖江市| 博白县| 洛扎县| 久治县| 英德市|