利用 nginx 建置反向代理伺服器

Nginx是俄羅斯人編寫的十分羽量級的HTTP伺服器,Nginx,它的發音為“engine X”, 是一個高性能的HTTP和反向代理伺服器,同時也是一個IMAP/POP3/SMTP 代理伺服器.Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的 Rambler.ru站點開發.

Nginx以事件驅動的方式編寫,所以有非常好的性能,同時也是一個非常高效的反向代理、負載平衡。其擁有匹配 Lighttpd的性能,同時還沒有Lighttpd的記憶體洩漏問題,而且Lighttpd的mod_proxy也有一些問題並且很久沒有更新。

但是Nginx並不支援cgi方式運行,原因是可以減少因此帶來的一些程式上的漏洞。所以必須使用FastCGI方式來執行PHP程式。

nginx做為HTTP伺服器,有以下幾項基本特性:
1)處理靜態檔,索引檔以及自動索引;打開文件描述符緩衝.
2)無緩存的反向代理加速,簡單的負載均衡和容錯.
3)FastCGI,簡單的負載均衡和容錯.
4)模組化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其他代理伺服器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待。
5)Nginx專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率。它支援內核Poll模型,能經受高負載的考驗,有報告表明能支持高達 50,000個併發連接數。
6)Nginx具有很高的穩定性。其他HTTP伺服器,當遇到訪問的峰值,或者有人惡意發起慢速連接時,也很可能會導致伺服器實體記憶體耗盡頻繁交換,失 去回應,只能重啟伺服器。例如當前apache一旦上到200個以上進程,web回應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得 它的CPU與記憶體佔用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只占2.5M記憶體,所以類似DOS這樣的攻擊對nginx來 說基本上是毫無用處的。就穩定性而言,nginx比lighthttpd更勝一籌。
7)Nginx支持熱部署。它的啟動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠在不間斷服務的情況下,對軟體版本進行進行升級。

常見的 Proxy Server ( 代理伺服器 ) 的工作是去各個 Web Server 抓取資料回來放在伺服器上來供用戶讀取、下載,而 Reverse Proxy Server ( 反向代理伺服器 ) 做的事則是和 Proxy Server 剛好相反,負責將用戶端的資料傳送給藏在 Reverse Proxy Server 後面的 Web Server,這些躲在後面的 Web Server 不會、也不能直接被用戶直接連結,只能經由 Reverse Proxy Server 代理傳送和接收資料。

使用 Reverse Proxy Server 可以保護後方 Web Server 被攻擊,同時,還可提供負載平衡、快取以及資料加密的功能,而目前比較常見的實作方式,是利用 Nginx 做為 Reverse Proxy Server,用 Apache 來當後面實際行的 Web Server。

本次則以實作方式來建置反向代理伺服器
測試環境
ubuntu 14.04 LTS 192.168.0.117 ( 已安裝apache + mysql + phpmyadmin )
ubuntu 14.04 LTS 192.168.0.118 ( 僅安裝NginX )
首先在apache伺服器上先建置所要的網站環境作為web server
這部分就依據不同的需求來建置這邊不再說明

在192.168.0.118 Reverse Proxy伺服器上我們則使用 ubuntu14.04LTS 來實作NginX

CentOS/Fedora:yum install nginx

Ubuntu/Debian:apt-get install nginx

mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

vi /etc/nginx/sites-available/default
#將原本設定刪除加入下列設定
upstream fl_web {
    server dongtaiwang.com:80;#網站名稱自行設定
}
server {
    listen 80;
    server_name fl;
    access_log /var/log/nginx/fl_access_log;
    location / {
        proxy_pass_header Server;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://192.168.0.117;#這裡輸入apache伺服器的ip
    }
}

實際用網址連線192.168.0.118
可以發現到已經轉到apache伺服器那台主機192.168.0.117
上圖為原本的apache伺服器192.168.0.117
更換個google網站,也能導到www.google.com.tw


留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json