nginx動態代理,負載均衡學習

1.正向代理與反向代理的區別?

正向代理:是一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。正向代理的典型用途爲在防火牆內的局域網客戶端提供訪問Internet的途徑.

nginx動態代理,負載均衡學習

反向代理:反向代理是代理服務器的一種,服務器根據客戶端的請求,從其關聯的一組或多組後端服務器(如Web服務器)上獲取資源,然後再將這些資源返回給客戶端,客戶端只會得知反向代理的IP地址或者域名,而不知道在代理服務器後面的服務器簇的存在.

nginx動態代理,負載均衡學習

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

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;
                    } 
            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章