Nginx之http配置
一 核心模块ngx_http_core_module
1.1 客户端部分
# chunked_transfer_encoding
语法:chunked_transfer_encoding on | off;
默认:chunked_transfer_encoding on;
上下文: http, server, location
http协议中,transfer-encoding:chunked表示在传输数据过程中要使用分块技术。而与之对应的是将数据写到一个很大很大的字节数组,如果使用这个配置就不必申请一个很大的字节数组,
占用的资源也少。这个一般结合Content-Encoding:gzip使用,即先将数据压缩,再使用块技术传输数据。有时候我们会在报文中看到Content-Length:60,Content-Length就是数组大小,即
需要申请的一个很大的字节数组的大小。
# 指定处理客户端请求body部分的缓存的大小
语法: client_body_buffer_sizesize;
默认:client_body_buffer_size 8k|16k;
上下文: http, server, location
这个一般用于处理POST请求,表单提交,文件上传等操作。如果你要处理很多很大的POST提交,那么就有可能16k不够,这个值在这时候设置大一些,比如502k或者1024K等等。
# client_header_buffer_size
Syntax: client_header_buffer_size size;
默认:
client_header_buffer_size 1k;
Context: http, server
client_max_body_size 指令指定了处理客户端请求header部分的buffer的大小。设置成1K能满足绝大部分需求。client_max_body_size 指令指定了可以接受的最大的用户请求body大小。通过HTTP头中的Content-Length确认,如果大小超过这个值,则客户端会得到“Request Entity Too Large” (413)错误。
# client_body_in_file_only
Syntax: client_body_in_file_only on | clean | off;
默认:
client_body_in_file_only off;
Context: http, server, location
决定是否nginx要保存客户端请求body整个部分到一个文件,一般用于debug比较多。
on: 表示临时文件不会被删除
clean: 表示临时文件会被删粗
# client_body_in_single_buffer
为了减少拷贝操作,使用该指令是得Nginx将整个客户端请求保存在单个缓存中
Syntax: client_body_in_single_buffer on | off;
默认:
client_body_in_single_buffer off;
Context: http, server, location
# client_body_temp_path path
可以定义一个目录或者路径用于保存请求客户端的请求体所在的临时文件
Syntax: client_body_temp_path path [level1 [level2[level3]]];
默认
client_body_temp_path client_body_temp;
Context: http, server, location
# client_body_timeout
定义读取客户端请求body的超时时间,这个超时时间是指客户端成功读取两个操作之间设置,而不是整个请求体传输.
语法:client_body_timeout time;
默认:
client_body_timeout 60s;
Context: http, server, location
# client_header_timeout
读取客户端请求头的超时时间
语法:client_header_timeout time;
默认:
client_header_timeout 60s;
Context: http, server
# 设置请求体所允许的最大大小,体现在Content-Length字段,如果超过这个指定大小,则返回413错误。
语法:client_max_body_size size;
默认:
client_max_body_size 1m;
Context: http, server, location
# 对某些类型的客户端禁用keep-alive请求功能
语法:keepalive_disable none | browser ...;
默认:keepalive_disablemsie6;
上下文:http, server,location
keep-alive?
早期http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接。为了加快客户端和服务端的访问请求速度,keep-alive就是浏览器和服务器端之间保持长连接,
这个连接是可以复用 的。而在HTTP1.1中是默认打开的。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能。
但是,keep-alive并不是免费的午餐,长时间的tcp连接容易导致系统资源无效占用。配置不当的keep-alive,有时比重复利用连接带来的损失还更大。所以,正确地设置keep-alive timeout时间非常重要。
# keep-alive的持续多久,然后断开这个链接
语法:keepalive_timeout timeout [header_timeout];
默认:keepalive_timeout 75s;
上下文: http, server, location
# 在keep-alive关闭之前还可以接受多少个请求
语法:keepalive_requests number;
默认:keepalive_requests100;
上下文: http, server, location
# 定义最大数量客户端请求头的buffer大小
语法: large_client_header_buffersnumber size;
默认:large_client_header_buffers 4 8k;
上下文: http, server
1.2文件I/O指令
这些指令用于控制Nginx如何投递静态文件
# aio: 启用异步文件I/O
# directio size|off,默认off. 当读取大于或者等于指定size的文件,允许使用允许使用O_DIRECT标记(FreeBSD、Linux)、F_NOCACHE标志(macOS)或directio()函数(Solaris),Linux一般在使用aio的使用需要使用该指令
# open_file_cache off | max=N [inactive=time];
配置一个缓存用于存储打开的文件描述符,目录查询和文件查询错误
# open_file_cache_errors on | off;
启用或禁用open_file_cache对文件查找错误的缓存。
# open_file_cache_min_uses number;
在open_file_cache指令的非活动参数配置的期间,设置文件访问的最小数量,要求文件描述符在缓存中保持打开状态。
# open_file_cache_valid time;
指定对open_file_cache缓存进行有效性检查的时间间隔
# postpone_output size size
如果可能,Nginx延迟发送数据给客户端,直到Nginx至少有size字节的数据,如果是0,代表没有启用。
# read_ahead size size
在处理文件时设置内核预读的数量。如果是0,代表没有启用。
# sendfile on | off;
设置使用sendfile函数从一个文件到另外一个文件描述符
# sendfile_max_chunk size;
设置sendfile最大的拷贝数量
1.3 hash部分
1.3 hash指令
# server_name example.com www.example.com;
配置域名,可以有多个
# server_name_in_redirect on | off;
重定向的时候是否以配置的server_name的第一个域名还是原始请求的URL,常见的就是在URL末尾NGinx自己补了一个斜杠
比如server_name_in_redirectoff表示:让 nginx 在处理自己内部重定向时不默认使用 server_name设置中的第一个域名
# server_names_hash_bucket_size size;
设置服务器名哈希表的bucket大小。
# server_names_hash_max_size size;
设置服务器名哈希表的最大大小
# types_hash_bucket_size size;
指定用于存放哈希表的桶大小
# types_hash_max_size size;
指定哈希类型表的最大大小
# variables_hash_bucket_size
指定用于存放保留变量桶大小
# variables_hash_max_size
指定存放保留变量最大哈希值的大小
1.4 套接字 socket部分
1.4 Socket指令
# lingering_close off | on | always
控制Nginx怎样关闭连接,字面意思就是延迟关闭,当nginx要关闭连接时,并非立即关闭连接,而是先关闭tcp连接的写,再等待一段时间后再关掉连接的读。
"on"指示nginx在完全关闭连接之前等待并处理来自客户机的额外数据,但前提是它建议客户机可能发送更多数据。
"always"将导致nginx无条件地等待并处理额外的客户端数据。
"off"告诉nginx永远不要等待更多的数据,并立即关闭连接。这种行为违反了协议,在正常情况下不应该使用。
# lingering_timeout time
当lingering_close生效时,该指令指定nginx将处理(读取和忽略)来自客户机的额外数据的最大时间。
# lingering_timeout time
当lingering_close生效时,该指令指定更多客户机数据到达的最大等待时间。
# reset_timedout_connection on | off
当套接字关闭时,TCP RST被发送到客户端,并释放由该套接字占用的所有内存。这有助于避免长时间在FIN_WAIT1状态中保存已经关闭的套接字。
# send_lowat size
如果非零,Nginx将会在客户端socket尝试减少发送操作
# send_timeout time
设置用于向客户端发送响应的超时。超时只设置在两个连续写操作之间,而不是整个响应的传输。如果客户端在这段时间内没有收到任何东西,连接就会关闭。
# tcp_nodelay on | off
启用或者禁用TCP_NODELAY选项,用于keep-alive连接。在短连接中并不存在小包阻塞的问题,而在长连接中需要做tcp_nodelay开启。相当于禁用Nagle算法。
# tcp_nopush on | off
仅依赖于sendfile使用,它能够使得Nginx在一个数据包中尝试发送响应头或者发送一个完整的文件。功能类似于在发送数据管道出口处插入一个“塞子”,使得发送数据全部被阻塞,可以认为它是Nagle算法的进一步增强,即阻塞数据包发送。
Nagle 算法:
假如需要频繁的发送一些小包数据,比如说1个字节,以IPv4为例的话,则每个包都要附带40字节的头,也就是说,总计41个字节的数据里,其中只有1个字节是我们需要的数据。
为了解决这个问题,出现了Nagle算法。它规定:如果包的大小满足MSS,那么可以立即发送,否则数据会被放到缓冲区,等到已经发送的包被确认了之后才能继续发送。
通过这样的规定,可以降低网络里小包的数量,从而提升网络性能。
DelayedAcknowledgment 延迟确认:
假如需要单独确认每一个包的话,那么网络中将会充斥着无数的ACK,从而降低了网络性能。
为了解决这个问题,DelayedAcknowledgment规定:不再针对单个包发送ACK,而是一次确认两个包,或者在发送响应数据的同时捎带着发送ACK,又或者触发超时时间后再发送ACK。
通过这样的规定,可以降低网络里ACK的数量,从而提升网络性能。
二 连接限制模块ngx_http_limit_conn_module
2.1 limit_conn
语法结构:limit_conn zonenumber
设置共享内存区域和最大允许连接数。当超出此限制时,服务器将返回响应请求的错误
limit_conn perip 10;
limit_conn perserver 100;
2.2 limit_conn_log_level
语法结构:limit_conn_log_levelinfo | debug | notice | warn | error
设置限制连接的日志级别
2.3 limit_conn_status
语法结构:limit_conn_statuscode
设置要拒绝请求的返回的状态码
2.4 limit_conn_zone
语法结构:limit_conn_zonekey zone=name:size
key: 表示要限制的对象
name: 表示zone的名字
size: 表示大小
设置共享内存zone的参数,特别是,状态包括当前的连接数。
比如:
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
$binary_remote_addr: 远程地址的二进制表示
$server_name: 服务器名字
perip:这个zone的名字
也就是说相同客户端只需只允许10m的网络带宽
三 限制请求模块ngx_http_limit_req_module
3.1 limit_req
语法结构: limit_reqzone=name [burst=number] [nodelay];
zone: 表示设置的共享内存区域
limit_req_zone $binary_remote_addr zone=one:10mrate=1r/s;
server {
location/search/ {
limit_req zone=one burst=5;
}
}
3.2 limit_req_log_level
语法结构:limit_req_log_level info | notice | warn | error;
设置限制请求的日志级别
3.3 limit_req_status
语法结构: limit_req_statuscode
当拒绝请求的时候给客户端返回的响应状态码
3.4 limit_req_zone
语法结构:limit_req_zone key zone=name:size rate=rate
key: 要限制的对象,IP 或者主机名都可以
name: 给这个zone设置名字
size: 所允许的带宽
rate: 下载速率
limit_req_zone $binary_remote_addr zone=one:10mrate=1r/s;
server {
location/search/ {
limit_req zone=one burst=5;
}
}
有一个三方模块limit_req2_nginx_module,如果要使用需要安装
limit_req2_zone $http_x_forwarded_forzone=www_req_per_ip:20m rate=18r/s;
limit_req2_zone $http_x_forwarded_for $urizone=www_same_req_per_ip:20m rate=10r/s;
Nginx之http配置相关推荐
- http响应Last-Modified和ETag以及Apache和Nginx中的配置
基础知识 1) 什么是"Last-Modified"? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属 ...
- Nginx 安装及配置
概念 了解 Nginx 的基本概念 安装 apt-get install nginx # Ubuntu yum install nginx -y # CentOS 配置文件 nginx -t # 检查 ...
- linux nginx php 目录权限,Nginx环境中配置网站目录权限设置
在Nginx与php环境下,务必要设置好Nginx目录权限,安全的目录权限设置,将是网站安全的一道屏障,有需要的朋友做个参考吧. 配置权限的原则是,在保证网站正常运行下,尽量给最低权限. nginx目 ...
- 使用Nginx为Leanote配置Https
生成SSL证书 可以在网上买一个, 或者自己做一个. 这里有一个shell脚本可以自动生成证书: #!/bin/sh# create self-signed server certificate:re ...
- Linux服务器上最简单的Nginx反向代理配置
2019独角兽企业重金招聘Python工程师标准>>> Nginx不但是一款高性能的Web服务器,也是高性能的反向代理服务器.简单的可以理解为直接让当前的访问地址跳转到其他的网站上去 ...
- Nginx+UWSGI+Django配置全过程
Nginx + uwsgi + Django 安装配置 一.安装Nginx uwsgi Django 安装tengine yum install pcre-devel -y wget http://t ...
- 利用nginx泛域名解析配置二级域名和多域名
利用nginx泛域名解析配置二级域名和多域名网站的目录结构为 html ├── bbs └── wwwhtml为nginx的安装目录下默认的存放源代码的路径.bbs为论坛程序源代码路径 www为主页程 ...
- Nginx(九)-- Nginx实际使用配置
1.由于在nginx中需要配置很多东西,就会使得nginx.conf配置文件过于臃肿,所以我们会将配置文件合理的切分.大体的配置依然在nginx.conf中,其他的配置会放在etc下面的目录中. 2. ...
- Nginx之https配置
14.1. 对称加密 安全隐患:钥匙除我之外,还有多个人拥有.泄露风险较大,钥匙传递的过程风险较大 14.2. 非对称加密 优缺点:私钥很安全.但是非对称算法开销很大,大批量应用于业务,会导致性能成本 ...
- windows下nginx安装、配置与使用
目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...
最新文章
- python日历gui_python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例...
- Spring Cloud Alibaba 发布第一个正式版本,顺利完成孵化!
- Windows未能启动,原因可能是最近更改了硬件或软件,解决此问题的步骤
- boost::math模块计算 Bessel、Neumann 和 Airy 函数的零(或根)的函数的测试程序
- mysql+after+commit_Spring事务aftercommit原理及实践
- 数组,三种初始化和内存分析
- VMware Workstation安装RedHat Linux 9
- 为什么总说程序员是吃青春饭的?真的是 35 岁混不到管理就等于失业?
- 已知后序与中序输出前序(先序)
- 矩阵等式 matrix identity(numpy仿真)
- ffmpeg+rtmp推流/拉流(十)
- helm安装istio_第五章 用Helm部署Istio
- 虚拟应用DemoApp功能演示详解
- c语言函数 java,C语言函数
- P2114 起床困难综合症
- 不要试图做完人--任正非在华为优秀党员座谈会上的发言
- 一步真实解决RuntimeError: result type Float can‘t be cast to the desired output type long int
- Linux 工具链 error while loading shared libraries: libgettextsrc-0.19.8.1.so 解决方法
- strtolower() 函数
- 最好用的几款epub阅读器
热门文章
- Nginx跨域解决方案
- mysql存储过程if多命令_MySQL存储过程if-存储过程中的if-db2存储过程if多条件
- 小米台灯底座接口很松_小米黑科技,AirPods和小米10 Pro伴侣,ZMI无线充蓝牙音箱体验...
- 智能车路径提取matlab_遗传算法求解多车型车辆路径问题
- python爬虫过程中遇到的问题_python爬虫过程中出现的问题汇总-Go语言中文社区
- php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
- Java 算法 判定字符位置
- Flink java作为消费者连接虚拟机中的kafka/或本地的kafka,并解决java.net.UnknownHostException报错
- Geatpy自定义初始种群
- python监控程序执行_python如何监控PostgreSQL代码运行