yungame 2019-10-25
正向代理:是一个位于客户端和原始服务器(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; } }