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

$ yum install nginx

 

 

step2. nginx.conf 常態性調整

$ vim /etc/nginx/nginx.conf
user              nginx;
worker_processes  2;
worker_cpu_affinity 01 10;
events {
    use epoll;
    worker_connections  1024;
}

 

 

 

step3. 設定 Reverse Proxy

$ vim /etc/nginx/conf.d/default.conf

server{
    listen       80;
    #Proxy的位置,提供給使用者連線
    server_name 172.16.10.10;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        
        #後端的Web伺服器,以Nginx官網為例
        proxy_pass http://nginx.com;

        #定義header記錄使用者IP
        proxy_set_header X-Real-IP $remote_addr;
        
        #讓後端的Web伺服器可以取得使用者真實IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        #把 Protocol header 也往後送
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_max_temp_file_size 0;
    }
}

 

 

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

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

 

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

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

那就要設定為

$ vim /etc/nginx/nginx.conf

set_real_ip_from 125.119.141.65;
real_ip_header X-Forwarded-For;

 

 

set_real_ip_from 就是前端的 Proxy IP

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

3 Replies to “CentOS 6 建立 Nginx Reverse Proxy”

  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。

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

      • 簡文森表示:

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

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