Nginx具體應(yīng)用
部署靜態(tài)資源
Nginx相對(duì)于Tomcat處理靜態(tài)資源的能力更加高效,所以在生產(chǎn)環(huán)境下一般都會(huì)將Nginx可以作為靜態(tài)web服務(wù)器來部署靜態(tài)資源
- 靜態(tài)資源: 在服務(wù)端真實(shí)存在并且能夠直接展示的一些html頁(yè)面、css文件、js文件、圖片、視頻等資源文件
- 將靜態(tài)資源部署到Nginx非常簡(jiǎn)單,只需要將靜態(tài)資源文件放到到Nginx安裝目錄下的html目錄中就可以正常訪問
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# 監(jiān)聽80端口
listen 80;
# 服務(wù)器的IP地址(域名)
server_name localhost;
# 處理80端口的location塊,用來匹配客戶端請(qǐng)求的url,匹配到后去根目錄找對(duì)應(yīng)的文件
location / {
# 指定靜態(tài)資源的根目錄,默認(rèn)當(dāng)前目錄是配置文件所在的conf目錄,html目錄和conf目錄同級(jí)
root html;
# 指定默認(rèn)訪問的首頁(yè)(可以指定多個(gè),中間用空格隔開,以";"結(jié)尾),默認(rèn)當(dāng)前目錄是我們指定的根目錄
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
正向/反向代理
正向代理: 為了從目標(biāo)服務(wù)器取得內(nèi)容, 客戶端向代理服務(wù)器發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)服務(wù)器的地址,然后代理將請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器并將獲得的內(nèi)容返回給客戶端
- 正向代理是給客戶端設(shè)置代理服務(wù)器,客戶端知道代理服務(wù)器的存在, 通過代理服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求最終訪問到目標(biāo)服務(wù)器
- 正向代理的典型用途是為在防火墻內(nèi)的局域網(wǎng)客戶端提供訪問Internet的途徑即通過代理訪問無法訪問的資源
反向代理: 用戶直接訪問反向代理服務(wù)器就可以獲得目標(biāo)服務(wù)器的資源(用戶不需要指定目標(biāo)服務(wù)器的地址), 反向代理服務(wù)器負(fù)責(zé)將請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器
- 反向代理服務(wù)器也是位于用戶與目標(biāo)服務(wù)器之間,但卻是給服務(wù)端設(shè)置代理服務(wù)器(用戶不知道它的存在),用戶以為自己訪問的就是目標(biāo)服務(wù)器
正向代理和反向代理的區(qū)別
-
正向代理隱藏的是用戶
: 原始服務(wù)器接收的是代理服務(wù)器的請(qǐng)求,用戶知道可以通過代理服務(wù)器訪問無法訪問的資源(幫助客戶端訪問目標(biāo)服務(wù)器) -
反向代理隱藏的是服務(wù)器
: 用戶以為自己訪問的是目標(biāo)服務(wù)器,其實(shí)自己訪問的資源是通過反向代理服務(wù)器轉(zhuǎn)發(fā)的(幫助目標(biāo)服務(wù)器統(tǒng)一處理請(qǐng)求)
負(fù)載均衡
隨著業(yè)務(wù)流量越來越大并且業(yè)務(wù)邏輯也越來越復(fù)雜, 單臺(tái)服務(wù)器的性能及單點(diǎn)故障問題就凸顯出來了, 因此需要多臺(tái)服務(wù)器組成應(yīng)用集群進(jìn)行性能的水平擴(kuò)展
- 應(yīng)用集群: 將同一應(yīng)用部署到多臺(tái)機(jī)器上組成應(yīng)用集群,集群接收
負(fù)載均衡器
分發(fā)的請(qǐng)求進(jìn)行業(yè)務(wù)處理并返回響應(yīng)數(shù)據(jù) - 負(fù)載均衡器: 將用戶請(qǐng)求根據(jù)對(duì)應(yīng)的負(fù)載均衡算法分發(fā)到應(yīng)用集群中的一臺(tái)服務(wù)器進(jìn)行處理,既保證服務(wù)的可用性又保證響應(yīng)足夠快
- 注意: Nginx是在服務(wù)端實(shí)現(xiàn)負(fù)載均衡,在SpringCloud的客戶端我們也可以實(shí)現(xiàn)負(fù)載均衡
負(fù)載均衡的規(guī)則
名稱 | 說明 |
---|---|
輪詢(默認(rèn)方式) | 每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器掛掉能自動(dòng)剔除 |
weight | 權(quán)重方式(權(quán)重默認(rèn)為 1,權(quán)重越高請(qǐng)求分發(fā)機(jī)率越高) |
ip_hash | 每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器(IP地址固定),可以解決session的問題 |
least_conn | 依據(jù)最少連接方式,分發(fā)給處理連接少的服務(wù)器 |
url_hash | 依據(jù)url分配方式,一個(gè)固定的url對(duì)應(yīng)的服務(wù)器也是固定的 |
fair | 按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的服務(wù)器優(yōu)先分配請(qǐng)求 |
# 不指定默認(rèn)采用輪詢的方式實(shí)現(xiàn)負(fù)載均衡
upstream myserver{
server 192.168.77.130:8080;
server 192.168.77.130:8081;
}
# 采用權(quán)重的方式實(shí)現(xiàn)負(fù)載均衡
upstream myserver{
server 192.168.77.130:8080 weight=10;
server 192.168.77.130:8081 weight=5;
}
# 訪問ip的hash結(jié)果實(shí)現(xiàn)負(fù)載均衡
upstream myserver{
ip_hash;
server 192.168.77.130:8080;
server 192.168.77.130:8081;
}
# 按后端服務(wù)器的響應(yīng)時(shí)間實(shí)現(xiàn)負(fù)載均衡
upstream myserver{
server 192.168.77.130:8080;
server 192.168.77.130:8081;
fair;
}
需求: 瀏覽器地址欄輸入地址http://192.168.17.129/edu/a.html,根據(jù)負(fù)載均衡效果將請(qǐng)求平均分配到兩臺(tái)tomcat服務(wù)器的8080和8081
端口中
- 在服務(wù)器的兩臺(tái)tomcat里面webapps目錄中創(chuàng)建web
項(xiàng)目edu
,在edu文件夾中創(chuàng)建頁(yè)面a.html
第一步: 在http塊中添加upstream指令
定義一組服務(wù)器,新增一個(gè)server塊采用負(fù)載均衡的規(guī)則將請(qǐng)求轉(zhuǎn)發(fā)到集群中的某一臺(tái)服務(wù)器
第二步: 訪問http://192.168.77.130/edu/a.html發(fā)現(xiàn)結(jié)果在8080和8081兩個(gè)服務(wù)之間切換
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# upstream指令可以定義一組服務(wù)器
upstream targetServer{
# 默認(rèn)使用輪詢的方式實(shí)現(xiàn)負(fù)載均衡
server 192.168.17.129:8080;
server 192.168.17.129:8081;
}
server {
# 監(jiān)聽的端口
listen 80;
# nginx服務(wù)的地址
server_name localhost;
location / {
# 添加定義的服務(wù)地址,使用定義好的targetServer
proxy_pass http://targetServe
}
}
}
動(dòng)靜分離
Nginx動(dòng)靜分離不能理解成只是單純的把動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面物理分離,嚴(yán)格意義上說應(yīng)該是把動(dòng)態(tài)請(qǐng)求跟靜態(tài)請(qǐng)求分開
動(dòng)靜分離從目前實(shí)現(xiàn)角度來講大致分為兩種
- 第一種方案也是目前主流推崇的方案就是把靜態(tài)文件獨(dú)立成單獨(dú)的域名然后放在獨(dú)立的服務(wù)器上,如使用Nginx服務(wù)器處理靜態(tài)頁(yè)面,Tomcat服務(wù)器處理動(dòng)態(tài)頁(yè)面
- 第二種方案就是把動(dòng)態(tài)跟靜態(tài)文件混合在一起發(fā)布,通過
nginx
來分開動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求,具體就是通過location指定不同的后綴名實(shí)現(xiàn)不同的請(qǐng)求轉(zhuǎn)發(fā)
對(duì)于不經(jīng)常變動(dòng)的資源可以使用Expires
參數(shù)給一個(gè)資源(請(qǐng)求)設(shè)定一個(gè)過期時(shí)間,這樣瀏覽器每次訪問的時(shí)候可以走緩存的數(shù)據(jù),減少瀏覽器與服務(wù)器之前的請(qǐng)求
- 用戶在第一次訪問服務(wù)器后瀏覽器中會(huì)將請(qǐng)求對(duì)應(yīng)的資源進(jìn)行緩存,下次訪問的時(shí)候如果緩存的資源沒有過期且服務(wù)端對(duì)應(yīng)的資源也沒有更新就直接走緩存
- 滿足則返回瀏覽器緩存的數(shù)據(jù)并返回狀態(tài)碼304,不滿足則需要從服務(wù)器重新下載數(shù)據(jù)并返回狀態(tài)碼200
第一步: 在liunx系統(tǒng)中/data
目錄下準(zhǔn)備靜態(tài)資源,如www/a.html
和image/1.png
第二步: 在nginx的配置文件的location塊
配置要訪問的靜態(tài)資源路徑
-
autoindex on
: 在訪問靜態(tài)資源目錄時(shí),能夠顯示目錄里面的內(nèi)容 -
expire
: 設(shè)置緩存過期時(shí)間
server {
# 監(jiān)聽的端口
listen 80;
# nginx的服務(wù)地址
server_name 192.168.77.129;
# http://192.168.77.129/www/a.html
location /www/ {
root /data/;
index index.html index.htm;
# http://192.168.77.129/image/
location /image/ {
root /data/;
# 顯示image目錄的內(nèi)容
autoindex on;
}
}
反向代理一臺(tái)服務(wù)器
需求: 打開瀏覽器在瀏覽器地址欄輸入地址www.123.com跳轉(zhuǎn)到liunx系統(tǒng)中tomcat的主頁(yè)面中
第一步: 在windows系統(tǒng)的host文件進(jìn)行域名和ip對(duì)應(yīng)關(guān)系的配置
192.168.17.129 www.123.com
第二步: 在nginx.conf配置文件中添加proxy_pass
屬性進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)的配置(反向代理配置)
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 在http塊中新增一個(gè)server塊,用來將請(qǐng)求轉(zhuǎn)發(fā)
server {
# 監(jiān)聽80端口
listen 80;
server_name 192.168.17.129;
location / {
# 反向代理配置,將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器
proxy_pass http://127.0.0.1:8080;
}
}
}
反向代理多臺(tái)服務(wù)器
使用nginx反向代理(nginx監(jiān)聽端口為9001),根據(jù)訪問的路徑跳轉(zhuǎn)到不同端口的服務(wù)中,注意放行8080/8081/9001
對(duì)外訪問的端口
第一步: 準(zhǔn)備兩個(gè)文件夾安裝兩個(gè)tomcat服務(wù)器,修改服務(wù)器的conf/erver.xml
配置文件,修改它們的端口號(hào)防止沖突
<Server port ="8015" shutdown="SHYTDOWN" >
<Connector port="8080" protocol="HTTP/1.1">
<Connector port="8019" protocol="AJP/1.3">
第二步: 在兩個(gè)Tomcat的webapps目錄下分布創(chuàng)建web項(xiàng)目edu和vod
并存放對(duì)應(yīng)的測(cè)試文件a.html
文章來源:http://www.zghlxwxcb.cn/news/detail-764911.html
<!--edu/a.html-->
<h1>8080<h1>
<!--vod/a.html-->
<h1>8081<h1>
第三步: 在http塊中添加一個(gè)新的server塊并添加兩個(gè)location塊文章來源地址http://www.zghlxwxcb.cn/news/detail-764911.html
- 訪問http://192.168.17.129:9001/edu/a.html直接跳轉(zhuǎn)到http://127.0.0.1:8080/edu/a.html
- 訪問http://192.168.17.129:9001/vod/a.html直接跳轉(zhuǎn)到http://127.0.0.1:8080/vod/a.html
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 在http塊中新增一個(gè)server塊,用來將請(qǐng)求轉(zhuǎn)發(fā)
server {
# 監(jiān)聽9001端口
listen 9001;
server_name 192.168.17.129;
location ~ /edu/ {
# 反向代理配置,將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
# 反向代理配置,將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器
proxy_pass http://127.0.0.1:8081;
}
}
}
配置高可用
到了這里,關(guān)于03Nginx的靜態(tài)資源部署,反向代理,負(fù)載均衡,動(dòng)靜分離的配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!