1. 程式人生 > >LNMP架構十九(Nginx代理)

LNMP架構十九(Nginx代理)

十九、Nginx代理

1、什麼是代理伺服器

     代理伺服器,客戶機在傳送請求時,不會直接傳送給目的主機,而是先發送給代理伺服器,代理服務接受客戶機請求之後,再向主機發出,並接收目的主機返回的資料,存放在代理伺服器的快取中,再發送給客戶機。

2、為什麼要使用代理伺服器

(1)提高訪問速度

    由於目標主機返回的資料會存放在代理伺服器的快取中,因此下一次客戶再訪問相同的站點資料時,會直接從代理伺服器的快取中讀取,起到了快取的作用,尤其對於熱門站點能明顯提高請求速度。

(2)防火牆作用

    由於所有的客戶機請求都必須通過代理伺服器訪問遠端站點,因此可在代理伺服器上設限,過濾某些不安全資訊。

(3)通過代理伺服器訪問不能訪問的目標站點

    網際網路上有許多開發的代理伺服器,客戶機在訪問受限時,可通過不受限的代理伺服器訪問目標站點,通俗說,我們使用的翻牆瀏覽器就是利用了代理伺服器,雖然不能出國,但也可直接訪問外網。

3、什麼是正向代理?什麼是反向代理?

正向代理,架設在客戶機與目標主機之間,只用於代理內部網路對Internet的連線請求,客戶機必須指定代理伺服器,並將本來要直接傳送到Web伺服器上的http請求傳送到代理伺服器中。

反向代理伺服器架設在伺服器端,通過緩衝經常被請求的頁面來緩解伺服器的工作量,將客戶機請求轉發給內部網路上的目標伺服器;並將從伺服器上得到的結果返回給Internet上請求連線的客戶端,此時代理伺服器與目標主機一起對外表現為一個伺服器。現在許多大型web網站都用到反向代理。除了可以防止外網對內網伺服器的惡性攻擊、快取以減少伺服器的壓力和訪問安全控制之外,還可以進行負載均衡,將使用者請求分配給多個伺服器。

4、正向代理配置

1)正向代理:

    server端:

應用在nginx的server端,不要server_name,需要新增一個resolver。

vi    /etc/nginx/conf.d/zproxy.conf

server {
    # 配置DNS解析IP地址,比如 Google Public DNS,以及超時時間(5秒)
    resolver 8.8.8.8;    # 必需
    resolver_timeout 5s;

    # 監聽埠
    listen 8081;

    access_log  /usr/local/nginx/logs/proxy.access.log;
    error_log   /usr/local/nginx/proxy.error.log;

    location / {        # 通用匹配,任何請求都匹配的到;
        # nginx固定語法,直接轉發請求,配置正向代理引數,實現連同訪問協議一併轉發;
        proxy_pass $scheme://$host$request_uri;
        # 解決如果URL中帶"."後Nginx 503錯誤
        proxy_set_header Host $http_host;

        # 配置快取大小
        proxy_buffers 256 4k;
        # 關閉磁碟快取讀寫減少I/O
        proxy_max_temp_file_size 0;
         # 代理連線超時時間
        proxy_connect_timeout 30;

        # 配置代理伺服器HTTP狀態快取時間
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
    }
}

測試

 

5、反向代理配置

vi    /etc/nginx/conf.d/fproxy.conf

server {
listen       80;
server_name  localhost;      #實際情況可以寫域名
access_log  logs/nginx.access.log main;
location / {
root   /usr/share/nginx/html;          #訪問根路徑
index  index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;      #使用者的真實ip就被放在X-real-ip這個變數裡,然後在web端可以獲取
proxy_set_header  Host $host;     

#如果客戶端發過來的請求的header中有’HOST’這個欄位時, $http_host和$host都是原始的’HOST’欄位 
#比如請求的時候HOST的值是www.csdn.net 那麼反代後還是www.csdn.net 。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   #在nginx 作為代理伺服器時,設定的IP列表,會把經過的機器ip,代理機器ip都記錄下來

proxy_pass http://x.x.x.x:port   #代理的後端ip
}

}

具體的nginx proxy_set_header解釋可以檢視  https://blog.csdn.net/Michaelwubo/article/details/81203343

測試,訪問代理伺服器的80埠,跳轉至後端。