在ubuntu上面配置nginx實現反向代理和負載均衡


上一篇文章(http://www.cnblogs.com/chenxizhang/p/4684260.html),我做了一個實驗,就是利用Visual Studio,基於Nancy框架,開發了一個自托管(Self-hosting)的應用程序,然后將其部署到了一台Ubuntu的虛擬機上面,通過mono將其順利地運行了起來,這樣也就實現了.NET應用程序在Liunx系統上面的移植。

這一篇要講解的是進一步的實驗,我們都知道Nginx這款服務器,它可以用來做反向代理服務器,也可以做負載均衡。

關於nginx(要讀成 engine x),有興趣的朋友可以多看一下官方網站:http://nginx.org/ 

通過Nginx做反向代理

首先,需要安裝nginx

sudo apt-get install nginx
然后,需要對Nginx進行配置
cd /etc/nginx/sites-available/
這個目錄下面默認會有一個default的配置文件,內容如下
image
它是在80端口進行監聽。你可以直接修改這個文件,例如我上圖中其實已經設置了將所有請求轉發(proxy_pass)到之前我們啟動的那個網站(8888端口)。
我們也可以自己創建一個獨立的配置文件,另外指定一個端口

cat > nancydemo

然后輸入如下的內容

 

server {
    listen       81;
    server_name  yourdomainname.com;
    root /var/www/nancydemo;

    location /Content/ {
        alias /var/www/nancydemo/Content/;
        location ~*  \.(jpg|jpeg|png|gif|ico|css|js|ttf)$ {
            expires 365d;
        }
    }

    location / {
            proxy_pass http://127.0.0.1:8888;
    }
}

按下CTRL +D保存這個文件,然后重新加載一下配置信息,就可以在81端口訪問到原先8888端口的內容了

sudo /etc/init.d/nginx reload

 

有童鞋可能會問了,為什么要這么麻煩呢?用戶直接訪問8888端口不就好了嗎?通過訪問81然后再訪問8888端口,這樣會不會有性能下降呢?

其實呢,這個問題的關鍵在於你要理解什么叫反向代理。反向代理一方面隱藏了真正的服務器信息(例如地址),另外,還可能帶來更加快的訪問速度。


 

直接訪問(端口8888)以及通過代理(端口81)訪問的壓力測試結果

image

 

啟用兩台Web服務器,通過nginx做負載均衡

nginx不僅僅可以作為反向代理服務器,而且也是一款很出色的負載均衡服務器。為了做這個實驗,我在服務器端分別用之前寫好的程序,啟動了兩個網站,端口分別為8888和9999。

接下來介紹一下,如何配置nginx使其可以實現負載均衡。方法很簡單,我們需要編輯nancydemo這個配置文件(請注意紅色標出的部分)


upstream xizhang{
        server 127.0.0.1:8888;
        server 127.0.0.1:9999;

}
server {
    listen       81;
    server_name  yourdomainname.com;
    root /var/www/nancydemo;

    location /Content/ {
        alias /var/www/nancydemo/Content/;
        location ~*  \.(jpg|jpeg|png|gif|ico|css|js|ttf)$ {
            expires 365d;
        }
    }

    location / {
            proxy_pass http://xizhang;
    }
}

image

配置完成之后,我們需要重新加載一下配置信息

sudo /etc/init.d/nginx reload

 

測試結果表明每秒請求數明顯上升

image

我們可以在服務器中看到有兩個nginx進程,以及mono的進程。

image

關於使用nginx實現負載均衡,還有一些細節,有興趣可以參考 http://nginx.org/en/docs/http/load_balancing.html

 

nginx還可以作為靜態資源服務器,實現動靜分離(並且可以緩存起來),進一步提高Web服務器的性能和吞吐量。這個話題就不過多展開了,有興趣的朋友們可以參考官方的文檔

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM