上一篇文章(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的配置文件,內容如下
它是在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)訪問的壓力測試結果
啟用兩台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;
}
}
配置完成之后,我們需要重新加載一下配置信息
sudo /etc/init.d/nginx reload
測試結果表明每秒請求數明顯上升
我們可以在服務器中看到有兩個nginx進程,以及mono的進程。
關於使用nginx實現負載均衡,還有一些細節,有興趣可以參考 http://nginx.org/en/docs/http/load_balancing.html
nginx還可以作為靜態資源服務器,實現動靜分離(並且可以緩存起來),進一步提高Web服務器的性能和吞吐量。這個話題就不過多展開了,有興趣的朋友們可以參考官方的文檔