Proxy 是位於 Client 和 Server 之間的 Server,Client 會向 Proxy 發送請求, Proxy 會轉發請求到 Server,並將 Server 的回應返回給 Client。Proxy 可以用來隱藏 Client IP,並提供 Cache 功能,提高網站的訪問速度。 Reverse Proxy 是位於 Server 的 Server ,Client 會向 Reverse Proxy 發送請求, Reverse Proxy 會根據請求的內容,將請求轉發到不同的 Server ,並將 Server 的回應返回給 Client 。 Reverse Proxy 可以用來負載均衡、Cache、安全防護等。

功用

Proxy

  • 隱藏 Client IP:當Client 訪問網站時,可以使用 Proxy 來隱藏 Client IP,這可以保護用戶隱私。
  • 提供 Cache 功能:Proxy 可以提供 Cache 功能,提高網站的訪問速度。當 Client 第一次訪問網站時, Proxy 會將網站的內容 Cache 到自己的內存中,當 Client 再次訪問網站時, Proxy 會直接返回 Cache 的內容,這可以提高網站的訪問速度。

Reverse Proxy

  • 負載均衡:Reverse Proxy 可以用來負載均衡,將用戶的請求均勻分散到不同的 Server ,這可以提高網站的性能和可用性。
  • Cache:Reverse Proxy 可以提供 Cache 功能,提高網站的訪問速度。當 Client 第一次訪問網站時, Reverse Proxy 會將網站的內容 Cache 到自己的內存中,當 Client 再次訪問網站時, Reverse Proxy 會直接返回 Cache 的內容,這可以提高網站的訪問速度。
  • 安全防護:Reverse Proxy 可以用來安全防護,例如可以用來防火牆、DDoS 攻擊等。

細節

Proxy

代理的對象是 Client ,Client 過程隱藏 Client IP,Server 不知道拜訪的 Client 是誰。

  1. 可以拜訪鎖區網站,常見案例為 VPN 就是 Proxy 的經典用例。
  2. 隱藏真實 IP,只有 Proxy Server 才知道 Client IP。
  3. Proxy Server 可以做 Cache 並返回 Cache 提升訪問速度。

Reverse Proxy

代理的對象是 Server,所以 Client 不知道具體是拜訪哪台 Server。

  1. 可以做負載均衡,可以根據不同狀況分發請求。
  2. Cache。
  3. Reverse Proxy Server 內可以做 firewall 跟安全防護。

Nginx 配置

Proxy

透過 proxy_pass 配置代理地址 http://google.com,當請求 http://example.com 轉發到 http://google.com

server {
    server_name example.com;
    listen 80;
    location / {
        proxy_pass http://google.com;
        proxy_set_header HOST $host;
    }
}

Reverse Proxy

需要配置 conf/nginx.conf 來達到此作用:

http {
    keepalive_timeout  120;
    tcp_nodelay        on;
    # Server list
    upstream example.com {
        # weight 權重配置越高被分配到機率越大
        server 192.168.1.11:80   weight=5;
        server 192.168.1.12:80   weight=1;
        server 192.168.1.13:80   weight=6;
    }

    server {
        listen       80;
        server_name  example.com;
        charset utf-8;
        location / {
            proxy_pass http://example.com;
        }
    }
}

結論

  • Proxy、Reverse Proxy 目標對象不同,一個面向 Client,一個面向 Server。
  • 不論是 Proxy、Reverse Proxy 都可以提供資源緩存 Cache 與安全防護,都是在 Proxy Server 這邊做處理,一個是安全防護 Client,一個是安全防護 Server(面向對象不同)。

ref: