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或者更高的应答。