當你的Web應用程序訪問量大的時候,一台服務器可能會因為壓力過大而無法處理所有的請求。此時,可以增加服務器,采用負載均衡來分擔所有的請求。關於Nginx的作用,自行百度了解。總之,在Windows平台下,你可以用它和IIS來實現你的Web應用程序的負載均衡。簡單說,就是它會根據幾台服務器的空閑程度,將接收到的Web請求分發到相應的服務器進行處理(當然它會選擇比較空閑的服務器來處理當前的請求,否則用它有什么意義呢)。接下來,采用兩台虛擬機,創建簡單的ASP.Net應用程序,使用Nginx+IIS實現負載均衡。
一、環境
Client: Win7 X64, Visual Studio2010, IP:59.78.184.11
Server1: 虛擬機Win7 X64, IIS,Nginx IP:59.78.184.151 開放端口80(Nginx)、8080(IISweb)
Server2:虛擬機Win7 X64, IIS, IP:59.78.184.136 開放端口80(IISWeb)
二、創建ASP.Net應用程序,並發布至兩台Server上
VS中創建ASP.Net應用程序,為了測試負載均衡效果,我們只在應用程序中獲取當前處理Web請求的Server名。在項目中的Default.aspx.cs文件中寫如下代碼,Default.aspx頁面中放置一個Label控件。
protected void Page_Load(object sender, EventArgs e) { HostNameLbl.Text = "UserHostName:" + Request.UserHostName.ToString() + "<br/>UserHostAddress:" + Request.UserHostAddress.ToString() + "<br/>Url.Host:" + Request.Url.Host.ToString() + "<br/>Server:" + Server.MachineName.ToString(); ; }
接着,生成項目,將項目發布至已經准備好的兩台Server中。在Server1的IIS上,創建站點,將路徑指向該項目,並將8080端口分配給該站點。(注意,默認站點的端口為80,因為Server1一會需要將80端口給Nginx,所以我們重新給站點一個端口)。防火牆上將8080端口打開。同樣的步驟,在Server2上再走一遍(Server2上直接將80端口給新建的站點就可以了)。
三、安裝Nginx並進行配置
去官網上下載一個Nginx,在Server1的C盤中解壓。找到conf文件夾,打開里面的nginx.conf文件。找到http塊,往下需要配置的地方:
- upstream localhost塊,將需要監聽的兩台服務器IP地址配上去
- server塊。Nginx監聽本地端口配置上
- location塊。
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream localhost{
server 59.78.184.151:8080;
server 59.78.184.136:80;
}
server {
listen 80;
server_name 59.78.184.151;
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root html;
# index index.html index.htm;
#}
#my own location
location / {
proxy_pass http://localhost;
proxy_redirect default;
}
接着啟動nginx。
啟動:打開cmd,進入Nginx目錄,輸入nginx.exe回車。此時查看任務管理器中,有兩個nginx進程即啟動成功。
關閉:打開cmd,進入Nginx目錄,輸入nginx.exe –s stop回車,即可關閉nginx。如果在此你修改了配置文件,導致nginx無法關閉。cmd上會提示配置文件的哪一行出錯,可以追蹤到該行去進行相應的修改。
在瀏覽器中訪問我們的應用程序。注意觀察Server的值是WIN-KKRTSU3Q756
刷新瀏覽器,再次查看結果,如下:此時的Server編程了WIN-VM3BU2IPGM4。然而對於用戶來說,我並沒有察覺到,訪問的依舊是Server1的地址。