Niginx學習筆記(全)

概念與應用

  1. 反向代理

    • 正向代理

    在客戶端(瀏覽器)配置代理服務器,通過代理服務器進行互聯網訪問。客戶端主動配置或設置代理服務器。

    img

    • 反向代理

    客戶端不需要配置代理服務器,反向代理服務器會根據客戶端不同的請求,轉發到不同的實際服務器中去,然後由反向代理服務器返回給客戶端。客戶端對服務器處理無感知。暴露的是反向代理服務器,隱藏了實際服務器的ip和端口。

    img

  2. 動靜分離

    加快網頁解析速度,將動態頁面和靜態頁面在不同服務器上保存,加快解析速度。
    在這裏插入圖片描述

    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

img

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

img

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服務器上。

img
在這裏插入圖片描述

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
在這裏插入圖片描述

img

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

End

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章