CentOS 6 建立 Nginx Reverse Proxy

2015-04-14 CentOS

Nginx 很常拿來做 Proxy / Reverse Proxy,設定方便又簡單

通常 Reverse Proxy 會放在非交戰區(DMZ) 來做為 Public 跟 Private 之間的連線,避免 attack 直接接觸到資料主機,也能降低資料主機的 Loading

 

範例架構

NginxProxy

 

試想將 Web Server 放置內網,所有使用者都必須由 Reverse Proxy 代為交涉

 

為了瞭解概念,用 Nginx官網 來當作 Web Server

而我們必須要從 Reverse Proxy 來反向代理到 Nginx官網

 

 

環境

CentOS 6.6

Reverse Proxy: 172.16.10.10

目標 Web : http://nginx.com

 

 

安裝 Nginx Reverse Proxy

step1. 先把 Nginx 安裝起來

要從EPEL才能找到 Nginx

 

 

step2. nginx.conf 常態性調整

 

 

 

step3. 設定 Reverse Proxy

 

 

其實設定檔很簡單,其常常忘記的就是忘記加上 $proxy_add_x_forwarded_for

若是沒有加上這個,在後端的 Web Server 取得的 access IP 都會是 Proxy Server 的 IP,而不是真實IP。

 

在後端如果也是使用 Nginx 的話,必須在 nginx.conf 加上一些設定

若是前端的 IP header 為 X-Forwarded-For

那就要設定為

 

 

set_real_ip_from 就是前端的 Proxy IP

read_ip_header 是前端記錄真實 IP 的 header,必須相符合

3 comments

  1. 簡文森 說:

    shazi7804,您好!
    目前手上有安裝一個NGINX反向代理伺服器當作軟體load baliance,架構為一台NGINX,後面搭配三台IIS,最近遇到一些情況,用戶使用SSL VPN方式連入網站,由於使用單位大多為學校單位,因此會以各個學校的IP為認證基礎,最近發現以SSL VPN方式連入網站,所取得的request端IP竟然都是終端IP,而非學校的SSL VPN服務器IP,因此無法稽核使用情形,想請教您,有辦法解決此情況嗎?謝謝

    • shazi7804 說:

      Hi 簡文森

      看起來應該 SSL VPN 有替使用者 rewrite IP 出去,你可以試試看去印從 SSL VPN 過來使用者的 REMOTE_ADDR, HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR … 等等這些表頭,看看是不是有藏在這些 header 裡面。

      用一支 index.php 給你參考,使用者訪問會印出這些 header。

      < ?php $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; $HTTP_CLIENT_IP = $_SERVER['HTTP_CLIENT_IP']; $HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR']; echo "REMOTE_ADDR: ".$REMOTE_ADDR ."\n"; echo "HTTP_CLIENT_IP: " .$HTTP_CLIENT_IP ."\n"; echo "HTTP_X_FORWARDED_FOR: ".$HTTP_X_FORWARDED_FOR ."\n"; ?>

      另外, 任何從使用者提供的資料都是不可被信任的,用於稽核其實不太恰當哦。僅供參考

      • 簡文森 說:

        版主,您好!
        謝謝您的回覆,我會試試看的!
        您說的沒錯,客戶端IP可以假造,其實不應拿來識別稽核,因為使用情境比較特別,而且我所提供的網站服務為買方市場,因此也只能配合,謝謝您的建議!

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