使用nginx來(lái)負(fù)載均衡 本文在window與linux下配置nginx實(shí)現(xiàn)負(fù)載
實(shí)現(xiàn)網(wǎng)站負(fù)載有兩種辦法,一種是購(gòu)買硬件來(lái)實(shí)現(xiàn),比如是硬件F5再到Citrix Netscalar,這些設(shè)備都幾十萬(wàn),不是一般人玩的,另一種是使用軟件來(lái)實(shí)現(xiàn),比如nginx,squid這類有反向代理功能的軟件,本文就nginx安裝實(shí)現(xiàn)負(fù)載。
首先是windows系統(tǒng),這里建議使用window 2003企業(yè)版,而不要作用win7(太新了,我遇到無(wú)法啟動(dòng)nginx的問(wèn)題)。要說(shuō)的是,在windows下配置安裝nginx還是很容易的,少了 linux下下載tar再配置編譯參數(shù)等等步驟,我們只要從下面的地址下載相應(yīng)的zip包(大約750kb)即可,地址如下:
http://sysoev.ru/nginx/nginx-0.8.21.zip
需要說(shuō)明的是這個(gè)下載包是nginx 0.8.21開(kāi)發(fā)版,換句話說(shuō)其只能用于搭建測(cè)試環(huán)境等用途的,不能用于實(shí)際的生產(chǎn)環(huán)境(受限于windows文件句柄數(shù)限制)。
下載并將該包中的文件解壓到c盤上,為了配置使用方便,我將其解壓后的文件夾名稱從“nginx-0.8.19”改為"nginx”,這樣我們只要將要負(fù)載均衡的站點(diǎn)在iis中設(shè)置好之后,將相應(yīng)的鏈接地址放到nginx的相應(yīng)配置文件中即可,這里我們打開(kāi)C:\nginx\conf \nginx.conf文件,將下面的內(nèi)容放到該文件的“server { ”上方行處:
server 10.0.2.137:8088;
server 10.0.2.137:8089;
}
因?yàn)閚ginx無(wú)法運(yùn)行動(dòng)態(tài)腳本,所以這里要使用proxy_pass屬性進(jìn)行代理,所以找到該配置文件的如下內(nèi)容:
root html;
index index.html index.htm;
}
修改其內(nèi)容如下:
proxy_pass http://mylocalsite;
}
修改完之后,還要修改一下server的偵聽(tīng)端口,原內(nèi)容如下:
listen 80;
server_name localhost;
……
修改完后的內(nèi)容如下:
listen 8086;
server_name 10.0.2.136;
……
這樣,nginx就會(huì)在啟動(dòng)之后開(kāi)始偵聽(tīng)本地IP(10.0.2.136)的8086端口請(qǐng)求,然后將其請(qǐng)求轉(zhuǎn)向到mylocalsite 中所指定的兩個(gè)iis站點(diǎn),并將執(zhí)行的結(jié)果轉(zhuǎn)發(fā)給客戶端。如果一切配置正確,這時(shí)可以運(yùn)行 c:/nginx/nginx.exe (或在cmd下運(yùn)行“start nginx”),就可以在任務(wù)管理器中看到一個(gè)nginx進(jìn)程啟動(dòng)了。(注:如果配置文件有錯(cuò)誤,可以到C:\nginx\logs\error.log 查看錯(cuò)誤日志,進(jìn)一步排錯(cuò))。
注: 關(guān)閉ngnix的命令: nginx -s stop
配置文件ngnix.conf正確性判斷的命令: nginx -t
當(dāng)然Nginx 負(fù)載均衡的功能也是很強(qiáng)的,并且其一般作為七層負(fù)載均衡(應(yīng)用協(xié)議層)。下面就其upstream所支持的四個(gè)常用設(shè)置進(jìn)行說(shuō)明:
2)、weight :指定輪詢幾率,weight和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況。
2)、 ip_hash :每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題。
3)、 fair(第三方):按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。
4)、url_hash(第三方)
按上面的說(shuō)明,可以將之前我們的upstream做如下修改:
server 10.0.2.137:8088 weight=2;
server 10.0.2.137:8089 weight=1;
}
這個(gè)當(dāng)來(lái)了三個(gè)http請(qǐng)求時(shí),其中的兩個(gè)會(huì)被分配到10.0.2.137:8088 上,一個(gè)分配到10.0.2.137:8089 。當(dāng)然一開(kāi)始可以其分?jǐn)偟恼?qǐng)求可以不是太嚴(yán)格按其設(shè)置,但當(dāng)請(qǐng)求數(shù)多了之后,基本上就接近于我們分指派的權(quán)值了。當(dāng)然就負(fù)載均衡的算法而言,使用 weight只是其中的一種,而經(jīng)常使用的還有許多,比如lvs就在其內(nèi)部實(shí)現(xiàn)了多種的負(fù)載均衡算法,可以根據(jù)用戶的實(shí)際環(huán)境進(jìn)行設(shè)置布署。。當(dāng)然就目前而言,nginx的算法相比較還是少了許多,呵呵。
可以說(shuō)在windows下安裝配置還是很方便的,但如果使用loadrunner做并發(fā)測(cè)試時(shí),就會(huì)發(fā)現(xiàn)其logs/error.log就會(huì)報(bào)如下錯(cuò)誤:
maximum number of descriptors supported by select() is 1024 while connecting to upstream
我曾經(jīng)在網(wǎng)上查過(guò)解決方案,包括修改配置文件的worker_connections ,如下:
events {
#use epoll;//linux 下使用
worker_connections 20240;
}
但依舊不能將文件句柄數(shù)擴(kuò)充到20240,還是報(bào)1024最大句柄數(shù)錯(cuò)誤。最后實(shí)在沒(méi)辦法了,只得開(kāi)始嘗試在linux下安裝配置nginx。也就引發(fā)了下面的內(nèi)容。
其實(shí)在網(wǎng)上有關(guān)介紹如何在linux下安裝nginx的要比windows下的要多得多,必定這是‘本家'吧。
因?yàn)橹熬W(wǎng)管只在虛擬機(jī)上安裝了CentOS5,所以只能就嘗試在該linux分支版本下安裝了。好在虛擬機(jī)已安裝完了,剩下的工作并不太多。
首先需要以root身份登陸系統(tǒng),然后切換身份為超級(jí)管理員:
然后進(jìn)入到src目前下,并在當(dāng)前目錄下download nginx.tar.gz包
wget http://sysoev.ru /nginx/nginx-0.7.62.tar.gz# 下載安裝包
tar xzvf nginx- 0.6.34.tar.gz #解壓
如果下載的nginx 中默認(rèn)可能沒(méi)有 rewirte規(guī)則,因此需要下載pcre包的擴(kuò)展來(lái)實(shí)現(xiàn)這個(gè)功能:
tar xjvf pcre- 7.8.tar.bz2 # 解壓pcre
下面編譯安裝pcre
./configure --prefix=/usr/local/pcre --enable-utf8 --enable-unicode-properties
下面編譯安裝nginx
開(kāi)始配置要編譯的參數(shù)(注:內(nèi)容較長(zhǎng),容易輸錯(cuò)。具體參數(shù)設(shè)置參見(jiàn)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可去掉該項(xiàng)
--without-mail_pop3_module --without-mail_imap_modul --without-mail_smtp_module --with-pcre=/usr/local/pcre/lib
接下來(lái)就開(kāi)始編譯生成相應(yīng)的文件了:
make install
然后/dev/shm 也就是內(nèi)存中,建立一個(gè)nginx_temp文件夾
接著創(chuàng)建www用戶和組,以及其使用的目錄:
/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
這時(shí)可以擴(kuò)充一下文件句柄數(shù)(windows下就沒(méi)這么容易擴(kuò)展了,哎)
到這里,我們就可以使用linux下的vi編輯器編輯一下:
vi nginx.conf
將之前在window下的修改內(nèi)容替換(按下insert鍵進(jìn)入到編輯模式)到當(dāng)前的文件中,當(dāng)修改完成了,按冒號(hào)(":")切換到命令模式下,然后敲入 “wq”,保存并退出。(強(qiáng)制退出(不保存)的話,輸入q!,然后回車)
注:
use epoll;
worker_connections 20240;
}
注:use epoll; //linux下使用,更多內(nèi)容參見(jiàn)NginxChsOptimizations
這樣就可以運(yùn)行nginx了:
啟動(dòng)完成后,可以通過(guò)如下指令查看其在內(nèi)存中的運(yùn)行信息:
# ps aux | egrep '(PID|nginx)'
這樣當(dāng)我們?cè)偈褂胠oadrunner運(yùn)行時(shí),就可以看到error.log中就不再報(bào)那個(gè)惱人的“1024錯(cuò)誤了”。
當(dāng)然在nginx中,還支持文件緩存,以便于將那些靜態(tài)文件緩存到本地的nginx服務(wù)器上,只不過(guò)要修改一下其config文件配置,如下:
vi nginx.conf
在文件中的相應(yīng)節(jié)點(diǎn)處輸入如下內(nèi)容:
expires 7d; # 設(shè)置瀏覽器過(guò)期時(shí)間7天
root data/nginx_cache/iis; #靜態(tài)文件根目錄目錄(必須對(duì)應(yīng)proxy_temp_path)
proxy_store on; #開(kāi)啟緩存機(jī)制
proxy_store_access user:rw group:rw all:rw; # 緩存讀寫(xiě)規(guī)則
proxy_temp_path data/nginx_cache/iis; #存放靜態(tài)文件的緩存目錄
# include proxy.conf; # 外聯(lián)proxy理的詳細(xì)配置如 proxy_set_header, client_max_body_size

