使用nginx來負載平衡 本文在window與linux下配置nginx實現負載

來源:互聯網
上載者:User

實現網站負載有兩種辦法,一種是購買硬體來實現,比如是硬體F5再到Citrix Netscalar,這些裝置都幾十萬,不是一般人玩的,另一種是使用軟體來實現,比如nginx,squid這類有反向 Proxy功能的軟體,本文就nginx安裝實現負載。

首先是windows系統,這裡建議使用window 2003企業版,而不要作用win7(太新了,我遇到無法啟動nginx的問題)。要說的是,在windows下配置安裝nginx還是很容易的,少了 linux下下載tar再配置編譯參數等等步驟,我們只要從下面的地址下載相應的zip包(大約750kb)即可,地址如下:

http://sysoev.ru/nginx/nginx-0.8.21.zip

需要說明的是這個下載包是nginx 0.8.21開發版,換句話說其只能用於搭建測試環境等用途的,不能用於實際的生產環境(受限於windows檔案控制代碼數限制)。

下載並將該包中的檔案解壓到c盤上,為了配置使用方便,我將其解壓後的檔案夾名稱從“nginx-0.8.19”改為"nginx”,這樣我們只要將要負載平衡的網站在iis中設定好之後,將相應的連結地址放到nginx的相應設定檔中即可,這裡我們開啟C:\nginx\conf \nginx.conf檔案,將下面的內容放到該檔案的“server { ”上方行處:

upstream mylocalsite {
server 10.0.2.137:8088;
server 10.0.2.137:8089;
}

因為nginx無法運行動態指令碼,所以這裡要使用proxy_pass屬性進行代理,所以找到該設定檔的如下內容:

location / {
root html;
index index.html index.htm;
}

修改其內容如下:

location / {
proxy_pass http://mylocalsite;
}

修改完之後,還要修改一下server的偵聽連接埠,原內容如下:

server {
listen 80;
server_name localhost;
……

修改完後的內容如下:

server {
listen 8086;
server_name 10.0.2.136;
……

這樣,nginx就會在啟動之後開始偵聽本地IP(10.0.2.136)的8086連接埠請求,然後將其請求轉向到mylocalsite 中所指定的兩個iis網站,並將執行的結果轉寄給用戶端。如果一切配置正確,這時可以運行 c:/nginx/nginx.exe (或在cmd下運行“start nginx”),就可以在工作管理員中看到一個nginx進程啟動了。(注:如果設定檔有錯誤,可以到C:\nginx\logs\error.log 查看錯誤記錄檔,進一步排錯)。

註: 關閉ngnix的命令: nginx -s stop

設定檔ngnix.conf正確性判斷的命令: nginx -t

當然Nginx 負載平衡的功能也是很強的,並且其一般作為七層負載平衡(應用協議層)。下面就其upstream所支援的四個常用設定進行說明:

1)、輪詢(預設):每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器 down掉,能自動剔除。
2)、weight :指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
2)、 ip_hash :每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
3)、 fair(第三方):按後端伺服器的回應時間來分配請求,回應時間短的優先分配。
4)、url_hash(第三方)

按上面的說明,可以將之前我們的upstream做如下修改:

upstream mylocalsite {
server 10.0.2.137:8088 weight=2;
server 10.0.2.137:8089 weight=1;
}

這個當來了三個http請求時,其中的兩個會被分配到10.0.2.137:8088 上,一個分配到10.0.2.137:8089 。當然一開始可以其分攤的請求可以不是太嚴格按其設定,但當請求數多了之後,基本上就接近於我們分指派的權值了。當然就負載平衡的演算法而言,使用 weight只是其中的一種,而經常使用的還有許多,比如lvs就在其內部實現了多種的負載平衡演算法,可以根據使用者的實際環境進行設定布署。。當然就目前而言,nginx的演算法相比較還是少了許多,呵呵。

可以說在windows下安裝配置還是很方便的,但如果使用loadrunner做並發測試時,就會發現其logs/error.log就會報如下錯誤:

maximum number of descriptors supported by select() is 1024 while connecting to upstream

我曾經在網上查過解決方案,包括修改設定檔的worker_connections ,如下:

worker_rlimit_nofile 20240;
events {
#use epoll;//linux 下使用
worker_connections 20240;
}

但依舊不能將檔案控制代碼數擴充到20240,還是報1024最大控制代碼數錯誤。最後實在沒辦法了,只得開始嘗試在linux下安裝配置nginx。也就引發了下面的內容。

其實在網上有關介紹如何在linux下安裝nginx的要比windows下的要多得多,必定這是‘本家'吧。

因為之前網管只在虛擬機器上安裝了CentOS5,所以只能就嘗試在該linux分支版本下安裝了。好在虛擬機器已安裝完了,剩下的工作並不太多。

