Nginx簡介
1、nginx概述
充當http服務器、反向代理服務器、虛擬主機。
Nginx特點:
1、跨平臺,支持linux和window
2、內(nèi)存消耗小、成本低廉
3、穩(wěn)定性高:用于反向代理,宕機的概率微乎其微
使用nginx大大提高了我們網(wǎng)站的響應速度,優(yōu)化了用戶體驗,讓網(wǎng)站的健壯性更上一層樓,
2、反向代理
(1)正向代理
客戶端知道服務器端,通過代理端連接服務器端。代理端代理的是服務器端。
(2)反向代理:我們只需要將請求發(fā)送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數(shù)據(jù)后,再返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器的地址,隱藏了真實服務器的IP地址。
所謂反向,是對正向而言的。服務器端知道客戶端,客戶端不知道服務器端,通過代理端連接服務器端。代理端代理的是客戶端。代理對象剛好相反,所以叫反向代理。
3、負載均衡
單個服務器解決不了,我們增加服務器的數(shù)量,然后將請求分發(fā)到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發(fā)到多個服務器上,將負載分發(fā)到不同服務器,也就是負載均衡。
4、動靜分離
為了加快網(wǎng)站的解析速度,可以把動態(tài)頁面和靜態(tài)頁面有不同的服務器來解析,加快解析速度,降低原來單個服務器的壓力
Nginx安裝
1、linux環(huán)境
pcre、openss、zlib、nginx
如果連接不上,需要檢查下是否開放端口,或者服務器防火墻是否開放端口!
開啟
service firewalld start
重啟
service firewalld restart
關(guān)閉
service firewalld stop
查看開放的端口號
firewall-cmd --list-all
查詢端口是否開放
firewall-cmd --query-port=8080/tcp
設置開放的端口號
firewall-cmd --add-service=http -permanent
sudo firewall-cmd --add-port=80/tcp --permanent
移除端口
firewall-cmd --permanent --remove-port=8080/tcp
重啟防火墻
firewall-cmd -reload
2、window環(huán)境
1、將nginx下載壓縮
2、啟動nginx
(1)直接雙擊nginx.exe,雙擊后一個黑色的彈窗一閃而過
(2)打開cmd命令窗口,切換到nginx解壓目錄下,輸入命令 nginx.exe 或者 start nginx ,回車即可
3、檢查
(1)直接在瀏覽器地址欄輸入網(wǎng)址 http://localhost:80,回車,出現(xiàn)以下頁面說明啟動成功

(2)也可以在cmd命令窗口輸入命令 tasklist /fi "imagename eq nginx.exe" ,出現(xiàn)如下結(jié)果說明啟動成功

nginx默認的端口是80,如果80端口被占用,可以在其conf路徑下的nginx.conf配置文件中進行修改

檢查80端口是否被占用的命令是: netstat -ano | findstr 0.0.0.0:80 或 netstat -ano | findstr "80"
當我們修改了nginx的配置文件nginx.conf 時,不需要關(guān)閉nginx后重新啟動nginx,只需要執(zhí)行命令 nginx -s reload 即可讓改動生效
Nginx操作的常用和配置文件
nginx常用命令
1、查詢nginx版本號
linux:./nginx -v
win:nginx -v
2、啟動nginx
linux:./nginx
win:start nginx
3、關(guān)閉nginx
linux:./nginx -s stop
win:nginx -s stop
4、重新加載nginx配置
linux:./nginx -s reload
win:nginx -s reload
5、安全退出
./nginx -s quit
6、查看nginx進程
ps aux|grep nginx
nginx配置文件
打開nginx.conf我們可以很明顯的將nginx.conf配置文件分為三部分
第一部分:全局塊
主要是設置一些影響nginx服務器整體運行的配置指令,主要包括配置運行nginx服務器的用戶(組)、允許生成的worker process數(shù),進程pid存放路徑,日志存放路徑和類型以及配置文件的引入等。
worker_processes 1;
這個是nginx服務器并發(fā)處理服務的關(guān)鍵配置,worker_processes值越大,可以支持的并發(fā)處理量也越多,但是會受到硬件、軟件等設備的制約
第二部分:events塊
events塊主要影響nginx服務器與用戶的網(wǎng)絡鏈接,常用的設置包括是否開啟對多個work process下的網(wǎng)絡鏈接進行序列化,是否允許同時接收多個網(wǎng)絡連接,選取哪種事件驅(qū)動模型來處理連接請求,每個word process 可以同時支持的最大連接數(shù)等。
這部分的配置對nginx的性能影響大,在實際中應該靈活配置
events {
worker_connections 1024;
}
表示每個work process 支持的最大連接數(shù)為1024
第三部分:http塊
這算是nginx服務器配置中最頻繁的部分,代理、緩存和日志定義等多數(shù)功能和第三方模塊的配置都在這里,需要注意的是http塊包含了http全局塊和server塊。
1、http全局塊:
http全局配置的指令包括文件引入、MIME-TYPE定義、日志自定義、連接超時時間、單鏈接請求數(shù)上限等。
2、service塊:
這塊和虛擬主機有密切關(guān)系,虛擬主機從用戶角度看,和一臺獨立的硬件主機是完全一樣的,該技術(shù)的產(chǎn)生是為了節(jié)省互聯(lián)網(wǎng)服務器硬件成本。
每個http塊可以包括多個server塊,而每個server塊就相當于一個虛擬主機。
而server塊也分為全局server塊,以及可以同時包含多個location塊。
1、全局server塊
最常見的配置是本虛擬機主機的監(jiān)聽配置和本虛擬主機的名稱或IP配置
2、location塊
一個server可以配置多個location塊
這塊主要作用是基于nginx服務器接收到的請求字符串,對虛擬主機名稱之外的字符串進行匹配,對特定的請求進行處理。地址定向、數(shù)據(jù)緩存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。
Niginx之反向代理
1、首先準備一個項目,分別運行在兩個不一樣的端口號(打包成jar 運行)

