温馨提示×

nginx动态代理及负载均衡的学习之旅

发布时间:2020-04-20 16:57:52 来源:亿速云 阅读:232 作者:三月 栏目:编程语言

下文给大家带来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;
                    } 

           }

看了以上关于nginx动态代理及负载均衡的学习之旅,如果大家还有什么地方需要了解的可以在亿速云行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,亿速云技术工程师在行业内拥有十几年的经验了。

 

 



推荐内容:Nginx是怎么实现负载均衡的?Nginx负载均衡实现案例

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

免费拨打  400 100 2938 免费拨打 400 100 2938
24小时售后技术支持 24小时售后技术支持
返回顶部 返回顶部