--with-http_realip_module選項(後臺Nginx服務器記錄原始客戶端的IP地址 )

轉自:http://blog.itpub.net/27043155/viewspace-734234/html

 

    經過這個模塊容許咱們改變客戶端請求頭中客戶端IP地址值(例如,X-Real-IP 或 X-Forwarded-For)。前端

 

    若是Nginx工做在某些7層負載均衡代理後面,這個功能對於Nginx服務器很是有用,因爲客戶端請求的本地IP(就是客戶端的請求地址)在經過7層代理時被添加了客戶端IP地址頭,所以才使得後端的Nginx可以取得震懾客戶端的IP地址值。該模塊在默認安裝是並無安裝,所以若是要使用該模塊,那麼在編譯安裝是須要添加--with-http_realip_module選項。後端

 

    爲何使用該模塊,它的意義在於可以使得後臺服務器記錄原始客戶端的IP地址。服務器

 

配置示例

 

set_real_ip_from   192.168.1.0/24;負載均衡

set_real_ip_from   192.168.2.1;測試

real_ip_header     X-Real-IP;ui

   

 

指    令

 

   該模塊僅提供了兩條指令。spa

 

指令名稱:set_real_ip_from.net

功    能:經過該指令指定信任的地址,將會被替代爲精確的IP地址。從0.8.22版本後也可使用信任的Unix套接字。這裏設置的IP就是指前端Nginx 、Varnish或者 Squid 的 IP地址。代理

語    法: set_real_ip_from [the address|CIDR|"unix:"]

默 認 值: none

使用環境: http, server, location

 

指令名稱:real_ip_header

功    能:這個指令用於設置使用哪一個頭來替換IP地址。若是使用了X-Forwarded-For,那麼該模塊將會使用X-Forwarded-For頭中的最後一個IP地址來替換前端代理的IP地址。

語    法: real_ip_header [X-Real-IP|X-Forwarded-For]

默 認 值: real_ip_header X-Real-IP

使用環境: http, server, location

 

 

使用實例   

 

    在下面的實例中,咱們環境是這樣的有兩臺Nginx服務器,一臺是前端,另外一臺是後端,前端的Nginx被用做代理,然後臺的Nginx用於提供頁面訪問,還有一臺客戶端,IP地址以下:

  

    前端Nginx:192.168.7.10

    後端Nginx:192.168.1.15

    客戶端主機:218.239.201.36

 

 

    前端的Nginx配置是這樣的:

 

server {

  listen       80;

  server_name  www.xx.com;

 

location / {

    root   html;

    index  index.html index.htm;

charset       utf-8;

  }

 

location  /865 {

    proxy_pass   http://192.168.3.139:80/;

    proxy_set_header  X-Real-IP        $remote_addr;

    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

proxy_set_header  Host             $host;

    proxy_redirect                     off;

  }

 

……

}

 

   

   後端的Nginx配置以下:

   

server {

  listen       80;

  server_name  localhost;

 

  location / {

    root   /var/www/html;

    index  index.html index.htm;

  }

 

訪問測試

 

    若是咱們訪問http://www.xx.com/865,沒問題,能夠是正常訪問,訪問日誌以下:

 

    前端Nginx的日誌:

 

218.239.201.36 - - [30/Aug/2011:16:09:56 +0800] "GET /865/ HTTP/1.1" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1"

   

    後端Nginx的日誌:

 

192.168.7.10 - - [30/Aug/2011:16:09:56 +0800] "GET // HTTP/1.0" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1"

   

    咱們看到在後端Nginx的日誌中並無記錄原始客戶端的IP地址,而是記錄了前端Nginx的IP地址。

 

    若是將後臺Nginx服務器的配置修改成:

 

server {

  listen       80;

  server_name  localhost;

  set_real_ip_from   192.168.3.0/24;

 set_real_ip_from   100.100.0.0/16;

  real_ip_header     X-Real-IP;

 

  location / {

    root   html;

    index  index.html index.htm;

  }

 

    ……

}

 

   

而後咱們再次進行訪問測試:

 

    前端Nginx的日誌:

 

218.239.201.36 - - [30/Aug/2011:16:10:28 +0800 "GET /865/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1"

   

    後端Nginx的日誌:

 

218.239.201.36 - - [30/Aug/2011:16:10:28 +0800] "GET // HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1"

   

    可見,此次後臺記錄的是客戶端的IP地址。

相關文章
相關標籤/搜索