Reserve proxy by Nginx

使用Nginx作為反向代理(reserve proxy)的設定真的簡單很多,相較於Squid的複雜設定,Nginx比較直觀。使用反向代理的好處很多,尤其可做load balance,或虛擬化的時候,手上不可能有那麼多public ip可用,讓一個public ip可運作多個不同的domain name成為可行方案。

廢話不多說,基本設定如下:
server {
  listen 80;
  server_name www.domain.com;

  location / {
    proxy_pass http://x.x.x.x:port;
  }
}
定義一個server區塊,server區塊可以定義一個virtual host,熟悉apache的人應能容易的理解這部份。上面範例讓virtual host監聽80 port,並且request的host domain是www.domain.com。location區塊會去比對URL的path,並不會去理會query的部份,有時候我們會看到location後面接如 ~~* 的符號,location是允許使用regular express,~代表case sensitive matching,~*代表case insensitive matching,例如:location ~ ^/[a-z]{4}$,意思只接受4個小寫英文字,location ~* ^/[a-z]{4$}則不分大小寫,更多的說明請看這裡

或者可以定義一個upstream區塊。upstream是一個server的集合,一行一個server,多個server作round-robin,也可以定義權重(weight)。upstream在設定load balance時使用較多,範例如下:
upstream siteName {
  server x.x.x.x:port weight=1;
  server x.x.x.x:port;
  ...
}

server {
  listen 80;
  server_name www.domain.com;

  location / {
    proxy_pass http://siteName;
  }
}
以上就是Nginx做反向代理的基本設定,有時候做反向代理會用到cache機制以提高server的回應速度和節省backend server的工作量,可以參考官網的範例Reverse Proxy with Caching。建議可以看看這篇基本介紹的文章Nginx Primer,讀完可以對Nginx有基本的認識。

留言

熱門文章