首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试技能扩展 | Nginx知识

测试技能扩展 | Nginx知识

作者头像
louiezhou001
发布2020-04-21 11:13:57
4530
发布2020-04-21 11:13:57
举报

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:配置请求的路由,以及各种页面的处理情况

upstream:配置后端服务器具体地址,是负载均衡配置不可或缺的部分

请求过滤

根据状态码过滤

    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指定后端服务器地址列表

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,这个属性是默认开启的

备注:

点击这里 TCP相关概念

gzip_comp_level

压缩级别,级别越高压缩率越大,当然压缩时间也就越长(传输快但比较消耗cpu)

默认值为 1

压缩级别取值为1-9

gzip_min_length

设置允许压缩的页面最小字节数,Content-Length小于该值的请求将不会被压缩

默认值:0

当设置的值较小时,压缩后的长度可能比原文件大,建议设置1000以上

nginx更多功能, 等你来发现.

总结:

测试是一门技术, 更是一门艺术. 也许你今天拥有的技术, 明天就会被淘汰. 同时需要我们开拓思维和眼界, 积极拥抱变化, 学习新知识, 新方法,新技能, 计算机领域讲究的是实践, 学习更要讲究方式方法. 学习和动手一定要结合, 光看不练,犹如看武功秘籍, 是永远成不了武功大侠的.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试工程师成长之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档