1、nginx优势

  • 高并发高性能
  • 可扩展性好
  • 高可靠性
  • 热部署
  • 开源许可证

    2、nginx 的应用场景

  • 静态资源服务,通过本地文件系统提供服务

  • 反向代理服务(解决跨域)、负载均衡
  • API服务、权限控制,减少应用服务器压力

    3、正向代理 与 反向代理

    正向反向是针对代理的对象服务器和客户端来区别的

正向代理(forward proxy):正向代理的对象是客户端,服务器端看不到真正的客户端。
image.png
反向代理(Reverse proxy):反向代理的对象是服务端,客户端看不到真正的服务端。 前端最常用的是用来解决跨域问题
image.png
反向代理配置代码:

  1. server {
  2. listen 80;
  3. server_name localhost;
  4. # 用户访问 localhost,反向代理到 http://webcanteen.com
  5. location / {
  6. proxy_pass http://webcanteen.com
  7. }
  8. }

4、Gzip

Gzip 是一种数据压缩格式,对于纯文本来说可以压缩到原大小的 40%,可以节省大量的带宽。不过需要注意的是,启用 Gzip 所需的 HTTP 最低版本是 1.1。
配置文件:

  1. location ~ .*\. (jpg|png|gif)$ {
  2. gzip off; #关闭压缩
  3. root /data/www/images; #站点的根路径
  4. }
  5. location ~ .*\. (html|js|css)$ {
  6. gzip on; #启用压缩
  7. gzip_min_length 1k; # 超过1K的文件才压缩
  8. gzip_http_version 1.1; # 启用gzip压缩所需的HTTP最低版本
  9. gzip_comp_level 9; # 压缩级别,压缩比率越高,文件被压缩的体积越小
  10. gzip_types text/css application/javascript; # 进行压缩的文件类型
  11. root /data/www/html; #站点的根路径
  12. }

5、nginx配置请求限制

请求限制分为两种:

  • limit_conn_module 连接频率限制
  • limit_req_module 请求频率限制

    1. # $binary_remote_addr 远程IP地址 zone 区域名称 10m内存区域大小limit_conn_zone $binary_remote_addr zone=coon_zone:10m;
    2. server {
    3. # conn_zone 设置对应的共享内存区域 1是限制的数量
    4. limit_conn conn_zone 1;
    5. }
    1. # $binary_remote_addr 远程IP地址 zone 区域名称 10m内存区域大小 rate 为请求频率 1s 一次limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
    2. server {
    3. location / {
    4. # 设置对应的共享内存区域 burst最大请求数阈值 nodelay不希望超过的请求被延迟
    5. limit_req zone=req_zone burst=5 nodelay;
    6. }
    7. }

    6、nginx的访问控制

    主要分为两种:

  • -http_access_module 基于 IP 的访问控制

  • -http_auth_basic_module 基于用户的信任登陆

基于IP的访问控制:

  1. server {
  2. location ~ ^/index.html {
  3. # 匹配 index.html 页面 除了 127.0.0.1 以外都可以访问
  4. deny 127.0.0.1;
  5. allow all;
  6. }
  7. }

基于用户的信任登陆 :
image.png
需要配置auth_conf 中配置用户名和密码
参考:https://www.jianshu.com/p/0dcbca51c667

7、ab命令

ab命令全称为:Apache bench,是 Apache 自带的压力测试工具,也可以测试 Nginx、IIS 等其他 Web 服务器。

  • -n 总共的请求数
  • -c 并发的请求数

代码段:

  1. ab -n 1000 -c 5000 http://127.0.0.1/

8、防盗链

防盗链的原理就是根据请求头中 Referer 得到网页来源,从而实现访问控制。这样可以防止网站资源被非法盗用,从而保证信息安全,减少带宽损耗,减轻服务器压力。

  1. location ~ .*\.(jpg|png|gif)$ { # 匹配防盗链资源的文件类型
  2. # 通过 valid_referers 定义合法的地址白名单 $invalid_referer 不合法的返回403
  3. valid_referers none blocked 127.0.0.1;
  4. if ($invalid_referer)
  5. {
  6. return 403;
  7. }
  8. }

9、nginx 负载均衡 Load Balance

当网站需要解决高并发、海量数据问题时,就需要使用负载均衡来调度服务器。将请求合理的分发到应用服务器集群中的一台台服务器上。
image.png
配置如下:

  1. # upstream 指定后端服务器地址# weight 设置权重# server 中会将 http://webcanteen 的请求转发到 upstream 池中
  2. upstream webcanteen {
  3. server 127.0.0.1:66 weight=10;
  4. server 127.0.0.1:77 weight=1;
  5. server 127.0.0.1:88 weight=1;
  6. }
  7. server {
  8. location / {
  9. proxy_pass http://webcanteen
  10. }
  11. }

后端服务器状态:

  • down:当前服务器不参与负载均衡
  • backup:当其他节点都无法使用时的备用服务器
  • max_fails:允许请求失败的次数,若到达就会休眠
  • fail_timeout:经过max_fails次失败后,服务器的暂停时间,默认为10s
  • max_conns:限制每个服务器的最大接收连接数

配置:

  1. upstream webcanteen {
  2. server 127.0.0.1:66 down;
  3. server 127.0.0.1:77 backup;
  4. server 127.0.0.1:88 max_fails=3 fail_timeout=10s;
  5. server 127.0.0.1:99 max_conns=1000;
  6. }

分配方式:

  • 轮询(默认),每个请求按照时间顺序轮流分配到不同的后端服务器,如果某台后端服务器宕机,Nginx 轮询列表会自动将它去除掉。
  • weight(加权轮询),轮询的加强版,weight 和访问几率成正比,主要用于后端服务器性能不均的场景。
  • ip_hash,每个请求按照访问 IP 的 hash 结果分配,这样每个访问可以固定访问一个后端服务器。
  • url_hash,按照访问 URL 的 hash 结果来分配请求,使得每个URL定向到同一个后端服务器上,主要应用于后端服务器为缓存时的场景。
  • 自定义hash,基于任意关键字作为 hash key 实现 hash 算法的负载均衡
  • fair,按照后端服务器的响应时间来分配请求,响应时间短则优先分配。

参考链接:https://juejin.im/post/6864085814571335694