测试技能扩展 | Nginx知识
Nginx的作用
反向代理
负载均衡
请求过滤
解决跨域
配置gzip
静态资源服务
...
nginx几乎是众多大型网站必用技术, 大多数情况下, 我们不需要亲自去配置,但了解他在应用程序中的角色, 以及如何解决这些问题是非常有帮助的.
nginx是一个高性能的反向代理, 那什么是反向代理呢?
正向代理和反向代理
正向代理
正向代理是为客户端服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。
正向代理对客户端是透明的,对服务端是非透明的,即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。
反向代理
反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。
反向代理对服务端是透明的,对客户端是非透明的,客户端并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务代理。
Nginx配置文件路径
不同安装方式,nginx的配置文件存放路径有所不同.
源码编译安装方式:在安装目录的conf目录下,安装目录是/usr/local/nginx,那么他的配置文件就在/usr/local/nginx/conf目录下.
yum安装方式:在/etc/nginx/目录(主配置文件)与/etc/nginx/conf.d目录下, 我采用docker安装方式, 因此属于这一类, 如何使用docker 安装, 请看我之前的分享.
可以看到我的nginx版本是1.17.9,配置文件如下:
核心配置文件nginx.conf
很多时候,在开发、测试环境下,我们都得自己去配置Nginx, 就是去配置nginx.conf, nginx.conf是典型的分段配置文件
...
events {
...
}
http {
...
server {
....
location {
root html;
...
}
}
}
nginx的配置指令可以分为两大类:指令块与单个指令, 指令块就像events, http,server等,单独指令就是像root html 这样的.
events:配置影响nginx服务器或与用户的网络连接
http:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
server: 配置虚拟主机的相关参数,一个http中可以有多个server
location:配置请求的路由,以及各种页面的处理情况
请求过滤
根据状态码过滤
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
根据URL名称过滤,精准匹配URL,不匹配的URL全部重定向到主页.
location / {
rewrite ^.*$ /index.html redirect;
}
根据请求类型过滤
if ( $request_method !~ ^(GET|POST|HEAD)$ ) {
return 403;
}
Nginx 负载均衡
upstream balanceServer {
server 100.10.10.96:12345;
server 100.10.10.97:12345;
server 100.10.10.98:12345;
}
在server中拦截响应请求,并将请求转发到Upstream中配置的服务器列表
server {
server_name fe.server.com;
listen 80;
location /api {
proxy_pass http://balanceServer;
}
}
配置gzip
GZIP是规定的三种标准HTTP压缩格式之一,目前绝大多数的网站都在使用GZIP传输 HTML、CSS、JavaScript 等资源文件.
对于文本文件,GZip 的效果非常明显,开启后传输所需流量大约会降至 1/4 ~ 1/3
启用gzip同时需要客户端和服务端的支持,如果客户端支持gzip的解析,那么只要服务端能够返回gzip的文件就可以启用gzip,我们可以通过nginx的配置来让服务端支持gzip, Response Headers中content-encoding:gzip,指服务端开启了gzip的压缩方式.
gzip
开启或者关闭gzip模块
默认值为off
可配置为on / off
gzip_http_version
启用 GZip 所需的HTTP 最低版本
默认值为HTTP/1.1
为了提高http性能,使用持久连接(长连接)就显得尤为重要
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,这个属性是默认开启的
备注:
gzip_comp_level
压缩级别,级别越高压缩率越大,当然压缩时间也就越长(传输快但比较消耗cpu)
默认值为 1
压缩级别取值为1-9
gzip_min_length
设置允许压缩的页面最小字节数,Content-Length小于该值的请求将不会被压缩
默认值:0
当设置的值较小时,压缩后的长度可能比原文件大,建议设置1000以上
nginx更多功能, 等你来发现.
总结:
测试是一门技术, 更是一门艺术. 也许你今天拥有的技术, 明天就会被淘汰. 同时需要我们开拓思维和眼界, 积极拥抱变化, 学习新知识, 新方法,新技能, 计算机领域讲究的是实践, 学习更要讲究方式方法. 学习和动手一定要结合, 光看不练,犹如看武功秘籍, 是永远成不了武功大侠的.
赶快来关注吧,这里有你想找的热点内容,这里有你想要的各种资料,还有海量的资源,还在等什么。快来关注,大佬带你开车。
长
按
解
锁
方便拉您进群互动
文章好看点这里