一文带你了解nginx基础 (3)

Timer per request:每次请求所需时间、响应时间

limit_conn_zone http { # 将请求客户端的IP($binary_remote_addr)存放到perip区域,区域大小为10M,一个IP占用32Byte(32位系统)或64Byte(64位系统)左右 # perip是区域的名字,可自定义 limit_conn_zone $binary_remote_addr zone=perip:10m; server { # 每个IP最大并发1条连接 # 该语句还可直接放置到http模块下,这样下属的server都应用该配置 # 该语句还可放置到server中的location模块中,这样仅指定的location应用该配置 limit_conn perip 1; # 每个连接限速300 k/s limit_rate 300k; } } limit_req_zone http { # 将请求客户端的IP存放到perip区域,区域大小为10M,并限制同一IP地址的请求每秒钟只处理一次 limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s; server { # 当有大量请求爆发时,可以缓存2条请求 # 设置了nodelay,缓存队列的请求会立即处理,若请求数 > rate+burst 时,立即返回503;如果没设置,则会按照rate排队等待处理 # 该语句还可直接放置到http模块下,这样下属的server都应用该配置 # 该语句还可放置到server中的location模块中,这样仅指定的location应用该配置 limit_req zone=perip burst=2 nodelay; } }

测试:ab -c 1 -n 3

3个请求全部成功,因为正在处理的请求数1加上缓存数2,没超过限制

Server Software: nginx/1.18.0 Server Hostname: 192.168.159.128 Server Port: 80 Document Path: / Document Length: 612 bytes Concurrency Level: 1 Time taken for tests: 0.001 seconds Complete requests: 3 Failed requests: 0 Total transferred: 2535 bytes HTML transferred: 1836 bytes Requests per second: 2439.02 [#/sec] (mean) Time per request: 0.410 [ms] (mean) Time per request: 0.410 [ms] (mean, across all concurrent requests) Transfer rate: 2012.67 [Kbytes/sec] received

测试:ab -c 3 -n 4

3个请求成功,1个请求失败,因为正在处理的请求数1加上缓存数2,另外1条请求失败

erver Software: nginx/1.18.0 Server Hostname: 192.168.159.128 Server Port: 80 Document Path: / Document Length: 612 bytes Concurrency Level: 1 Time taken for tests: 0.002 seconds Complete requests: 4 Failed requests: 1 (Connect: 0, Receive: 0, Length: 1, Exceptions: 0) Non-2xx responses: 1 Total transferred: 3223 bytes HTML transferred: 2330 bytes Requests per second: 2504.70 [#/sec] (mean) Time per request: 0.399 [ms] (mean) Time per request: 0.399 [ms] (mean, across all concurrent requests) Transfer rate: 1970.86 [Kbytes/sec] received ngx_http_upstream_module upstream MyName { server 192.168.0.1:8080 weight=1 max_conns=10; server 192.168.0.2:8080 weight=1 max_conns=10; } 二、安全配置 版本安全

隐藏HTTP Response消息头Server中的版本号

隐藏前:Server: nginx/1.18.0

隐藏后:Server: nginx

http { server_tokens off; } IP安全

白名单配置(适用于授权IP较少的情况),可配置在http、server、location中

location / { allow 192.168.1.1; deny all; }

黑名单配置(适用于授权IP较多的情况),可配置在http、server、location中

location / { deny 192.168.1.1; allow all; } 文件安全 location /logs { autoindex on; root/opt/nginx/; } location ^logs~*\.(log|txt)$ { add_header Content-Type text/plain; root/opt/nginx/; } 连接安全

https(我就不多介绍了)

三、进程数、并发数、系统优化 配置nginx.conf,增加并发量 # 与CPU逻辑核心数一致 worker_processes 12; events { # 单个worker最大并发连接数 worker_connection 65535; } 调整内核参数

查看所有的属性值

ulimit -a

临时设置硬限制(重启后失效)

ulimit -Hn 100000

临时设置软限制(重启后失效)

ulimit -Sn 100000

持久化设置(重启后仍生效)

vim /etc/security/limits.conf # 接下来是文件中需要配置的内容 * soft nofile 100000 * hard nofile 100000 # 用户/组 软/硬限制 需要限制的项目 限制的值 四、GZIP

作用:启用gzip后,服务器将响应报文进行压缩,有效地节约了带宽,提高了响应至客户端的速度。当然,压缩会消耗nginx所在电脑的cpu

配置范围:http、server、location

http { # 启用gzip gzip on; # 允许压缩的最小字节数(即如果response header中的content-length小于该值,就不压缩) gzip_min_length 2k; # 按照原数据大小以16k为单位的4倍申请内存用作压缩缓存 gzip_buffers 4 16k; # 压缩级别,级别越大,压缩率越高,占用CPU时间更长 gzip_comp_level 5; # 需要被压缩的响应类型,默认值是text/html gzip_types text/plain application/x-javascript text/css application/xml; # 配置最低版本的http压缩协议(即1.0时,1.0和1.1都会启用压缩;1.1时,仅1.1时才会启用压缩) gzip_http_version 1.0; # IE6及以下禁用压缩 gzip_disable "MSIE [1-6]\."; } 五、状态监控

配置访问地址

location /nginxstatus { stub_status on; // 禁止将监控信息写入访问日志 access_log off; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxjsd.html