Nginx 之六: Nginx服務器的正向及反向代理功能

一:Nginx做爲正向代理服務器:php

1.正向代理:代理(proxy)服務也能夠稱爲是正向代理,指的是將服務器部署在公司的網關,代理公司內部員工上外網的請求,能夠起到必定的安全做用和管理限制做用,正向代理不支持從外網向內網訪問資源,通常不多用,經本人測試,效果也很差,有不少頁面打不開,在百度搜索的頁面也沒法返回。html

server {
    server_name localhost;
    resolver 202.106.0.20 8.8.8.8; #只能有一個resolve,可是能夠用空格隔開,繼續寫下一個
    resolver_timeout 5s;
    listen  8080;
    location / {
        proxy_pass   $scheme://$http_host/$request_uri;
        proxy_set_header Host $http_host;

        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0;

        proxy_connect_timeout 30;

        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
    }
}

2.錯誤碼502 :Nginx做爲代理服務器向後端轉發請求過程當中超時。nginx

 

二:Nginx做爲反向代理服務器:web

反向代理:反向代理也叫reverse proxy,指的是代理外網用戶的請求到內部的指定web服務器,並將數據返回給用戶的一種方式,這是用的比較多的一種方式。後端

反向代理的經常使用指令:安全

1.proxy_pass:用來設置將請求轉發給的後端服務器的主機,能夠是主機名、IP地址:端口的方式,也能夠代理到經過upstream設置的主機組,以下:服務器

upstream webserver {
        #ip_hash;  
        server  192.168.0.201 weight=1 max_fails=2  fail_timeout=2;
        server  192.168.0.202 weight=1 max_fails=2  fail_timeout=2;
        server 127.0.0.1:9008 backup;
}

server {
        server_name  hfnginx.chinacloudapp.cn;
        #access_log  logs/host.access.log  main;
        location / {  #靜態網頁在本機
            root   html;
            index  index.html;
        }
        location ~* ^/form {  #指定目錄在後端服務器
            proxy_pass  http://webserver; #此處http://webserver後面不能加/,若是加了會提示語法錯誤
            proxy_set_header X-Real-IP $remote_addr;
        }
}

 2:proxy_hide_header:用於nginx服務器做爲反向代理的時候,在返回給客戶端http響應的時候,隱藏後端服務版本(如php版本)的信息,能夠設置在http/server或location塊,以下:網絡

Nginx會將上游服務器的響應轉發給客戶端,但默認不會轉發如下HTTP頭部字段:Date、Server、X-Pad和X-Accel-*。使用proxy_hide_header後能夠任意地指定哪些HTTP頭部字段不能被轉發。例如:session

proxy_hide_header Cache-Control;  
proxy_hide_header MicrosoftOfficeWebServer; 

注:若是是nginx直接做爲web服務器,要隱藏版本信息的話,使用fastcgi_hide_header:app

3:proxy_pass_header:與proxy_hide_header功能相反,proxy_pass_header會將原來禁止轉發的header設置爲容許轉發,能夠設置在http/server或location塊例如:

proxy_pass_header X-Accel-Redirect; 

4:proxy_pass_request_body:是否向後端服務器發送HTTP包體部分,能夠設置在http/server或location塊,以下:

proxy_pass_request_body on|off;  #默認爲on

5:proxy_pass_request_headers:是否將客戶端的請求頭部轉發給後端服務器,能夠設置在http/server或location塊,以下:

proxy_pass_request_headers on | off; #默認爲on

6:proxy_set_header:能夠更改或添加客戶端的請求頭部信息內容,並轉發以後端服務器,好比在後端服務器想要獲取客戶端的真實IP的時候,就要更改每個報文的頭部,以下:

proxy_set_header HOST  $remote_addr; #添加HOST到報文頭部,其值爲客戶端的公網IP地址

7:proxy_set_body:更改nginx服務器接收到的客戶端請求的請求內容,而後將修改後的請求轉發給後端的服務器,用法以下:

