概念與應用
-
反向代理
- 正向代理
在客戶端(瀏覽器)配置代理服務器,通過代理服務器進行互聯網訪問。客戶端主動配置或設置代理服務器。
- 反向代理
客戶端不需要配置代理服務器,反向代理服務器會根據客戶端不同的請求,轉發到不同的實際服務器中去,然後由反向代理服務器返回給客戶端。客戶端對服務器處理無感知。暴露的是反向代理服務器,隱藏了實際服務器的ip和端口。
-
動靜分離
加快網頁解析速度,將動態頁面和靜態頁面在不同服務器上保存,加快解析速度。
4、高可用
解決tomcat服務器宕機、nginx服務器本身宕機導致訪問失敗的問題。
安裝
1、安裝依賴包gcc、pcre-devel、zlib-devel、openssl-devel
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
2、下載nginx
nginx下載地址:https://nginx.org/download/
## 解壓
tar -zxvf nginx-1.9.9.tar.gz
##進入nginx目錄
cd nginx-1.9.9
## 配置
./configure --prefix=/usr/local/nginx
# make
make && make install
3、配置nginx.conf
# 打開配置文件
vi /usr/local/nginx/conf/nginx.conf
修改端口和服務器ip
4、啓動nginx
/usr/local/nginx/sbin/nginx -s reload
如果出現報錯:nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
則運行:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
再次啓動即可!
5、查看nginx進程是否啓動
ps -ef | grep nginx
6、web查看
常用命令
所有命令都必須進入到usr/local/nginx/sbin目錄下執行
1、查看版本號
./nginx -v
2、關閉nginx
./nginx -s stop
或
pkill -9 nginx
3、啓動nginx
./nginx
4、重新加載nginx
./nginx -s reload
反向代理設置1
效果:訪問反向代理服務器地址後頁面轉發到其他網址
配置nginx.conf 添加proxy_pass 值爲需要nginx轉發的地址
proxy_pass http://127.0.0.1:8089;
2、重新加載nginx
./nginx -s reload
反向代理設置2
效果:目標服務器有多個tomcat,
當用戶訪問路徑中包含edu則訪問端口爲8080的tomcat
當用戶訪問路徑中包含vod則訪問端口爲8081的tomcat
1、核心配置
server{
listen 9132;
server_name 112.126.60.66;
location ~/edu/{
proxy_pass http://127.0.01:8080;
}
location ~/vod/{
proxy_pass http://127.0.0.1:8081;
}
}
2、配置說明
- ~:表示url包含正則表達式,並區分大小寫
- ~*:表示url包含正則表達式,並且不區分大小寫
- =:用於不含正則表達式的uri前,要求請求字符串與uri嚴格匹配,如果匹配成功,就停止繼續向下搜索並立即處理該請求
- ^~:用於不含正則表達式的uri前,要求nginx服務器找到標誌uri和請求字符串匹配度最高的location後,立即使用此location處理請求,而不再使用location塊中的正則uri和請求字符串做匹配
負載均衡
1、http塊加入配置
upstream 自定義名稱{
server ip:port;
server ip:port;
}
2、server–location配置proxy_pass
location /{
proxy_pass http://自定義名稱
}
3、分配策略
a、輪詢(默認)
每個請求按照實際順序之一分配到不同服務器,如果服務器宕機,會自動剔除
b、weight
權重。默認爲1,權重越高被分配客戶端越高。
upstream 自定義名稱{
server ip:port weight=10;
server ip:port weight=5;
}
c、ip_hash
每個請求按照訪問ip的hash結果分配,這也每個訪客固定訪問一個後端服務器,可以解決session問題。
upstream 自定義名稱{
ip_hash;
server ip:port;
server ip:port;
}
d、fair(第三方)
按後端服務器的響應時間分配服務器,響應時間越短,越優先分配。
upstream 自定義名稱{
server ip:port;
server ip:port;
fair;
}
動靜分離
動態請求和靜態請求(html、css、image等)分開
爲什麼?提高訪問效率
Nginx動靜分離簡單來說就是把動態跟靜態請求分開,不能理解成只是單純的把動態頁面和靜態頁面物理分離,嚴格意義上說應該是動態請求和靜態請求分開,可以理解成使用Nginx處理靜態頁面,tomcat處理動態頁面。動靜分離衝目前實現角度來講大致分爲兩種:
一種是存粹把靜態文件獨立成單獨的域名,放在獨立的服務器上,也是目前主流推崇的方案;
另外一種方法就是動態跟靜態文件混合在一起發佈,通過nginx來分開。
通過location指定不同的後綴名實現不同的請求轉發,通過 expires 參數設置,可以使瀏覽器緩存過期時間,減少與服務器之間的請求和流量,具體 expires 定 義:是給一個資源設定一個過期時間,也就是說無需去服務端證,直接通過瀏覽器自身確認是否過期即可,所以不會產生額外的流量,此種方法非常適合不經常變動的資源。〈如果經常更新的文件,不建議使用expires 來緩存〉,我這裏設置3(1,表示在這3天之內訪問這個url,發送一個請求.比對服務器該文件最後更新時間沒有變化,則不會從服務器抓取,返回狀態碼304,如果有修改,則直接從取務器重新下載,返回狀態碼200。
高可用
當tomcat宕機後nginx會自動排除宕機服務器,採用正常的tomcat訪問。nginx宕機呢?
方案:提供主備nginx兩臺服務器,用keepalived做路由提供訪問。當主nginx服務器宕機後會自動切換到備用nginx服務器上。
1、配置高可用準備工作
a、準備兩臺nginx服務器
b、安裝nginx
c、安裝keepalived
2、在兩臺nginx服務器上安裝keepalived
yum install keepalived -y
keepalived安裝位置爲:/etc/keepalived
3、完成高可用配置
修改/etc/keepalived/keepalived.conf文件
global_defs {
notification_email {
[email protected] #定義報警郵件
}
notification_email_from [email protected] #定義發件人
smtp_server localhost #指定smtp服務器,這裏直接改爲localhost
smtp_connect_timeout 30 #smtp連接超時時間
router_id 112.126.60.166 #標識id,通常爲 hostname,當前部署機器的IP
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 3 #(檢測腳本執行的間隔)
weight 2 #執行sh後,修改當前服務器權重
}
vrrp_instance VI_1 {
state MASTER #設置爲主服務器,備用服務器應設置爲BACKUP
interface eth0 #定義虛擬ip綁定接口 ifconfig命令查詢
virtual_router_id 51 #VRRP組名,兩個節點必須一樣,指明各個節點屬於同一VRRP組
mcast_src_ip 112.126.60.66 #發送多播包的地址,如果不設置默認使用綁定的網卡
priority 100 #優先級,必須高於從服務器
advert_int 1 #組播信息發送間隔,檢測nginx狀態,兩個節點設置必須一樣
authentication { #認證,默認即可。主從需一致。
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
112.126.60.88 #綁定的虛擬ip,可以綁定多個,換行填寫
}
}
編寫nginx狀態檢測腳本 /etc/keepalived/nginx_check.sh,如果 nginx 停止運行,嘗試啓動,如果無法啓動則殺死本機的 keepalived 進程,keepalived將虛擬 ip 綁定到 BACKUP 機器上。內容如下:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/home/wangzi/soft/nginx/sbin/nginx
sleep 5
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
4、啓動nginx和keepalived
keeplived啓動命令:
systemctl start keepalived.service
啓動檢查:
ps -ef | grep keepalived
停止keepalived服務:
systemctl stop keepalived.service
nginx原理
1、Master&&Worker
2、worker爭搶工作
3、一個master多個work好處
a、使用nginx -s reload熱部署,重新加載後空閒work會更新配置,不影響有任務的work
b、每個work是獨立進程的,如果有其中一個work出現問題,其他work相對獨立,可以繼續爭搶request,實現請求過程,不會服務中斷。
4、設置多少個work?
與服務器cpu核數相等最好。
5、連接數worker_connection
a、發送一個請求,佔用worker幾個連接數
(靜態請求)2個或者(動態請求)4個
b、nginx有一個master,四個worker,每個woker支持的最大連接數是1024,支持的最大併發數是多少?
普通的靜態訪問最大併發數:worker_connection*woker_processes/2=2048
http反向代理,最大併發數: worker_connection*woker_processes/4=2014