nginx配置详解之http模块

本文详细解析了nginx的http模块配置,包括log_format、客户端请求头和消息体的缓冲区设置、gzip压缩以及sendfile、tcp_nopush和tcp_nodelay等关键参数,探讨了它们对性能和错误处理的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP模块控制着nginx http处理的所有核心特性 以下为常用配置:

http{
    include mime.types;
    default_type application/octet-stream;
    client_header_buffer_size 4k;
    large_client_header_buffers 8 128k;
    client_body_buffer_size 512k;
    client_max_body_size 300m;
    gzip  on;
    sendfile on;
    #tcp_nopush on;
}

注: keepalive_timeout open_file_cache也可以配置在http模块 与配置在event模块相同  详见http://blog.youkuaiyun.com/zhangsheng_1992/article/details/51689980

     log_format日志配置 负载均衡  反向代理等配置此处省略介绍 我将在介绍相应的模块时详细介绍  故此出省区部分配置



include mime.types;

default_type application/octet-stream;

#设定mime类型,类型由mime.type文件定义 该文件内定义指定文件头所对应的文件格式 下面为截取的部分文件内容

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/javascript                js;
    application/atom+xml                  atom;
    ........

如果你需要新增自定义的文件类型  可以在此文件内定义


client_header_buffer_size 4k;

客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,常见系统分页大小一般为4k 你可以通过下列命令查询:

[xxxx ~]# getconf PAGESIZE
4096

large_client_header_buffers 8 128k;

客户请求头缓冲大小 nginx,默认会用client_header_buffer_size设置的buffer值来读取header值,如果header过大,它会使用large_client_header_buffers设置的值来读取

对于nginx处理请求,先处理请求的request_line,之后才是request_header,两者的buffer分配策略相同,先根据client_header_buffer_size配置的值分配一个buffer,如果分配的buffer

无法容纳 request_line/request_header,那么就会再次根据large_client_header_buffers配置的参数分配large_buffer,如果large_buffer还是无法容纳,对于request_line过大

nginx会返回414错误 Request URI too large  对于request_header过大,如请求的HTTP头/Cookie过大 则会出现nginx 400 bad request 的错误 注:request请求包的起始为请求行(Request-Line)

使用场景:

1.如果你的请求中的header都很大,那么应该使用client_header_buffer_size,这样能减少一次内存分配。如果你的请求中只有少量请求header很大,那么应该使用

2.large_client_header_buffers,因为这样就仅需在处理大header时才会分配更多的空间,从而减少无谓的内存空间浪费。


client_body_buffer_size 512k;

同上面的client_header_buffer_size  不过处理的是消息体 body


client_max_body_size 300m;

同上面的large_client_header_buffers  如果你的应用请求body过大 如大文件上传 如果这里设置不够 将会出现 nginx 413 request entity too large

以上四个参数可以配置在main模块对全局起作用 也可以单独配置在http模块内或者server模块内  由于习惯配置于http模块内 所以我在此处讲解


gzip on;

gzip压缩功能可以节省带宽,但是会增加服务器CPU的开销,Nginx默认只对text/html进行压缩,如果要对html之外的内容进行压缩传输,需要手动配置

这个配置对整体性能提升有很大帮助 我将在另一篇博文中详细介绍


sendfile on;

sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统负载


tcp_nopush on;

此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在使用sendfile的时候使用,默认为on


tcp_nodelay on;

这里tcp_nodelay就是nagle启用与否的开关,所以上面的指令的效果就是禁用nagle算法,也即不缓存数据,默认为off 设置为on 即表示禁用Nagle 算法


proxy_intercept_errors on;
表示使nginx阻止HTTP应答代码为400或者更高的应答。


关于 nagle算法  sendfile  tcp_nopush  tcp_nodelay 我将在介绍完所有配置项后 详细介绍 以后会附上传送门
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值