nginx学习
1、代理的概念
- 1、正向代理
我们常说的代理也就是只正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,以一个例子说明:如果从网络的方向来讲,有三个概念,客户端、服务器、中间代理,对应于现实生活中的贷款者、银行、存款者,也就是说存款者并不知道是哪位贷款者借走了他的钱,而是通过银行代理了请求。 - 2、反相代理
反向代理隐藏了真实的服务端,银行也包含反相代理,也就是说贷款者也不知道他借的钱是谁的。另一个例子就是我们打110,我们只管打出110号码就行,最终会得到服务,而我们打出110之后并不知道具体会是哪位警官去接电话,110报警中心肯定会有很多的接听员,我们只知道会有服务,并不清楚到底会是哪位给我们服务。
两者的区别在于代理的对象不一样: 正向代理是为客户端代理,反向代理是为服务端代理。
2、nginx介绍
Nginx是一款高性能的Web服务器软件,主要用于提供网上信息浏览服务,为高并发网站的应用场景而设计,可以在Linux、macOS和Windows等操作系统中运行,它的优点包括性能高、稳定性好、结构模块化、配置简单以及资源消耗非常低等。拥有HTTPS访问、gzip压缩、虚拟主机和URL重写等功能,不但可以搭配FastCGI程序处理动态请求,还可以用于代理、反向代理、负载均衡和缓存服务器等功能。
3、nginx的功能
-
1、负载均衡
负载均衡(load balance)就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。(负载均衡的功能好像银行似乎也有这个功能,银行的功能很强大吗!)
目前负载均衡有4种典型的配置方式,分别为轮询、权重、ip_hash和利用第三方模块的方式。//默认轮询配置方式: upstream myapp { server 192.168.20.1:8080; # 应用服务器1 server 192.168.20.2:8080; # 应用服务器2 } server { listen 80; location / { proxy_pass http://myapp; } } //ip_hash方式 upstream myapp { ip_hash; # 根据客户端IP地址Hash值将请求分配给固定的一个服务器处理 server 192.168.20.1:8080; server 192.168.20.2:8080; } server { listen 80; location / { proxy_pass http://myapp; } } //权重方式 upstream myapp { server 192.168.20.1:8080 weight=3; # 该服务器处理3/4请求 server 192.168.20.2:8080; # weight默认为1,该服务器处理1/4请求 } server { listen 80; location / { proxy_pass http://myapp; } }
配置方式 | 说明 |
---|---|
轮询 | 均衡负载默认的配置方式,每个请求按照时间顺序逐一分配到不同的后端服务器进行处理,如果服务器有宕机会自动剔除 |
权重 | 利用weight指定轮训的权重比率,与访问率成正比,用于后端服务器使用不均的情况下 |
ip_hash | 每个请求按照冯文的的ip的hash结果分配,这样可以使同一ip的访客固定访问同一个后端服务器,可以解决session共享的问题 |
第三方模块 | 第三方模块采用fair时,按照每台服务器的响应时间来分配请求,相应时间短的优先分配,若第三方模块采用URL_hsah时,按照url的hash值来分配请求。 |
2、Web缓存方式
利用反向代理服务器对访问频率较多的内容进行缓存,有利于节省后端服务器的资源。Nginx提供了两种Web缓存方式:永久性缓存和临时性缓存。
永久性缓存:将内容源服务器响应的内容缓存到本地,若不手动删除,该缓存文件会一直生效。
临时性缓存:采用md5算法将请求连接进行哈希后,根据具体配置生成缓存文件目录,保存响应的数据。
Web缓存服务器位于内容源Web服务器和客户端之间,当客户端用户访问一个URL时,Web缓存服务器就会请求相应的内容源Web服务器,并将响应的信息缓存至内存或磁盘;然后,当下一个请求到来时,如果访问的是相同URL,Web缓存服务器会直接将已缓存的内容输出给客户端,而不用再次向内容源Web服务器发送请求。-
2、静态HTTP服务器
首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。配置:server { listen 80; # 端口号 location /doc/{ #映射地址 root /usr/; # 静态文件路径为/usr/doc/ autoindex on; } }
-
3、反向代理
客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。
配置:server { listen 80; location / { proxy_pass http://192.168.20.1:8080; # 应用服务器HTTP地址 } }
-
4、虚拟主机
有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。
例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。server { listen 80 default_server; server_name _; return 444; # 过滤其他域名的请求,返回444状态码 } server { listen 80; server_name www.aaa.com; # www.aaa.com域名 location / { proxy_pass http://localhost:8080; # 对应端口号8080 } } server { listen 80; server_name www.bbb.com; # www.bbb.com域名 location / { proxy_pass http://localhost:8081; # 对应端口号8081 } }
在服务器8080和8081分别开了一个应用,客户端通过不同的域名访问,根据server_name可以反向代理到对应的应用服务器。
虚拟主机的原理是通过HTTP请求头中的Host是否匹配server_name来实现的,有兴趣的同学可以研究一下HTTP协议。
另外,server_name配置还可以过滤有人恶意将某些域名指向你的主机服务器。