1、反向代理實例一
使用nginx反向代碼,代理這個端口
nginx監(jiān)聽端口為9001
訪問http://localhost:9001/ 直接跳轉(zhuǎn)到127.0.0.1:8081
配置nginx.conf文件
server {
listen 9001;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8081/;
}
}

2、反向代理實例二
使用nginx反向代理,根據(jù)訪問的路徑跳轉(zhuǎn)到不同端口的服務中
nginx監(jiān)聽端口為9002
訪問http://127.0.0.1:9002/edu/ 直接跳轉(zhuǎn)到127.0.0.1:8081
訪問http://127.0.0.1:9002/vod/ 直接跳轉(zhuǎn)到127.0.0.1:8082
server {
listen 9002;
server_name localhost;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8081;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8082;
}
}

location指令說明:
該指令用于匹配URL
- =:用于不含正則表達式的url,要求請求字符串與url嚴格匹配,如果匹配成功就繼續(xù)向下搜索并立即處理該請求。
- ~:用于表示url包含正則表達式,并且區(qū)分大小寫
- ~*:用于表示url包含正則表達式,并且不區(qū)分大小寫
- ^~:用于不含正則表達式的url前,要求nginx服務器找到標識url和請求字符串匹配度高的location后,立即使用此location處理請求,而不再使用location塊中的正則url和請求字符串做匹配。
注意:如果url包含正則表達式,則必須要有或者*標識。
Nginx負載均衡
niginx將原先請求集中到單個服務器上改為將請求分發(fā)到多個服務器上,將負載分發(fā)到不同的服務器,也就是我們所說的負載均衡

實例
監(jiān)聽端口為8052
訪問http://localhost:8052 可以隨機訪問到127.0.0.1:8081或127.0.0.1:8082
對nginx.conf進行配置:
#負載均衡配置的規(guī)則
upstream ch{
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
}
server {
listen 8052;
server_name localhost;
location / {
root html;
proxy_pass http://ch; #這邊的ch要與上面的配置規(guī)則的ch一致才行
index index.html index.htm;
}
}
#重啟配置之后,返回http://localhost:8052/可以看到 分別調(diào)用了一次8081和8082,跟后面weight權(quán)重有關(guān),權(quán)重越大,訪問的頻率越高
nginx分配策略
負載均衡就是將負載分攤到不同的服務單元,既保證服務的可用性,又保證響應足夠快,給用戶很好的體驗。在linux下有nginx、LVS、Haproxy等等服務可以提供負載均衡服務,而且nginx提供了幾種分配方式(策略):
1、輪詢(默認)
每個請求按照時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
2、weight
weight代表權(quán)重默認為1,權(quán)重越高被分配的客戶端越多
(指定輪詢的機率,weight和訪問比率成正比,用于后端服務器性能不均的情況)
3、ip_hash
每個請求訪問的ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session問題,如:
upstream server_pool{
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
4、fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優(yōu)先分配
upstream server_pool{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
fair;
}
Nginx動態(tài)分離
nginx動靜分離簡單來說就是把動態(tài)和靜態(tài)請求分開,不能單理解成動態(tài)頁面和靜態(tài)頁面分開。動靜分離可以理解成nginx處理靜態(tài)頁面,tomcat處理動態(tài)頁面,動靜分離分為兩種:
1、把靜態(tài)文件獨立成單獨的域名,放在獨立的服務器上,主流的方案
2、把靜態(tài)和動態(tài)文件混合一起發(fā)布,通過nginx來分開(使用location指定不同的后綴名實現(xiàn)不同的請求轉(zhuǎn)發(fā))
Expires參數(shù):給一個資源設定一個過期的時間,就是無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可,不會產(chǎn)生額外的流量,此種適合不經(jīng)常變動的資源(如果經(jīng)常更新的文件,不建議使用expires緩存)
