Nginx服务器的功能模块

Wesley13
• 阅读 653

Nginx和Apache的区别优点

1、Nginx与Apache比较的优点

对于这个问题,并不能说哪一个较好,本身他们都有优缺点,例如:Apache提供了几百个模块,模块就意味着功能,但作为一个Apache服务器最多只有2000多的并发量,Nginx提供的模块也就几十个,但他却可以提供20000的并放量。Apache的功能多,而Nginx的功能少,但有一句话可以很好的说明:

Apache就像Office一样,他有几十万的选项,但你只需要那么六个功能能选
项,Nginx只做了这六个功能,但是他做的这六件事中基本是Apache做的50倍。
                                --Chris Lea,ChrisLea.com

2、从Nginx接受客户端请求处理的角度,他与Apache的不同

Nginx采用的是事件驱动结构,它使用异步请求套接字来接受请求,是一种非阻塞结构,不适用单独的县城处理,目的是为了减少内存和CPU的开销。而Apache采用的同步套接字、线程和进程,每一个请求都是一个单独的进程和线城来进行处理。

Nginx服务器的功能模块

1、限制流量
对于提供下载的网站来说,肯定是要进行流量现值的,在Nginx中我们完全可以做到限制流量,由Core模块提供了limit_rate、limit_rate_after指令。

(a)指令limit_rate
指令名称:limit_rate
使用环境:http、server、location、if in location
默认值:no

该指令用于指定向客户端传输数据的速度,速度的单位是每秒传输的字节数。该指令只是针对一个连接的设定,也就是说,如果有两个连接同时,那么他们的速度将会是该指令设置的两倍,就像我们的宽带带宽是一样的。

如果需要在server级别对客户端连接进行限制,对于这种情况–这个指令可能并不适合,但是可设置$limit_rate变量,为该变量传递相应的值来实现,例如:

server{
    if($slow){
        set $limit_rate 4k;
    }
}

(b)指令limit_rate_after
指令名称:limit_rate_after
使用环境:http、server、location、if in location中的if字段
默认值:limit_rate_after 1m

该指令是“在。。。后在限制速度为。。。”,意思就是以最大的速度下载time时间后,在进行相应的操作,但在实际的使用中,limit_rate_after的参数是一个下载字节量的大小值,而不是时间值,例如:limit_rate_after 3m是指以最大的速度下载3MB之后。

例如:

location /download{ limit_rate_after 3m; limit_rate 512k; }

意思为:当一个客户端连接后,将以最快的速度下载3MB之后,然后在以512k的速度进行下载。

2、限制用户并发连接数
可以通过limit_zone模块来实现限制用户的连接数目,既限制同一个用户IP地址的并发连接数。
该模块提供两个命令:limit_zone和limit_conn,其中limit_zone只能在http区段,limit_conn可以使用在http、server、location区段。

示例:

http{
    limit_zone  one  $binary_remote_addr  10m;
    server{
        location /download/{
            limit_conn one 1;
        }
    }
}

(a)指令limit_zone
指令名称:limit_zone
语法:limit_zone zone_name $variable memory_max_size
使用环境:http
默认值:no

该指令用于定义一个zone,该zone将会被用于存储回话的状态。能够存储的会话数量是由分配交付的变量和memory_max_size的大小决定的。
例如:
limit_zone one $binary_remote_addr 10m;
客户端的IP地址将用作会话,注意:这里使用的是 binaryremoteaddr而不是 remote_addr,这是因为remote_addr的长度为7-15个字节,绘画信息的长度为32字节。当设置1MB的一个zone时,如果使用binary_remote_addr方式,该zone将会存放32000个会话。

(b)指令limit_conn
指令名称:limit_conn
语法:limit_conn zone_name max_clients_per_ip
使用环境:http、server、location
默认值:no

该指令用于为一个会话设定最大的并发连接数。如果并发起请求数超过这个限制,那么将会出现503错误。
例如:

limit_zone  one  $binary_remote_addr  10m;

server{
    location /download/{
        limit_conn one 1;
    }
}

这个设置将会使得俩字与同一个ip的并发连接数不能超过1个。

(b)指令limit_conn_log_level
指令名称:limit_conn_log_level
语法:limit_conn_log_level log_level info | notice | warn |error
使用环境:http、server、location
默认值:error
该指令用于设置错误级别,当连接达到限制之后,将会产生错误日志。

综合实例:

worker_progresses  4;

event{
    worker_connection 10240;
}

http{
    include  mime.types;
    default_type  application/octet-stream;
    sendfile  on;
    keepalive_timeout 65;
    limit_zone  flv_down  $binary_remote_addr  10m;

    server{
        listen 80;
        server_name flv.abc.com;
        ....
        location /download{
            limit_conn flv_down  1;
        }
    }
    error_page  500 502 503 504 /50x.html;
        location =/50x.html{
            root html;
        }
}

1、使用limit_zone命令定义一个zone为flv_down

limit_zone  flv_down  $binary_remote_addr  10m;

flv_down:是一个zone的名字,无限制;
binaryremoteaddr:是一个变量,用来做客户端之间的区别,也可以选择其他的变量来区别,但是最典型的还是 binary_remote_addr,这里选用的是二进制格式的IP地址,会比ASCII格式更高效。
10m:用于限制大小

2、使用limit_conn命令来实现limit_zone命令的定义的zone,1表示同时连接的数量

limit_conn flv_down  1;
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Nginx配置https
一、开启nginx的ssl模块1.未安装过nginx,编译安装配置参数如下:./configure\prefix/usr/local/nginx\withpcre\withhttp\_ssl\_modulessl模块\withhttp\_stub\_status\_module\wit
Wesley13 Wesley13
3年前
4. Nginx模块
Nginx官方模块1.ngx\_http\_stub\_status\_modulehttp://nginx.org/en/docs/http/ngx\_http\_stub\_status\_module.html。(https://www.oschina.net/action/GoToLink?urlhttp%3A%2
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
nginx中文手册内容说明
1.什么是nginx?Nginx是一个高性能的Web和反向代理服务器,它具有有很多非常优越的特性:作为Web服务器:相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx尤其受到虚拟主机提供商的欢迎。能够支持高达50,000个并发连接数的响应,感谢Nginx为我们选择了e
Stella981 Stella981
3年前
Nginx
!(https://imagestatic.segmentfault.com/255/117/25511790966008dc5b00fd8)Nginx进程模型分析在介绍Nginx的进程模型之前我们先来给大家解释下一些常见的名词,这能辅助我们更好的了解Nginx的进程模型。作为Web服务器,设计的初衷就是为了能够处理更多的客户端的请
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这