您好,登錄后才能下訂單哦!
下文給大家帶來nginx動態代理及負載均衡的學習之旅,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網上有很多書籍,今天我們就用億速云在行業內累計的經驗來做一個解答。
1.正向代理與反向代理的區別?
正向代理:是一個位于客戶端和原始云服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。正向代理的典型用途為在防火墻內的局域網客戶端提供訪問Internet的途徑.
反向代理:反向代理是代理服務器的一種,服務器根據客戶端的請求,從其關聯的一組或多組后端服務器(如Web服務器)上獲取資源,然后再將這些資源返回給客戶端,客戶端只會得知反向代理的IP地址或者域名,而不知道在代理服務器后面的服務器簇的存在.
2.nginx概述
Nginx是一款優秀的反向代理服務器程序,能夠為若干臺服務器提供反向代理服務,一方面為客戶端提供的統一的訪問地址,另一方面為后臺多個服務器提供了負載均衡的能力。Nginx是目前最主流的反向代理服務器,能夠提供可靠的負載均衡、動靜分離的能力。
a. 下載地址
http://nginx.org/en/download.html
b. 安裝
將下載好的安裝包解壓到一個沒有中文沒有空格的目錄下即可。
c. windows下常用命令
驗證配置是否正確: nginx -t
查看Nginx的版本號:nginx -V
啟動Nginx:start nginx
快速停止或關閉Nginx:nginx -s stop
正常停止或關閉Nginx:nginx -s quit
配置文件修改重裝載命令:nginx -s reload
d. 配置
nginx的工作是基于[conf/nginx.conf]配置文件來進行的。
nginx.conf的配置結構:
http{ #代表處理http請求
#配置一個虛擬服務器
server{
#此虛擬服務器接收對80端口的訪問
listen 80;
#此虛擬服務器接收對localhost主機名的訪問
server_name localhost;
#當訪問/user資源時由此配置處理
location /user{
規則
}
#當訪問/order資源時由此配置處理
location /order{
規則
}
...
}
#其他Server配置
server ...
...
}
3.nginx案例實現請求轉發
通過Nginx實現請求轉發,通過配置nginx.conf轉發策略,使得本來訪問tomcate:8080端口轉交由訪問nginx:8088端口
當客戶端訪問http://www.aaa.com時,由nginx轉發給http://127.0.0.1:8080端口進行處理
配置hosts文件
127.0.0.1 www.aaa.com
在nginx.conf中配置
http{
#為nginx配置一個虛擬服務器,
server {
#監聽本機8088端口
listen 8088;
#接收對www.aaa.com主機名的訪問
server_name www.aaa.com;
#對/即任意路徑的訪問進行處理
location / {
#轉發到指定地址,tomcate訪問地址
proxy_pass http://127.0.0.1:8080;
}
#可以配置多個location
...
}
#可以配置多個server
...
}
啟動 tomcat
startup.bat
啟動nginx
start nginx
4. location路徑配置和匹配規則
a. location路徑的寫法
在配置虛擬服務器時,可以配置多個location,指定不同路徑采用不同的處理方案,location支持多種寫法,規則如下:
1. = =/aaa/1.jpg 路徑嚴格匹配,路徑必須一模一樣才會匹配到
2. ^~ ^~/aaa 只要是指定路徑開頭的路徑都可以匹配
3. ~ ~.png$ 區分大小寫按正則匹配路徑
4. ~* ~*.png$ 不區分大小寫按正則匹配路徑
5. / / 通用匹配,所有路徑都可以匹配到
b. location路徑配置的優先級
由于location的路徑配置非常靈活,所有有可能一個路徑被多個location所匹配,此時按照如下規則判斷匹配優先級:
? 首先匹配 =
? 其次匹配 ^~
? 其次是按文件中順序的正則匹配
? 最后是交給 / 通用匹配
? 當有匹配成功時候,停止匹配,按當前匹配規則處理請求
----總的規律是,精度越高優先級越高
案例:
location = / {
#規則A
}
location = /login {
#規則B
}
location ^~ /static/ {
#規則C
}
location ~ \.(gif|jpg|png|js|css)$ {
#規則D
}
location ~* \.png$ {
#規則E
}
location / {
#規則F
}
訪問根目錄 /, 比如 http://localhost/ 將匹配規則 A
訪問 http://localhost/login 將匹配規則 B
http://localhost/register 則匹配規則 F
訪問 http://localhost/static/a.html 將匹配規則 C
訪問 http://localhost/a.gif, http://localhost/b.jpg 將匹配規則 D和規則 E,但是規則 D 順序優先,規則 E不起作用
http://localhost/static/c.png則優先匹配到規則 C
訪問 http://localhost/a.PNG 則匹配規則 E,而不會匹配規則 D,因為規則 E 不區分大小寫
訪問 http://localhost/category/id/1111 則最終匹配到規則 F
5. Ngnix的負載均衡策略
nginx在分發資源到后端服務器時,如何分配請求是可以配置的,稱之為nginx的負載均衡策略。
輪詢 默認不配置就是輪詢 連接請求輪流分配給后端服務器
http{
upstream sampleapp {
server <<dns entry or IP Address(optional with port)>>;
server <<another dns entry or IP Address(optional with port)>>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
ip哈希 ip_hash; abs(客戶端ip.hash())%服務器數量,根據余數決定連接請求去往哪個服務器
http{
upstream sampleapp {
ip_hash;
server <<dns entry or IP Address(optional with port)>>;
server <<another dns entry or IP Address(optional with port)>>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
最少連接 least_conn; 將連接請求分配給目前連接數最少的服務器
http{
upstream sampleapp {
least_conn;
server <<dns entry or IP Address(optional with port)>>;
server <<another dns entry or IP Address(optional with port)>>;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
基于權重 直接在地址后配置weight=x 根據權重進行分配,權重值越大,被分配的連接越多。可以直接配置為down,則不再分配連接。
http{
upstream sampleapp {
server <<dns entry or IP Address(optional with port)>> weight=2;
server <<another dns entry or IP Address(optional with port)>> weight=5;
server <<another dns entry or IP Address(optional with port)>> down;
}
....
server{
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
7. Nginx的動靜分離實現
a. 動靜分離原理 動 --> 動態資源 --> servlet jsp --> 程序 靜 --> 靜態資源 --> jpg mp3 mp4 html css js --> 文件 tomcat能夠處理動態和靜態資源,但本質上是為處理動態資源而設計的服務器,過多靜態資源交由tomcat管理會降低tomcat處理動態資源的能力,得不償失。 nginx本身無法處理動態資源,但可以處理靜態資源,而且性能優良。 因此可以將靜態資源和動態資源拆分,將靜態資源交由ngin處理,動態資源仍由tomcat處理,從而解放了tomcat對動態資源的處理能力,整體上實現動靜分離,提升了效率。 b. 動靜分離實現 配置方式: server { listen 8088; server_name www.aaa.com; location / { #root可以指向nginx服務器中的本地磁盤地址 #靜態文件就放置在這個磁盤地址中 #之后對server中資源的訪問會被轉換到對本地磁盤資源的訪問 #www.aaa.com/aaa/bbb/1.html-->d://html/aaa/bbb/1.html root D://html; #默認訪問的首頁配置 index index.html; }
}
看了以上關于nginx動態代理及負載均衡的學習之旅,如果大家還有什么地方需要了解的可以在億速云行業資訊里查找自己感興趣的或者找我們的專業技術工程師解答的,億速云技術工程師在行業內擁有十幾年的經驗了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。