首先需要以root身份登陸系統,然後切換身份為超級管理員:

然後進入到src目前下,並在目前的目錄下download nginx.tar.gz包

cd /usr/src # 將檔案下載到這個目錄
wget http://sysoev.ru /nginx/nginx-0.7.62.tar.gz# 下載安裝包
tar xzvf nginx- 0.6.34.tar.gz #解壓

如果下載的nginx 中預設可能沒有 rewirte規則,因此需要下載pcre包的擴充來實現這個功能:

wget http://syslab.comsenz.com /downloads/linux/pcre-7.8.tar.bz2 # 下載pcre
tar xjvf pcre- 7.8.tar.bz2 # 解壓pcre

下面編譯安裝pcre

cd /usr/src/pcre-7.8;
./configure --prefix=/usr/local/pcre --enable-utf8 --enable-unicode-properties

下面編譯安裝nginx

開始配置要編譯的參數(註:內容較長,容易輸錯。具體參數設定參見http://wiki.codemongers.com/NginxChsInstall)

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf
--error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log
--pid-path=/usr/local/nginx/var/nginx.pid --lock-path=/usr/local/nginx/var/nginx.lock
--http-client-body-temp-path=/dev/shm/nginx_temp/client_body --http-proxy-temp-path=/dev/shm/nginx_temp/proxy
--http-fastcgi-temp-path=/dev/shm/nginx_temp/fastcgi
--user=www --group=www --with-cpu-opt=pentium4 --without-select_module --without-poll_module
--with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module
--without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_memcached_module
--without-http_map_module" #如要取消ssl可去掉該項
--without-mail_pop3_module --without-mail_imap_modul --without-mail_smtp_module --with-pcre=/usr/local/pcre/lib

接下來就開始編譯產生相應的檔案了:

make
make install

然後/dev/shm 也就是記憶體中,建立一個nginx_temp檔案夾

  接著建立www使用者和組,以及其使用的目錄:

/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /data0/vshare/htdocs
chmod +w /data0/vshare/htdocs
chown -R www:www /data0/vshare/htdocs

這時可以擴充一下檔案控制代碼數(windows下就沒這麼容易擴充了,哎)

到這裡,我們就可以使用linux下的vi編輯器編輯一下:

cd /usr/src/nginx-0.7.62/conf/
vi nginx.conf

將之前在window下的修改內容替換(按下insert鍵進入到編輯模式)到當前的檔案中,當修改完成了,按冒號(":")切換到命令模式下,然後敲入 “wq”,儲存並退出。(強制退出(不儲存)的話,輸入q!,然後斷行符號)

註:

events {
use epoll;
worker_connections 20240;
}

註:use epoll; //linux下使用,更多內容參見NginxChsOptimizations

這樣就可以運行nginx了:

啟動完成後,可以通過如下指令查看其在記憶體中的運行資訊:

# ps aux | egrep '(PID|nginx)'

這樣當我們再使用loadrunner運行時,就可以看到error.log中就不再報那個惱人的“1024錯誤了”。

當然在nginx中,還支援檔案快取,以便於將那些靜態檔案快取到本地的nginx伺服器上,只不過要修改一下其config檔案配置,如下:

vi nginx.conf

在檔案中的相應節點處輸入如下內容:

location ~ .*\. (gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ { #指定快取檔案類型
expires 7d; # 設定瀏覽器到期時間7天
root data/nginx_cache/iis; #靜態檔案根目錄目錄(必須對應proxy_temp_path)
proxy_store on; #開啟緩衝機制
proxy_store_access user:rw group:rw all:rw; # 緩衝讀寫規則
proxy_temp_path data/nginx_cache/iis; #存放靜態檔案的緩衝目錄
# include proxy.conf; # 外聯proxy理的詳細配置如 proxy_set_header, client_max_body_size .
if (!-e $request_filename) {
proxy_pass http://10.0.2.136;/
}
}

這樣就會在data/nginx_cache/iis目前下產生相應的gif,jpg等檔案的臨時資訊,當用戶端請求到來時,就會從該目錄中檢索相應檔案綁定之後返回給用戶端,以減輕iis伺服器和網路頻寬的壓力。

最後附上一個我在那台Centos上的設定檔,大家可以對比參照一下,因為nginx本身提供的配置結點資訊過多,更多資訊可以參見這篇文章。

相關連結如下:

張宴 搭建勝過Apache十倍的Web伺服器(第5版)[原創]

守住每一天(網名) nginx反向 Proxy配置及最佳化

原文連結: 玩玩負載平衡---在window與linux下配置nginx" href="http://www.cnblogs.com/daizhj/archive/2009/11/03/1595292.html" target="_black">http://www.cnblogs.com/daizhj/archive/2009/11/03/1595292.html

作者: daizhj, 代震軍

Tags: nginx,負載平衡

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.