官术网_书友最值得收藏!

2.7 反向代理

反向代理(Reverse Proxy)是現今網絡中一種非常重要的技術,它位于客戶端和真正的服務器(即所謂的后端)之間,接受客戶端的請求并轉發給后端,然后把后端的處理結果返回給客戶端。從客戶端的角度來看,訪問反向代理和真正的后端服務器兩者沒有任何區別。

反向代理的網絡結構如圖2-2所示:

圖2-2 反向代理的網絡結構

由于反向代理在客戶端和服務器之間加入了中間層,可以執行復雜的邏輯,所以它有很多的用途,例如:

    ■   負載均衡    :最常用的功能,均衡多個后端服務器的訪問請求,實現服務集群化;
    ■   安全防護    :使用WAF等工具防御網絡入侵,保護后端服務器;
    ■   內容緩存    :緩存上下行數據,減輕后端服務器的壓力;
    ■   數據加密    :加密驗證外部通信過程,而內部服務器之間沒有加密成本。

Nginx提供了優秀的反向代理功能,不僅支持HTTP反向代理,也支持TCP/UDP反向代理,非常適合用在網絡的核心位置擔當“中流砥柱”的重任。著名的LVS(Linux Virtual Server)也是一種反向代理,但與Nginx不同的是它集成在Linux內核里,工作在網絡四層以下,而且只能用于負載均衡。

2.7.1 上游集群

upstream塊定義了在反向代理時需要訪問的后端服務器集群和負載均衡策略(在Nginx里術語“upstream”代替了“backend”),可以在http{}或stream{}里配置。

upstream塊的基本形式是:

upstream backend {                           #upstream需要有一個名字
    least_conn; #負載均衡策略
    server 127.0.0.1:80; #一臺上游服務器
    server ... weight=3; #可以指定多臺上游服務器
    server ... backup; #備份用的上游服務器
    keepalive 32; #使用連接池,長連接復用
}

upstream塊的配置比較簡單,主要使用server指令列出上游的服務器域名或IP地址,還可以用weight/max_fails/down/backup等附加參數來進一步描述這些服務器的狀態。least_conn指令確定了集群里服務器的負載均衡策略,類似的還有hash、ip_hash等。如果不給出明確的策略,Nginx就使用簡單的加權輪詢(round robin)。

2.7.2 代理轉發

在使用upstream配置了上游集群后,我們需要在location(http)或server stream)里用“proxy_pass”等指令把客戶端的請求轉發到后端,由Nginx根據負載均衡算法選擇一臺恰當的服務器提供服務,例如:

location /passto {                           #一個轉發的location
    proxy_set_header Host $host; #使用變量轉發原始請求的host頭部
    proxy_pass http://backend; #轉發到upstream塊定義的服務器集群
}

Nginx代理轉發相關的指令比較多,用來應對各種復雜的場景,proxy_pass只是其中最基本的一個(轉發HTTP/HTTPS服務),其他的還有fastcgi_pass、memcached_pass等,篇幅所限這里就不詳細解說了,讀者可參考Nginx文檔。

主站蜘蛛池模板: 万宁市| 阜康市| 青田县| 大连市| 彭泽县| 沙雅县| 兴安盟| 庆元县| 乌拉特前旗| 莎车县| 贡山| 平湖市| 林州市| 娄底市| 延庆县| 行唐县| 贵德县| 隆德县| 揭西县| 佛冈县| 怀化市| 靖安县| 南皮县| 泽库县| 全南县| 丰镇市| 敦煌市| 虞城县| 高碑店市| 正阳县| 仲巴县| 淄博市| 静海县| 大邑县| 读书| 邳州市| 靖边县| 清河县| 新郑市| 拉萨市| 容城县|