if (!-e $request_filename) {
proxy_pass http://10.0.2.136;/
}
}
這樣就會(huì)在data/nginx_cache/iis目前下生成相應(yīng)的gif,jpg等文件的臨時(shí)信息,當(dāng)客戶端請(qǐng)求到來(lái)時(shí),就會(huì)從該目錄中檢索相應(yīng)文件綁定之后返回給客戶端,以減輕iis服務(wù)器和網(wǎng)絡(luò)帶寬的壓力。
最后附上一個(gè)我在那臺(tái)Centos上的配置文件,大家可以對(duì)比參照一下,因?yàn)閚ginx本身提供的配置結(jié)點(diǎn)信息過(guò)多,更多信息可以參見(jiàn)這篇文章。
相關(guān)鏈接如下:
張宴 搭建勝過(guò)Apache十倍的Web服務(wù)器(第5版)[原創(chuàng)]
守住每一天(網(wǎng)名) nginx反向代理配置及優(yōu)化
原文鏈接: http://www.cnblogs.com/daizhj/archive/2009/11/03/1595292.html
作者: daizhj, 代震軍
Tags: nginx,負(fù)載均衡
- linux服務(wù)器之LVS、Nginx和HAProxy負(fù)載均衡器對(duì)比總結(jié)
- LVS+Keepalived構(gòu)建高可用負(fù)載均衡(測(cè)試篇)
- LVS+Keepalived構(gòu)建高可用負(fù)載均衡配置方法(配置篇)
- LVS(Linux Virtual Server)Linux 虛擬服務(wù)器介紹及配置(負(fù)載均衡系統(tǒng))
- Linux 系統(tǒng) nginx 服務(wù)器安裝及負(fù)載均衡配置詳解
- linux下nginx負(fù)載均衡搭建的方法步驟
- linux負(fù)載均衡總結(jié)性說(shuō)明 四層負(fù)載和七層負(fù)載有什么區(qū)別
- linux下Nginx+Tomcat負(fù)載均衡配置方法
- Red Hat Linux,Apache2.0+Weblogic9.2負(fù)載均衡集群安裝配置
- 深入理解Linux負(fù)載均衡LVS
相關(guān)文章
Linux運(yùn)維基礎(chǔ)進(jìn)程管理及環(huán)境組成分析
這篇文章主要為大家介紹了Linux運(yùn)維基礎(chǔ),對(duì)其中進(jìn)程管理及環(huán)境組成分析作了詳細(xì)的分析,有需要的朋友可以借鑒參考下,希望可以有所幫助2021-09-09Ubuntu16.04環(huán)境下搭建FTP服務(wù)器的教程
這篇文章主要介紹了Ubuntu16.04搭建FTP服務(wù)器的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12linux中權(quán)限管理命令詳解(chmod/chown/chgrp/unmask)
這篇文章主要介紹了linux中權(quán)限管理命令詳解(chmod/chown/chgrp/unmask)的相關(guān)知識(shí),通過(guò)示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Apache shiro的簡(jiǎn)單介紹與使用教程(與spring整合使用)
Apache Shiro是一個(gè)強(qiáng)大而靈活的開(kāi)源安全框架,它能夠干凈利落地處理身份認(rèn)證,授權(quán),企業(yè)會(huì)話管理和加密這篇文章給大家介紹了Apache shiro的簡(jiǎn)單介紹與使用教程(與spring整合使用),感興趣的朋友一起看看吧2017-10-10Apache啟用GZIP壓縮網(wǎng)頁(yè)傳輸方法
上一篇文章我們已經(jīng)介紹了Apache啟用GZIP壓縮網(wǎng)頁(yè)的方法,這里又發(fā)現(xiàn)了一篇好文章,特分享給大家2013-06-06linux查找大文件指定內(nèi)容的實(shí)現(xiàn)方法
今天小編就為大家分享一篇linux查找大文件指定內(nèi)容的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07CentOS 6.3下源碼安裝LAMP(Linux+Apache+Mysql+Php)運(yùn)行環(huán)境步驟
這篇文章主要介紹了CentOS 6.3下源碼安裝LAMP(Linux+Apache+Mysql+Php)運(yùn)行環(huán)境步驟,需要的朋友可以參考下2014-07-07