1,nginx在应用程序中的作用
1,解决跨域
2,请求过滤
3,配置gzip
4,静态资源服务器
5,负载均衡
nginx是一个高性能的HTTP和反向代理服务器,也是一个通用的TCP/UDP代理服务器,最初由俄罗斯人Igor Sysoev编写。
2,正向代理与反向代理
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,然后将服务端的响应转发给客户端
2.1,正向代理
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端
正向代理是为我们服务的,即为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。
正向代理对我们是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。
2.2,反向代理
反向代理*(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等
反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。
3,基本配置
3.1、配置结构
nginx配置文件的基本结构
main: nginx的全局配置,对全局生效
events:配置nginx服务器与用户的网络连接
http:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数的功能和第三方模块的配置
server:配置虚拟主机的相关参数,一个http中可以有多个server
location:配置请求的路由,以及各种页面的处理情况
upstream:配置后端服务器的具体地址,负载均衡配置不可或缺的部分
3.2、内置变量
4、解决跨域
4.1、跨域的定义
同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。通常不允许不同源间的读操作
4.2、同源的定义
有两个页面的协议,端口,域名全部都一样,这就可以说他们具有相同的源
4.3、nginx解决跨域的原理
5、请求过滤
5.1、根据状态码过滤
5.2、根据url过滤,精准匹配url,不匹配的全部定向到主页
5.3、根据请求类型过滤
6、配置gizp
GZIP
是规定的三种标准HTTP压缩格式之一。目前绝大多数的网站都在使用 GZIP
传输 HTML
、 CSS
、 JavaScript
等资源文件
对于文本文件, GZip
的效果非常明显,开启后传输所需流量大约会降至 1/4~1/3
。
并不是每个浏览器都支持 gzip
的,如何知道客户端是否支持 gzip
呢,请求头中的 Accept-Encoding
来标识对压缩的支持。
6.1、gzip
开启或者关闭gzip模块
默认值为off
可配置为on/off
6.2、gziphttpversion
启用gizp所需的HTTP最低版本
默认值为HTTP/1.1
HTTP/1.1
默认支持 TCP
持久连接, HTTP/1.0
也可以通过显式指定 Connection:keep-alive
来启用持久连接。对于 TCP
持久连接上的 HTTP
报文,客户端需要一种机制来准确判断结束位置,而在 HTTP/1.0
中,这种机制只有 Content-Length
。而在 HTTP/1.1
中新增的 Transfer-Encoding:chunked
所对应的分块传输机制可以完美解决这类问题。
nginx
同样有着配置 chunked的
属性 chunked_transfer_encoding
,这个属性是默认开启的。
Nginx
在启用了 GZip
的情况下,不会等文件 GZip
完成再返回响应,而是边压缩边响应,这样可以显著提高 TTFB
( TimeToFirstByte
,首字节时间,WEB 性能优化重要指标)。这样唯一的问题是, Nginx
开始返回响应时,它无法知道将要传输的文件最终有多大,也就是无法给出 Content-Length
这个响应头部。
所以,在 HTTP1.0
中如果利用 Nginx
启用了 GZip
,是无法获得 Content-Length
的,这导致HTTP1.0中开启持久链接和使用 GZip
只能二选一,所以在这里 gzip_http_version
默认设置为 1.1
。
6.3、gzipcomplevel
压缩级别,级别越高压缩率越大,当然压缩时间也就越长(传输快但比较消耗cpu)。默认值为:1,压缩级别取值为1~9
6.4、gzipminlength
设置允许压缩的页面最小字节数, Content-Length
小于该值的请求将不会被压缩,默认值为:0,当设置的值较小时,压缩后的长度可能比原文件大,建议设置 1000
以上
6.5、gzip_types
要采用gzip压缩的文件类型( MIME
类型),默认值: text/html
(默认不压缩 js
/ css
)
7、负载均衡
7.1、nginx如何实现负载均衡
7.2、nginx实现负载均衡的策略
7.2.1、轮询策略
默认情况下采用的策略,将所有客户端请求轮询分配给服务端。这种策略是可以正常工作的,但是如果其中某一台服务器压力太大,出现延迟,会影响所有分配在这台服务器下的用户。
7.2.2、最小连接数策略
将请求优先分配给压力较小的服务器,它可以平衡每个队列的长度,并避免向压力大的服务器添加更多的请求。
7.2.3、最快响应时间策略
7.2.4、客户端IP绑定
8、静态资源服务器