nginx反向代理服务器

nginx反向代理服务器

概述

nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件服务器,同时提供了IMAP、POP3、SMTP协议服务。由C语言编写,在BSD-like协议下发行。其特点是占有内存少,并发能力强。中国大陆使用的有:百度京东淘宝等。
反向代理和前向代理服务器的区别:

  • 前向代理针对于服务端,代理的是客户端,他使得客户端对服务端不可见。客户端发送请求,被正向代理转发到服务器,服务器回复响应到正想代理(服务器以为响应发送了客户端)
  • 反向代理针对于客户端,代理的是服务端,他使得服务端对客户不可见。客户端发送请求,这样做的好处是用户请求过多,服务器会有一个处理的极限。所以使用反向代理服务器接受请求,再用均衡负载将请求分布给多个真实的服务器。既能提高效率还有一定的安全性。

nginx的文件目录

  • conf:保存nginx配置文件的目录,修改nginx.conf
  • easymall:保存了所有easymall的静态文件
  • logs:access.log记录访问nginx的请求,error.log记录启动运行各种错误的日志

负载均衡

负载均衡意义

  • 负责调度客户端请求,使其按照最优方式分配到不同的服务器上执行,避免其中某台服务器过载。
  • 消除单点失败,这个比较好理解,因为我们有多台服务器,如果其中某一台发生了错误,可以由其他服务器完成请求。
  • 通过减少错误返回结果提升用户体验,因为负载均衡可以检查某一台服务器是否存在问题,如果发现存在问题,它就会将请求安排到其他运行良好的服务器上执行,所以用户很少会接到返回失败的错误。
  • session持久化( session persistence),这个名词的意思就是在一个session有效期内,将某一个客户端的所有请求都交给同一个服务器执行。这有什么意义呢?假设我们在淘宝上购物,好不容易花了两小时选了两件心仪的宝贝放到了购物车里面,发现添加第三件的时候前两件不见了,那你是不是想问候一下阿里程序员?为什么会这样,因为Http是无状态的,我们使用session维护状态,那假设前两件商品的操作是在Server1上完成的,而第三件商品是在Server2上完成的,那么这种糟糕的情况就出现了,因为Server2第一次接到这个session。

原则

轮询(默认配置)

在配置文件中

    upstream nginx中使用的虚拟域名(字符串) {//代表维护的一颗服务器集群的列表
	   server 服务器1的ip:端口
	   server 服务器2的ip:端口
	   server 服务器3的ip:端口
    }
    server {
		linsten 拦截的端口;
		server_name 拦截的域名;
		location /(/的意思是匹配请求地址过滤掉域名端口后的字符串内容){
			proxy_pass:http://楼上的虚拟域名或者不需要重新定义直接写出服务器真实地址;
		}
	}

权重

配置方式:关键字:down(宕机不访问),weight(权重值)

upstream roundbin{
	server 10.9.104.184:8091 weight = 5;
	server 10.9.104.184:8092 weight = 1;
	server 10.9.104.184:8093 down;
}
其他插件的负载均衡(iphash)=解决session黏着问题

在集群中,客户端访问一旦使用集群tomcat结点的session,会由于nginx这种代理技术的出现,导致每次访问都无法使用上次访问中使用的session对象–session共享引出的问题。也就是说假设你在第一次登陆访问的是购物车模块,采用Server1服务器,第二次的需要访问订单模块,采用Server2服务器,你在Server1登录过但是Server2却不识别Server1的session。

upstream roundbin{
    ip_hash;
	server 10.9.104.184:8091 weight = 5;
	server 10.9.104.184:8092 weight = 1;
	server 10.9.104.184:8093 down;
}

根据用户的ip地址,做hash计算(10982),只要ip地址不变hash结果不变,结果转化的二进制进行取余(tomcat个数)%3 [0,1,2];如果0表示t1,1表示t2,2表示t3,ip_hash黏着的意思就是:客户端ip不变,永远访问同一个tomcat;虽然可以解决问题,但是却偏离了负载均衡的本质,使得同一Session访问同一个服务器,降低效率。

nginx的配置详解

location匹配规则

根据location的匹配,具有优先级关系的逻辑,从上到下优先级从高到低

  • 精确匹配 location =/images;域名端口后的字符串必须完全等于location匹配路径;
  • 有修饰的字符串前缀匹配 location ^~/images;所有字符串路径以images开始的都能匹配
  • 无修饰的字符串前缀(匹配一级,不能匹配多级路径)location /images
  • 正则匹配,location ~正则表达式;
  • 通配,location /
    对于包含关系优先级:有修饰的字符串前缀匹配,如果有包含关系的location同时存在,以匹配最大长度的请求url最优先级最高;正则包含关系,location在上的正则表达式优先级比在下配置的高
    练习:
    server{
		80
		localhost
		location =/images{return 200;}
		location ^~/images{return 201;}
		location /images{return 202;}
		location ^~/images/test{return 203;}
		location ~.png$ {return 204;}
		location ~.(png|jpg|gif)${return 205;}
		location /{return 206;}
	}

当输入对应的请求地址后

http://localhost 返回:206
http://localhost/images 返回:200
http://localhost/images/e.png 返回:201
http://localhost/images/test.png 返回:203
http://localhost/user/p.png 返回204

拦截过滤逻辑,将会把匹配的字符串,同域名和端口一起过滤

    server{
		listen 80;
		server_name www.easymall.com;
		location /user{
			proxy_pass http://127.0.0.1:8090/haha;
	   }
   }

当请求url www.easymall.com/user/query/point;域名端口过滤 /user/query/point,location 匹配上/user /query/point,然后转向服务器 http://127.0.0.1:8090/haha/query/point

动静分离–nginx只处理静态文件

动静分离:主要指的是前后端分离,前端的静态页面文件,交给独立运行服务器处理,后端的tomcat只处理请求的动态数据,没有页面的访问处理逻辑;**nginx作为http服务器,不能处理jsp,但是可以处理所有静态文件访问;可以利用nginx的这个特点将所有静态文件存放到nginx保存,提供访问的响应,**如果有动态的路径需要服务器处理,交给后端服务器tomcat
配置静态文件的管理服务器server

server {
	listen 80;
	server_name www.staticfile.com;
	location / {
		#proxy_pass 转发,root可以指向nginx服务器中任意
		#的文件地址,配置d://html,所有静态文件访问都可以
		#从d盘的html文件夹获取
		#过滤拼接,将location之前匹配的所有内容www.#staticfile.com/index.html 替换成root的值D://html/index.html
		root D://html;
		#默认访问的首页配置
		index index.html;
		}
	}

请转到链接nginx的配置详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值