tip:? ?nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器?
nginx? 的應用場景 (
? ? ? ? ? ? ? ? ? ? ? ? ? ? http服務器,可以做網頁靜態(tài)服務器;
? ? ? ? ? ? ? ? ? ? ? ? ? ? 虛擬主機奸攻;
? ? ? ? ? ? ? ? ? ? ? ? ? ?反向代理,負載均衡典尾。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時邪蛔,需要用多臺服務器集群可以使用nginx做反向代理急黎。并且多臺服務器可以平均分擔負載扎狱,不會因為某臺服務器負載高宕機而某臺服務器閑置的情況。)
windows常用命令
nginx.exe -s stop –停止
nginx優(yōu)缺點
占內存小勃教,可以實現(xiàn)高并發(fā)連接淤击、處理響應快。
可以實現(xiàn)http服務器故源、虛擬主機污抬、反向代理、負載均衡绳军。
nginx配置簡單
可以不暴露真實服務器IP地址
一:反向代理
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求印机,然后將請求轉發(fā)給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端门驾,此時代理服務器對外就表現(xiàn)為一個反向代理服務器射赛。
啟動一個Tomcat 127.0.0.1:8080
使用nginx反向代理 8080.zyhome.com 直接跳轉到127.0.0.1:8080
Host文件新增
127.0.0.1 8080.zyhome.com
127.0.0.1 8081.zyhome.com
?nginx.conf 配置
server {
? ? ? ? listen? ? ? 80;
? ? ? ? server_name? 8080.zyhome.com;
? ? ? ? location / {
? ? proxy_pass? http://127.0.0.1:8080;
index? index.html index.htm;
? ? ? ? }
? ? }
? ? server {
? ? ? ? listen? ? ? 80;
? ? ? ? server_name? 8081.zyhome.com;
? ? ? ? location / {
? ? proxy_pass? http://127.0.0.1:8081;
index? index.html index.htm;
? ? ? ? }
? ? }
二:負載均衡
負載均衡策略
輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉奶是,能自動剔除楣责。?
upstream backserver {?
server 192.168.0.14;?
server 192.168.0.15;?
}?
2、指定權重
指定輪詢幾率聂沙,weight和訪問比率成正比秆麸,用于后端服務器性能不均的情況。?
upstream backserver {?
server 192.168.0.14 weight=10;?
server 192.168.0.15 weight=10;?
}?
3及汉、IP綁定 ip_hash
每個請求按訪問ip的hash結果分配沮趣,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題坷随。?
upstream backserver {?
ip_hash;?
server 192.168.0.14:88;?
server 192.168.0.15:80;?
}?
4房铭、fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優(yōu)先分配甸箱。?
upstream backserver {?
server server1;?
server server2;?
fair;?
}?
5育叁、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器芍殖,后端服務器為緩存時比較有效。?
upstream backserver {?
server squid1:3128;?
server squid2:3128;?
hash $request_uri;?
hash_method crc32;?
}?
配置代碼
upstream backserver {
???? server 127.0.0.1:8080;
???? server 127.0.0.1:8081;
??? }
??? server {
??????? listen?????? 80;
??????? server_name? www.zyhome.com;
??????? location / {
???????????????????? ??? proxy_pass? http://backserver;
???????????????????? ?????????? index? index.html index.htm;
??????? }
??? }
? ?宕機輪訓配置規(guī)則
server {
??????? listen?????? 80;
??????? server_name? www.zyhome.com;
??????? location / {
???????????????????? ??? proxy_pass? http://backserver;
??????????????????????????????? index? index.html index.htm;
??????????????????????????????? proxy_connect_timeout 1;
??????????? proxy_send_timeout 1;
??????????? proxy_read_timeout 1;
??????? }
???????????????????? }
三:配置DDOS
限制請求次數(shù)
設置Nginx谴蔑、Nginx Plus的連接請求在一個真實用戶請求的合理范圍內豌骏。比如,如果你覺得一個正常用戶每兩秒可以請求一次登錄頁面隐锭,你就可以設置Nginx每兩秒鐘接收一個客戶端IP的請求(大約等同于每分鐘個請求)窃躲。
limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;
server {
...
location /login.html {
limit_req zone=one;
...
}
}
`limit_req_zone`命令設置了一個叫one的共享內存區(qū)來存儲請求狀態(tài)的特定鍵值,在上面的例子中是客戶端IP($binary_remote_addr)钦睡。location塊中的`limit_req`通過引用one共享內存區(qū)來實現(xiàn)限制訪問/login.html的目的蒂窒。
四:nginx+keepalived? 實現(xiàn)高可用
linux操作nginx
Nginx是一款輕量級的網頁服務器、反向代理服務器。相較于Apache洒琢、lighttpd具有占有內存少秧秉,穩(wěn)定性高等優(yōu)勢。它最常的用途是提供反向代理服務衰抑。
linux安裝
在Centos下象迎,yum源不提供nginx的安裝,可以通過切換yum源的方法獲取安裝呛踊。也可以通過直接下載安裝包的方法砾淌,以下命令均需root權限執(zhí)行:
首先安裝必要的庫(nginx 中gzip模塊需要 zlib 庫,rewrite模塊需要 pcre 庫谭网,ssl 功能需要openssl庫)汪厨。選定/usr/local為安裝目錄,以下具體版本號根據(jù)實際改變愉择。
安裝PCRE庫
$ cd /usr/local/
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
$ tar -zxvf pcre-8.36.tar.gz
$ cd pcre-8.36
$ ./configure
$ make
$ make install
./configure報錯
configure: error: You need a C++ compiler for C++ support.
解決辦法
yum install -y gcc gcc-c++
安裝zlib庫
$ cd /usr/local/
$ wget http://zlib.net/zlib-1.2.8.tar.gz
$ tar -zxvf zlib-1.2.8.tar.gz
$ cd zlib-1.2.8
$ ./configure
$ make
$ make install
安裝ssl
$ cd /usr/local/
$ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
$ tar -zxvf openssl-1.0.1j.tar.gz
$ ./config
$ make
$ make install
安裝nginx
$ cd /usr/local/
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz
$ tar -zxvf nginx-1.8.0.tar.gz
$ cd nginx-1.8.0?
$ ./configure --prefix=/usr/local/nginx
$ make
$ make install
安裝常見錯誤:
Nginx啟動提示找不到libpcre.so.1解決方法
如果是32位系統(tǒng)
[root@lee ~]# ?ln -s /usr/local/lib/libpcre.so.1 /lib
如果是64位系統(tǒng)
[root@lee ~]# ?ln -s /usr/local/lib/libpcre.so.1 /lib64
然后在啟動nginx就OK了
[root@lee ~]# /usr/local/webserver/nginx/sbin/nginx
啟動nginx
$ /usr/local/nginx/sbin/nginx
檢查是否啟動成功:打開瀏覽器訪問此機器的 IP骄崩,如果瀏覽器出現(xiàn) Welcome to nginx! 則表示 Nginx 已經安裝并運行成功。
常用命令
重啟:
$ /usr/local/nginx/sbin/nginx 啟動命令
重啟:
$ /usr/local/nginx/sbin/nginx –s reload
停止:
$ /usr/local/nginx/sbin/nginx –s stop
測試配置文件是否正常:
$ /usr/local/nginx/sbin/nginx –t
強制關閉:
$ pkill nginx
啟動Nginx + Keepalived高可用
什么是Keepalived
Keepalived是一個免費開源的薄辅,用C編寫的類似于layer3, 4 & 7交換機制軟件要拂,具備我們平時說的第3層、第4層和第7層交換機的功能站楚。主要提供loadbalancing(負載均衡)和?high-availability(高可用)功能脱惰,負載均衡實現(xiàn)需要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是通過VRRP協(xié)議實現(xiàn)多臺機器之間的故障轉移服務窿春。?
上圖是Keepalived的功能體系結構拉一,大致分兩層:用戶空間(user space)和內核空間(kernel space)。?
內核空間:主要包括IPVS(IP虛擬服務器旧乞,用于實現(xiàn)網絡服務的負載均衡)和NETLINK(提供高級路由及其他相關的網絡功能)兩個部份蔚润。?
用戶空間:
WatchDog:負載監(jiān)控checkers和VRRP進程的狀況
VRRP Stack:負載負載均衡器之間的失敗切換FailOver,如果只用一個負載均稀器尺栖,則VRRP不是必須的嫡纠。
Checkers:負責真實服務器的健康檢查healthchecking,是keepalived最主要的功能延赌。換言之除盏,可以沒有VRRP Stack,但健康檢查healthchecking是一定要有的挫以。
IPVS wrapper:用戶發(fā)送設定的規(guī)則到內核ipvs代碼
Netlink Reflector:用來設定vrrp的vip地址等者蠕。
Keepalived的所有功能是配置keepalived.conf文件來實現(xiàn)的。
安裝keepalived
下載keepalived地址:http://www.keepalived.org/download.html
解壓安裝:
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
yum install -y openssl openssl-devel(需要安裝一個軟件包)
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
make && make install
keepalived安裝成Linux系統(tǒng)服務
將keepalived安裝成Linux系統(tǒng)服務掐松,因為沒有使用keepalived的默認安裝路徑(默認路徑:/usr/local),安裝完成之后踱侣,需要做一些修改工作:
首先創(chuàng)建文件夾粪小,將keepalived配置文件進行復制:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
然后復制keepalived腳本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
可以設置開機啟動:chkconfig keepalived on,到此我們安裝完畢!
keepalived 常用命令
service keepalived start
service keepalived stop
配置nginx主備自動重啟
第三步:對配置文件進行修改:vim /etc/keepalived/keepalived.conf
keepalived.conf配置文件說明:
(一)Master????
! Configuration File for keepalived
global_defs {
?? router_id bhz005 ##標識節(jié)點的字符串抡句,通常為hostname
}
## keepalived 會定時執(zhí)行腳本并且對腳本的執(zhí)行結果進行分析探膊,動態(tài)調整vrrp_instance的優(yōu)先級。這里的權重weight 是與下面的優(yōu)先級priority有關玉转,如果執(zhí)行了一次檢查腳本成功突想,則權重會-20,也就是由100 - 20 變成了80究抓,Master 的優(yōu)先級為80 就低于了Backup的優(yōu)先級90猾担,那么會進行自動的主備切換。
如果腳本執(zhí)行結果為0并且weight配置的值大于0刺下,則優(yōu)先級會相應增加绑嘹。
如果腳本執(zhí)行結果不為0 并且weight配置的值小于0,則優(yōu)先級會相應減少橘茉。
vrrp_script chk_nginx {
??? script "/etc/keepalived/nginx_check.sh" ##執(zhí)行腳本位置
??? interval 2 ##檢測時間間隔
??? weight -20 ## 如果條件成立則權重減20(-20)
}
## 定義虛擬路由 VI_1為自定義標識工腋。
vrrp_instance VI_1 {
state MASTER?? ## 主節(jié)點為MASTER,備份節(jié)點為BACKUP
??? ## 綁定虛擬IP的網絡接口(網卡)畅卓,與本機IP地址所在的網絡接口相同(我這里是eth6)
interface eth6?
virtual_router_id 172? ## 虛擬路由ID號
??? mcast_src_ip 192.168.1.172? ## 本機ip地址
??? priority 100? ##優(yōu)先級配置(0-254的值)
??? Nopreempt? ##
??? advert_int 1 ## 組播信息發(fā)送間隔擅腰,倆個節(jié)點必須配置一致,默認1s
??? authentication {?
??????? auth_type PASS
??????? auth_pass bhz ## 真實生產環(huán)境下對密碼進行匹配
??? }
??? track_script {
??????? chk_nginx
??? }
??? virtual_ipaddress {
??????? 192.168.1.170 ## 虛擬ip(vip)翁潘,可以指定多個
??? }
}
(二)Backup
! Configuration File for keepalived
global_defs {
?? router_id bhz006
}
vrrp_script chk_nginx {
??? script "/etc/keepalived/nginx_check.sh"
??? interval 2
??? weight -20
}
vrrp_instance VI_1 {
??? state BACKUP
??? interface eth7
??? virtual_router_id 173
??? mcast_src_ip 192.168.1.173
??? priority 90 ##優(yōu)先級配置
??? advert_int 1
??? authentication {
??????? auth_type PASS
??????? auth_pass bhz
??? }
??? track_script {
??????? chk_nginx
??? }
??? virtual_ipaddress {
??????? 192.168.1.170
??? }
}
(三)nginx_check.sh 腳本:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
??? /usr/local/nginx/sbin/nginx
??? sleep 2
??? if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
??????? killall keepalived
??? fi
fi
我們需要把master的keepalived配置文件 copy到master機器(172)的 /etc/keepalived/ 文件夾下趁冈,在把backup的keepalived配置文件copy到backup機器(173)的 /etc/keepalived/ 文件夾下,最后把nginx_check.sh腳本分別copy到兩臺機器的 /etc/keepalived/文件夾下拜马。
nginx_check.sh腳本授權渗勘。賦予可執(zhí)行權限:chmod +x /etc/keepalived/nginx_check.sh
啟動2臺機器的nginx之后。我們啟動兩臺機器的keepalived
? /usr/local/nginx/sbin/nginx
? service keepalived start
? ps -ef | grep nginx
? ps -ef | grep keepalived
? 可以進行測試俩莽,首先看一下倆臺機器的ip a 命令下 都會出現(xiàn)一個虛擬ip旺坠,我們可以停掉? 一個機器的keepalived,然后測試扮超,命令:service keepalived stop取刃。結果發(fā)現(xiàn)當前停掉的機器已經不可用,keepalived會自動切換到另一臺機器上瞒津。
我們可以測試在nginx出現(xiàn)問題的情況下蝉衣,實現(xiàn)切換,這個時候我們只需要把nginx的配置文件進行修改巷蚪,讓其變得不可用,然后強殺掉nginx進程即可濒翻,發(fā)現(xiàn)也會實現(xiàn)自動切換服務器節(jié)點屁柏。
自動重啟不了啦膜,解決辦法
查看腳本是否有運行的權限
如果你是root登陸的話(不是的話,切換到root用戶淌喻,對*.sh賦可執(zhí)行的權限)?
chmod 777 *.sh ? ? ? ? ?賦予權限
?or
chmod +x? *.sh
然后運行就OK了僧家,即有權限對文件進行刪除等操作。