下文給大家?guī)韓ginx動(dòng)態(tài)代理及負(fù)載均衡的學(xué)習(xí)之旅,希望能夠給大家在實(shí)際運(yùn)用中帶來一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用創(chuàng)新互聯(lián)建站在行業(yè)內(nèi)累計(jì)的經(jīng)驗(yàn)來做一個(gè)解答。
1.正向代理與反向代理的區(qū)別?
正向代理:是一個(gè)位于客戶端和原始云服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端。正向代理的典型用途為在防火墻內(nèi)的局域網(wǎng)客戶端提供訪問Internet的途徑.
反向代理:反向代理是代理服務(wù)器的一種,服務(wù)器根據(jù)客戶端的請(qǐng)求,從其關(guān)聯(lián)的一組或多組后端服務(wù)器(如Web服務(wù)器)上獲取資源,然后再將這些資源返回給客戶端,客戶端只會(huì)得知反向代理的IP地址或者域名,而不知道在代理服務(wù)器后面的服務(wù)器簇的存在.
2.nginx概述
Nginx是一款優(yōu)秀的反向代理服務(wù)器程序,能夠?yàn)槿舾膳_(tái)服務(wù)器提供反向代理服務(wù),一方面為客戶端提供的統(tǒng)一的訪問地址,另一方面為后臺(tái)多個(gè)服務(wù)器提供了負(fù)載均衡的能力。Nginx是目前最主流的反向代理服務(wù)器,能夠提供可靠的負(fù)載均衡、動(dòng)靜分離的能力。
a. 下載地址
http://nginx.org/en/download.html
b. 安裝
將下載好的安裝包解壓到一個(gè)沒有中文沒有空格的目錄下即可。
c. windows下常用命令
驗(yàn)證配置是否正確: nginx -t
查看Nginx的版本號(hào):nginx -V
啟動(dòng)Nginx:start nginx
快速停止或關(guān)閉Nginx:nginx -s stop
正常停止或關(guān)閉Nginx:nginx -s quit
配置文件修改重裝載命令:nginx -s reload
d. 配置
nginx的工作是基于[conf/nginx.conf]配置文件來進(jìn)行的。
nginx.conf的配置結(jié)構(gòu):
http{ #代表處理http請(qǐng)求
#配置一個(gè)虛擬服務(wù)器
server{
#此虛擬服務(wù)器接收對(duì)80端口的訪問
listen 80;
#此虛擬服務(wù)器接收對(duì)localhost主機(jī)名的訪問
server_name localhost;
#當(dāng)訪問/user資源時(shí)由此配置處理
location /user{
規(guī)則
}
#當(dāng)訪問/order資源時(shí)由此配置處理
location /order{
規(guī)則
}
...
}
#其他Server配置
server ...
...
}
3.nginx案例實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)
通過Nginx實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),通過配置nginx.conf轉(zhuǎn)發(fā)策略,使得本來訪問tomcate:8080端口轉(zhuǎn)交由訪問nginx:8088端口
當(dāng)客戶端訪問http://www.aaa.com時(shí),由nginx轉(zhuǎn)發(fā)給http://127.0.0.1:8080端口進(jìn)行處理
配置hosts文件
127.0.0.1 www.aaa.com
在nginx.conf中配置
http{
#為nginx配置一個(gè)虛擬服務(wù)器,
server {
#監(jiān)聽本機(jī)8088端口
listen 8088;
#接收對(duì)www.aaa.com主機(jī)名的訪問
server_name www.aaa.com;
#對(duì)/即任意路徑的訪問進(jìn)行處理
location / {
#轉(zhuǎn)發(fā)到指定地址,tomcate訪問地址
proxy_pass http://127.0.0.1:8080;
}
#可以配置多個(gè)location
...
}
#可以配置多個(gè)server
...
}
啟動(dòng) tomcat
startup.bat
啟動(dòng)nginx
start nginx
4. location路徑配置和匹配規(guī)則
a. location路徑的寫法
在配置虛擬服務(wù)器時(shí),可以配置多個(gè)location,指定不同路徑采用不同的處理方案,location支持多種寫法,規(guī)則如下:
1. = =/aaa/1.jpg 路徑嚴(yán)格匹配,路徑必須一模一樣才會(huì)匹配到
2. ^~ ^~/aaa 只要是指定路徑開頭的路徑都可以匹配
3. ~ ~.png$ 區(qū)分大小寫按正則匹配路徑
4. ~* ~*.png$ 不區(qū)分大小寫按正則匹配路徑
5. / / 通用匹配,所有路徑都可以匹配到
b. location路徑配置的優(yōu)先級(jí)
由于location的路徑配置非常靈活,所有有可能一個(gè)路徑被多個(gè)location所匹配,此時(shí)按照如下規(guī)則判斷匹配優(yōu)先級(jí):
? 首先匹配 =
? 其次匹配 ^~
? 其次是按文件中順序的正則匹配
? 最后是交給 / 通用匹配
? 當(dāng)有匹配成功時(shí)候,停止匹配,按當(dāng)前匹配規(guī)則處理請(qǐng)求
----總的規(guī)律是,精度越高優(yōu)先級(jí)越高
案例:
location = / {
#規(guī)則A
}
location = /login {
#規(guī)則B
}
location ^~ /static/ {
#規(guī)則C
}
location ~ \.(gif|jpg|png|js|css)$ {
#規(guī)則D
}
location ~* \.png$ {
#規(guī)則E
}
location / {
#規(guī)則F
}
訪問根目錄 /, 比如 http://localhost/ 將匹配規(guī)則 A
訪問 http://localhost/login 將匹配規(guī)則 B
http://localhost/register 則匹配規(guī)則 F
訪問 http://localhost/static/a.html 將匹配規(guī)則 C
訪問 http://localhost/a.gif, http://localhost/b.jpg 將匹配規(guī)則 D和規(guī)則 E,但是規(guī)則 D 順序優(yōu)先,規(guī)則 E不起作用
http://localhost/static/c.png則優(yōu)先匹配到規(guī)則 C
訪問 http://localhost/a.PNG 則匹配規(guī)則 E,而不會(huì)匹配規(guī)則 D,因?yàn)橐?guī)則 E 不區(qū)分大小寫
訪問 http://localhost/category/id/1111 則最終匹配到規(guī)則 F
5. Ngnix的負(fù)載均衡策略
nginx在分發(fā)資源到后端服務(wù)器時(shí),如何分配請(qǐng)求是可以配置的,稱之為nginx的負(fù)載均衡策略。
輪詢 默認(rèn)不配置就是輪詢 連接請(qǐng)求輪流分配給后端服務(wù)器
http{
upstream sampleapp {
server <>;
server <>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
ip哈希 ip_hash; abs(客戶端ip.hash())%服務(wù)器數(shù)量,根據(jù)余數(shù)決定連接請(qǐng)求去往哪個(gè)服務(wù)器
http{
upstream sampleapp {
ip_hash;
server <>;
server <>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
最少連接 least_conn; 將連接請(qǐng)求分配給目前連接數(shù)最少的服務(wù)器
http{
upstream sampleapp {
least_conn;
server <>;
server <>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
基于權(quán)重 直接在地址后配置weight=x 根據(jù)權(quán)重進(jìn)行分配,權(quán)重值越大,被分配的連接越多。可以直接配置為down,則不再分配連接。
http{
upstream sampleapp {
server <> weight=2;
server <> weight=5;
server <> down;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
7. Nginx的動(dòng)靜分離實(shí)現(xiàn)
a. 動(dòng)靜分離原理 動(dòng) --> 動(dòng)態(tài)資源 --> servlet jsp --> 程序 靜 --> 靜態(tài)資源 --> jpg mp3 mp4 html css js --> 文件 tomcat能夠處理動(dòng)態(tài)和靜態(tài)資源,但本質(zhì)上是為處理動(dòng)態(tài)資源而設(shè)計(jì)的服務(wù)器,過多靜態(tài)資源交由tomcat管理會(huì)降低tomcat處理動(dòng)態(tài)資源的能力,得不償失。 nginx本身無法處理動(dòng)態(tài)資源,但可以處理靜態(tài)資源,而且性能優(yōu)良。 因此可以將靜態(tài)資源和動(dòng)態(tài)資源拆分,將靜態(tài)資源交由ngin處理,動(dòng)態(tài)資源仍由tomcat處理,從而解放了tomcat對(duì)動(dòng)態(tài)資源的處理能力,整體上實(shí)現(xiàn)動(dòng)靜分離,提升了效率。 b. 動(dòng)靜分離實(shí)現(xiàn) 配置方式: server { listen 8088; server_name www.aaa.com; location / { #root可以指向nginx服務(wù)器中的本地磁盤地址 #靜態(tài)文件就放置在這個(gè)磁盤地址中 #之后對(duì)server中資源的訪問會(huì)被轉(zhuǎn)換到對(duì)本地磁盤資源的訪問 #www.aaa.com/aaa/bbb/1.html-->d://html/aaa/bbb/1.html root D://html; #默認(rèn)訪問的首頁配置 index index.html; }
}
看了以上關(guān)于nginx動(dòng)態(tài)代理及負(fù)載均衡的學(xué)習(xí)之旅,如果大家還有什么地方需要了解的可以在創(chuàng)新互聯(lián)建站行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,創(chuàng)新互聯(lián)建站技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。