nginx动态代理及负载均衡的学习之旅
发表于:2024-11-27 作者:热门IT资讯网编辑
编辑最后更新 2024年11月27日,下文给大家带来nginx动态代理及负载均衡的学习之旅,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用在行业内累计的经验来做一个解答。1.正
下文给大家带来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 <>; server <>; } .... server{ listen 80; ... location / { proxy_pass http://sampleapp; } } ip哈希 ip_hash; abs(客户端ip.hash())%服务器数量,根据余数决定连接请求去往哪个服务器 http{ upstream sampleapp { ip_hash; server <>; server <>; } .... server{ listen 80; ... location / { proxy_pass http://sampleapp; } } 最少连接 least_conn; 将连接请求分配给目前连接数最少的服务器 http{ upstream sampleapp { least_conn; server <>; server <>; } .... server{ listen 80; ... location / { proxy_pass http://sampleapp; } } 基于权重 直接在地址后配置weight=x 根据权重进行分配,权重值越大,被分配的连接越多。可以直接配置为down,则不再分配连接。 http{ upstream sampleapp { server <> weight=2; server <> weight=5; server <> 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动态代理及负载均衡的学习之旅,如果大家还有什么地方需要了解的可以在行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,技术工程师在行业内拥有十几年的经验了。