Nginx 最全小白實戰教程之二 (代理篇)

1、相關概念

代理通常分爲正向代理和反向代理,如下是他們的定義(如下內容引自網上)php

正向代理,也就是傳說中的代理,他的工做原理就像一個跳板,簡單的說,我是一個用戶,我訪問不了某網站,可是我能訪問一個代理服務器,這個代理服務器呢,他能訪問那個我不能訪問的網站,因而我先連上代理服務器,告訴他我須要那個沒法訪問網站的內容,代理服務器去取回來,而後返回給我。從網站的角度,只在代理服務器來取內容的時候有一次記錄,有時候並不知道是用戶的請求,也隱藏了用戶的資料,這取決於代理告不告訴網站。
結論就是,正向代理 是一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端必需要進行一些特別的設置才能使用正向代理。

反向代理 例如用戶訪問 http://www.test.com/readme ,但www.test.com上並不存在readme頁面,他是偷偷從另一臺服務器上取回來,而後做爲本身的內容返回用戶,但用戶並不知情。這裏所提到的 www.test.com 這個域名對應的服務器就設置了反向代理功能。
結論就是,反向代理正好相反,對於客戶端而言它就像是原始服務器,而且客戶端不須要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將得到的內容返回給客戶端,就像這些內容本來就是它本身的同樣。css

二者區別就是:html

  1. 用途上講,正向代理的典型用途是爲在防火牆內的局域網客戶端提供訪問Internet的途徑。正向代理還可使用緩衝特性減小網絡使用率。反向代理的典型用途是將防火牆後面的服務器提供給Internet用戶訪問。反向代理還能夠爲後端的多臺服務器提供負載平衡,或爲後端較慢的服務器提供緩衝服務。另外,反向代理還能夠啓用高級URL策略和管理技術,從而使處於不一樣web服務器系統的web頁面同時存在於同一個URL空間下。
  2. 安全性講,正向代理容許客戶端經過它訪問任意網站而且隱藏客戶端自身,所以你必須採起安全措施以確保僅爲通過受權的客戶端提供服務。反向代理對外都是透明的,訪問者並不知道本身訪問的是一個代理。

2、Nginx代理

1.簡單的代理

這樣安裝的配置文件位置在/etc/nginx/conf.d。其中有一個默認的配置文件default.conf,內容以下:nginx

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

這是一個比較全面的配置文件。且該目錄下全部的.conf文件都會加載的,只要配置不衝突,全部的配置都會生效。web

接下來在此目錄新建guo.conf,將此域名訪問代理個人我的博客 www.guoxiaozhong.cn。
具體內容以下:後端

server {
    listen       80;
    server_name  你的域名或者IP;  
    location / {
        proxy_pass http://www.guoxiaozhong.cn;
    }
}

從新加載配置文件;安全

[root@localhost conf.d]# service nginx reload
Reloading nginx:                                           [  OK  ]
[root@localhost conf.d]# service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

訪問效果以下:
服務器

目前的代理拓撲圖爲:
網絡

2.指令說明

listen:要監聽的端口,咱們通常都是監聽80端口,其餘端口都封死,防火牆只剩80
server_name:服務器的IP或者綁定的域名
location /:這個是路徑的意思,/這個是表明訪問的路徑,/表明根目錄網站

proxy_pass指令:

語法:proxyz_pass URL
默認值:no
使用字段:location,location中的if字段

這個指令設置被代理服務器的地址和被映射的URI,地址可使用主機名或IP加端口號的形式,例如:

proxy_pass http://www.guoxiaozhong.cn;

注意:必定要寫http://

3.分析日誌

博客服務器的日誌

www.guoxiaozhong 博客服務器的日誌

Nginx服務器的IP - - [03/Jan/2017:10:49:19 +0800] "GET /2016/11/29/office-2016-for-mac-de-wordmo-ban-wen-jian-jia-wei-zhi/ HTTP/1.0" 200 4112 "設置的代理域名" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:10:49:20 +0800] "GET /content/images/2016/10/logo.jpeg HTTP/1.0" 206 1 "設置的代理域名" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:10:49:20 +0800] "GET /content/images/2016/10/logo.jpeg HTTP/1.0" 206 1778 "設置的代理域名" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:10:49:21 +0800] "GET /assets/images/favicon.png HTTP/1.0" 200 2562 "設置的代理域名" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:11:01:53 +0800] "GET / HTTP/1.0" 200 3951 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:11:01:53 +0800] "GET /assets/css/vno.css?v=6d7f73f25e HTTP/1.0" 200 4187 "設置的代理域名" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:11:01:54 +0800] "GET /assets/css/tomorrow.css?v=6d7f73f25e HTTP/1.0" 200 610 "http://xtrader.spartajet.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:11:01:54 +0800] "GET /assets/css/animate.css HTTP/1.0" 200 5066 "設置的代理域名" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:11:01:55 +0800] "GET /assets/js/main.js?v=6d7f73f25e HTTP/1.0" 200 662 "設置的代理域名" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"
Nginx服務器的IP - - [03/Jan/2017:11:01:55 +0800] "GET /assets/js/highlight.pack.js?v=6d7f73f25e HTTP/1.0" 200 15760 "http://xtrader.spartajet.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"

能夠看到,個人博客服務器上的日誌只顯示Nginx的IP和Nginx設置的域名,沒有客戶端的信息。

Nginx代理服務器的日誌
客戶端IP - - [03/Jan/2017:11:01:55 +0800] "GET /assets/js/highlight.pack.js?v=6d7f73f25e HTTP/1.1" 200 15788 "設置的代理域名" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"
客戶端IP - - [03/Jan/2017:11:01:58 +0800] "GET /content/images/2016/10/logo.jpeg HTTP/1.1" 200 42960 "設置的代理域名" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"
客戶端IP - - [03/Jan/2017:11:02:13 +0800] "GET /content/images/2016/10/e69ef0aa357bd34022b2824daf3b5a33_r-1.jpg HTTP/1.1" 200 176528 "設置的代理域名" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"
客戶端IP - - [03/Jan/2017:11:02:16 +0800] "GET /assets/images/favicon.png HTTP/1.1" 200 2562 "設置的代理域名" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36" "-"

代理服務器上的日誌顯示客戶端的IP。

4.配置文件顯示客戶端IP

配置guo.conf文件:

server {
    listen       80;
    server_name  博客代理域名;

    location / {
        proxy_pass http://www.guoxiaozhong.cn;
        proxy_set_header            X-real-ip $remote_addr;
    }
}

主要是加上;

proxy_set_header            X-real-ip $remote_addr;
相關文章
相關標籤/搜索