proxy_set_body value;  #其中value爲要修改的目標內容,能夠是變量、文本或者變量的組合。

8:proxy_ip:Nginx 0.8.22版本及以上支持此功能,用於Nginx配置了多個基於域名或IP的主機的狀況下,能夠指定代理鏈接到特定的主機處理,就是強制將客戶端請求綁定到指定的IP地址:

proxy_bind x.x.x.x; 

9:proxy_connect_timeout:配置nginx服務器與後端服務器嘗試創建鏈接的超時時間,默認爲60秒,用法以下:

proxy_connect_timeout 10s; #10s爲自定義nginx與後端服務器創建鏈接的超時時間

10:proxy_read_time:配置nginx服務器向後端服務器或服務器組發起read請求後,等待的超時時間:

proxy_read_time 10s; #默認爲60秒

11:proxy_send_time; 配置nginx項後端服務器或服務器組發起write請求後,等待的超時時間:

proxy_send_time 10s; #默認爲60s

12:proxy_http_version:用於設置nginx提供代理服務的HTTP協議的版本:

proxy_http_version 1.0|1.1

13:proxy_method:設置nginx服務器請求後端服務器時使用的方法,通常爲POST或者GET,客戶端的請求方法將被忽略:

proxy_method GET|PUT;

14:proxy_ignore_client_abort:設置在客戶端網絡中斷請求時,nginx服務器是否中斷對被代理服務器的請求:

proxy_ignore_client_abort off|on; #默認爲off,當客戶端網絡中斷請求時,nginx服務器中斷其對後端服務器的請求。

15:proxy_ignore_headers:設置nginx不處理後端服務器返回的數據中包含某些指定字段的報文,能夠指定的有:」X-Accel-Redirect」, 「X-Accel-Expires」, 「Expires」或」Cache-Control」:

proxy_ignore_headers Expires;

16:proxy_redirect:修改後端服務器返回的響應頭部中的location貨refresh,與proxy_pass配合使用:

 

17:proxy_intercept_errors:設置nginx服務器返回客戶端的錯誤狀態,當後端服務器返回大於等於400的錯誤碼的是,若是本功能是打開的,則nginx服務器返回自定義的錯誤頁面(使用error page定義的),若是沒有開啓就將後端服務器返回的HTTP狀態直接返回給客戶端,默認爲關閉:

proxy_intercept_errors on | off;

18:proxy_headers_hash_max_size:設置nginx保存HTTP報文頭的hash表的上限,默認爲512字節:

proxy_headers_hash_bucket_size 512;#申請nginx保存HTTP報文頭的hash表的空間大小,默認爲64個字節
proxy_headers_hash_max_size 512; #上限
server_names_hash_max_szie 512; #設置服務器名稱的上限
server_namse_hash_bucket_size 512; #申請空間大小

19:proxy_headers_hash_bucket_size:#申請nginx保存HTTP報文頭的hash表的空間大小,默認爲64個字節

proxy_headers_hash_bucket_size 512; #默認爲64字節

20:proxy_net_upstream:當使用了upstream的時候,能夠定義在發生了特定的狀況下將請求依次交給下一個組內的服務器處理,狀態包括:

    proxy_next_upstream  http_404 http_502;  //讓404報錯進入max_fails計數 
        upstream online { 
        sticky; 
        server 172.28.70.161:8080 max_fails=0 fail_timeout=3s ; 
        server 172.28.70.163:8080  max_fails=0 fail_timeout=3s ; 
     
        check interval=3000 rise=2 fall=1 timeout=1000 type=http; 
        check_http_send "GET / HTTP/1.0\r\n\r\n"; 
        check_http_expect_alive http_2xx http_3xx; 
        } 
 
        upstream backup { 
        server 172.28.22.29:7777  max_fails=0 fail_timeout=3s; 
        } 

21:proxy_ssl_session_reuse:配置是否基於SSL協議與後端服務器創建鏈接,以下:

proxy_ssl_session_reuse on | off;
相關文章
相關標籤/搜索