一、nginx簡(jiǎn)介
1.什么是nginx?
一個(gè)高性能的HTTP和反向代理服務(wù),也是一個(gè)IMAP/POP3/SMTP服務(wù)
特點(diǎn)是占用內(nèi)存少,并發(fā)能力強(qiáng)
2.為什么使用niginx?
互聯(lián)網(wǎng)時(shí)代,海量用戶高并發(fā)已然成為互聯(lián)網(wǎng)的主體。
如何能讓一個(gè)網(wǎng)站承載幾萬(wàn)甚至幾十萬(wàn)個(gè)用戶的持續(xù)訪問(wèn)呢?這是中小網(wǎng)站急需解決的問(wèn)題。
傳統(tǒng)單機(jī)tomcat搭建的網(wǎng)站,在比較理想的狀態(tài)下能夠承受的并發(fā)訪問(wèn)量在 150 到 200 左右。按照并發(fā)訪問(wèn)量占總用戶數(shù)量的 5% 到 10% 這樣計(jì)算,單點(diǎn) tomcat 網(wǎng)站的用戶人數(shù)在 1500 到 4000 左右。遠(yuǎn)遠(yuǎn)不能滿足海量用戶的訪問(wèn)需求。這時(shí)候可以使用負(fù)載均衡來(lái)解決高并發(fā)的問(wèn)題,而nginx就是一款高性能可以實(shí)現(xiàn)負(fù)載均衡的代理服務(wù)器。
應(yīng)用場(chǎng)景:
- http 服務(wù)器,可以做靜態(tài)網(wǎng)頁(yè)的 http 服務(wù)器。
- 配置虛擬機(jī),一個(gè)域名可以被多個(gè) ip 綁定??梢愿鶕?jù)域名的不同把請(qǐng)求轉(zhuǎn)發(fā)給運(yùn)行在不同端口的服務(wù)器。
- 反向代理,負(fù)載均衡。把請(qǐng)求轉(zhuǎn)發(fā)給不同的服務(wù)器。
二、搭建集群
1.在Windows下搭建集群
1.1.在 D 盤新建兩個(gè)新建兩個(gè)目錄 tomcat1、tomcat2
1.2.修改 tomcat2 的端口,例如, 在以 tomcat1 的端口為基礎(chǔ)上+10,修改完,啟動(dòng)這兩個(gè) tomcat,再分別訪問(wèn)
- 訪問(wèn) 8080 端口:
localhost:8080/test/ - 訪問(wèn) 8090 端口:
localhost:8090/test/
1.3.解壓 nginx

修改 ngnix 的 nginx.conf 文件,在 location / 下添加反向代理服務(wù)器,代理 8080 端口:
location / {
root html;
index index.html index.htm;
proxy_pass http://localhost:8080
}
以上只是代理了一臺(tái)服務(wù)器。啟動(dòng) nginx,每次訪問(wèn) localhost/test/, 最后訪問(wèn)的都是8080端口服務(wù)器的數(shù)據(jù)。
1.4.代理集群,例如代理兩臺(tái)服務(wù)器
//需要在http節(jié)點(diǎn)上添加一個(gè)
upstream mz{
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}
//修改location /下的反向代理
proxy_pass http://mz
修改如圖:

另外,還可以給服務(wù)器添加權(quán)重:

表示如果有 6 次訪問(wèn),則有 4 次可能訪問(wèn)到第二個(gè)服務(wù)器。啟動(dòng) nginx,則每次訪問(wèn)localhost/test/,會(huì)有可能訪問(wèn)到8080端口服務(wù)器的數(shù)據(jù),也可能訪問(wèn)到8090端口服務(wù)器的數(shù)據(jù)。
1.5.Session共享問(wèn)題
- 解決方式一(只能在 windows 下好使):
web 服務(wù)器解決(廣播機(jī)制),注意:tomcat 下性能低
修改兩個(gè)地方:- 修改兩個(gè) tomcat 的 server.xml,支持共享,將引擎標(biāo)簽下的
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>注釋去掉
圖片.png - 修改項(xiàng)目的配置文件 web.xml 中添加一個(gè)節(jié)點(diǎn)
<distributable/>
圖片.png
- 修改兩個(gè) tomcat 的 server.xml,支持共享,將引擎標(biāo)簽下的
- 解決方式二:可以將 session 的 id 放入 redis 中
- 解決方式三:保證一個(gè) ip 地址永遠(yuǎn)的訪問(wèn)一臺(tái) web 服務(wù)器,就不存在 session 共享問(wèn)題了,在 nginx 的配置文件中 upstream 中添加 ip_hash(在 Linux 下經(jīng)常使用該方式)
ip_hash 指令能夠?qū)⒛硞€(gè)客戶端 IP 的請(qǐng)求通過(guò)哈希算法定位到同一臺(tái)后端服務(wù)器上。
2.在Linux下搭建集群
2.1.先將 nginx 上傳到 linux 上
2.2.解壓 nginx
2.3.先編譯 nginx
安裝依賴包
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
執(zhí)行編譯
先進(jìn)入 nginx的目錄
執(zhí)行
./configure
2.4.安裝 nginx
- 執(zhí)行
make - 執(zhí)行
make install
2.5.啟動(dòng) nginx:
cd nginx 目錄下
配置文件 conf
啟動(dòng)nginx
./nginx
注:
①在 nginx 目錄下有一個(gè) sbin 目錄,sbin 目錄下有一個(gè) nginx 可執(zhí)行程序
②關(guān)閉 ngnix:
- 關(guān)閉命令:相當(dāng)于找到 nginx 進(jìn)程kill ./nginx -s stop
- 退出命令 ./nginx -s quit等程序執(zhí)行完畢后關(guān)閉,建議使用此命令。
2.6.將端口號(hào) 80 放行
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
將該設(shè)置添加到防火墻的規(guī)則中
/etc/rc.d/init.d/iptables save
2.7.修改 conf 文件和 window 下一樣:配置集群

