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

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

這一篇要講解的是進一步的實驗,咱們都知道Nginx這款服務器,它能夠用來作反向代理服務器,也能夠作負載均衡。html

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

經過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;
        }
    }dom

    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

相關文章
相關標籤/搜索