Nginx运维之四 Http模块参数配置

案例

推荐使用配置案例如下:

http{
       include       mime.types;
       default_type  application/octet-stream;
        
       server_tokens off;
        
       log_format main '$http_x_real_ip - $remote_addr - $remote_user [$time_local] "$request" '
                               '$status $body_bytes_sent "$http_referer" '
                               '"$http_user_agent" $http_x_forwarded_for'
                               ' "$request_time"';

        server_names_hash_bucket_size 128;
        client_header_buffer_size 128k;
        large_client_header_buffers 4 128k;
        client_max_body_size 100m;

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;

        keepalive_timeout 600s;

        fastcgi_connect_timeout 600s;
        fastcgi_send_timeout 600s;
        fastcgi_read_timeout 600s;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 8 128k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types       text/plain application/x-javascript text/css application/xml application/json;
        gzip_vary on;

        # 加载sites-enabled下所有的站点配置
        include /usr/local/nginx/sites-enabled/*.conf;

}

核心参数配置

client_body_buffer_size

Syntax: client_body_buffer_size size;
Default: client_body_buffer_size 8k|16k;
Context: http, server, location

设置用于读取客户端请求体的缓冲区大小。在请求体大于缓冲区的情况下,将整个主体或仅其部分写入缓冲。默认情况下,缓冲区大小等于两个内存页。这是x86或其他的其他32位平台上的应为8K,在X86-64或其他64位平台上通常为16K。

client_body_temp_path

Syntax: client_body_temp_path path [level1 [level2 [level3]]];
Default: client_body_temp_path client_body_temp;
Context: http, server, location

定义用于存储持有客户端请求主体的混存文件的目录。可在指定目录下使用三级子目录层次结构。例如,在以下配置中

client_body_temp_path /spool/nginx/client_temp 1 2;

一个临时文件的路径可能是这样的:

/spool/nginx/client_temp/7/45/00000123457

client_body_timeout

Syntax: client_body_timeout time;
Default: client_body_timeout 60s;
Context: http, server, location

定义用于读取客户端请求体的超时时间。超时仅设置在两个连续读取操作之间的时间段内,而不是用于整个请求体的传输。如果客户端在此时间内不发送任何内容,则请求终止(408)(请求超时)错误。

client_header_buffer_size

Syntax: client_header_buffer_size size;
Default: client_header_buffer_size 1k;
Context: http, server

设置用于读取客户端请求头的缓冲区大小。对于大多数请求,1K字节的缓冲区就足够了。但是,如果请求包括长cookie,或者来自WAP客户端,那么它可能不适合1K。如果请求行或请求头字段不适合这个缓冲区,则分配由large_client_header_buffers指令配置的更大的缓冲区。

client_header_timeout

Syntax: client_header_timeout time;
Default: client_header_timeout 60s;
Context: http, server

定义用于读取客户端请求标头的超时。如果客户端在此时间内不发送整个请求头,则请求终止(408)(请求超时)错误。

client_max_body_size

Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location

设置客户端请求主体的最大允许大小,在“Content-Length”请求头字段中指定。如果请求中的大小超过了配置值,则将413(请求实体过大)错误返回给客户端。请注意浏览器不能正确显示此错误。将大小设置为0禁用客户端请求主体大小的检查。

connection_pool_size

Syntax: connection_pool_size size;
Default: connection_pool_size 256|512;
Context: http, server

允许精确调整每个连接内存分配。该指令对性能影响最小,一般不应使用。默认情况下,32位平台上的大小等于256字节,64位平台上的字节为512字节。

在版本1.9之前,默认值在所有平台上为256。

default_type

Syntax: default_type mime-type;
Default: default_type text/plain;
Context: http, server, location

定义响应的默认MIME类型。可以使用类型指令来设置文件扩展名到MIME类型的映射。

keepalive_timeout

Syntax: keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location

第一个参数设置一个超时时间,在此期间保持活跃的客户端连接将在服务器端保持打开状态。设置0将禁用保持活动的客户端连接。
第二个请求参数将会十返回的response响应头信息包含“Keep-Alive: timeout=time”字段。2个参数是不一样的。

Mozilla and Konqueror 支持“Keep-Alive: timeout=time”,MSIE关闭保持活动连接为60秒。

large_client_header_buffers

Syntax: large_client_header_buffers number size;
Default: large_client_header_buffers 4 8k;
Context: http, server

设置用于读取大客户请求头的缓冲区的最大数量和大小。请求行不能超过一个缓冲区的大小,或者将414(请求URI过大)错误返回给客户端。请求头字段不能超过一个缓冲区的大小,或者400(坏请求)错误返回给客户端。仅根据需求分配缓冲器。默认情况下,缓冲区大小等于8K字节。如果在请求处理结束之后,连接被转换为保持活动状态,则释放这些缓冲器。

open_file_cache

Syntax: open_file_cache off;
open_file_cache max=N [inactive=time];
Default: open_file_cache off;
Context: http, server, location

配置缓存的信息:

  • 打开文件描述符,它们的大小和修改时间;
  • 存在的目录信息;
  • 文件查找错误,如 “file not found”, “no read permission”等。

错误的缓存应该使用open_file_cache_errors配置。
支持以下参数:

参数 说明
max 设置缓存中的最大元素数;在缓存溢出上删除最近最少使用的(LRU)元素;
inactive 定义如果在此期间没有访问元素,则从缓存中删除该元素的时间;默认情况下,为60秒;
off 禁用

例如:

open_file_cache          max=65535 inactive=60s;
open_file_cache_valid    30s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;

open_file_cache_errors

Syntax: open_file_cache_errors on | off;
Default: open_file_cache_errors off;
Context: http, server, location

启用或禁用open_file_cache缓存文件查找错误。

open_file_cache_min_uses

Syntax: open_file_cache_min_uses number;
Default: open_file_cache_min_uses 1;
Context: http, server, location

设置由open_file_cache指令的非活动参数配置的期间内文件访问的最小数量,该文件描述符在缓存中保持打开是必需的。如果有一个文件在inactive时间内一次没被使用,它将被移除

open_file_cache_valid

Syntax: open_file_cache_valid time;
Default: open_file_cache_valid 60s;
Context: http, server, location

设置一个时间,在该时间之后open_file_cache文件应该被验证。

send_lowat

Syntax: send_lowat size;
Default: send_lowat 0;
Context: http, server, location

如果该指令设置为非零值,则nginx将尝试通过使用kqueue方法的NOTE_LOWAT标志或SO_SNDLOWAT套接字选项来最小化客户端套接字上的发送操作的数量。在这两种情况下都使用指定的大小。

该指令在Linux、Solaris和Windows上被忽略。

send_timeout

Syntax: send_timeout time;
Default: send_timeout 60s;
Context: http, server, location

这个超时时间是发送响应的超时时间,即Nginx服务器向客户端发送了数据包,但客户端一直没有去接收这个数据包。如果某个连接超过send_timeout定义的超时时间,那么Nginx将会关闭这个连接。

sendfile

Syntax: sendfile on | off;
Default: sendfile off;
Context: http, server, location, if in location

设置为on可以启用Linux上的sendfile系统调用来发送文件,它减少了内核态与用户态之间的两次内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的效率。

server_names_hash_bucket_size

Syntax: server_names_hash_bucket_size size;
Default: server_names_hash_bucket_size 32|64|128;
Context: http

设置服务器名称哈希表的分组大小。默认值取决于处理器的高速缓存行的大小。

server_names_hash_max_size

Syntax: server_names_hash_max_size size;
Default: server_names_hash_max_size 512;
Context: http

设置服务器名称哈希表的最大大小.

保存服务器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键值。因此,如果Nginx给出需要增大hash max size或hash bucket size的提示,那么首要的是增大前一个参数的大小

Syntax: server_tokens on | off | build | string;
Default: server_tokens on;
Context: http, server, location

启用或禁用在错误页和“响应头字段中发布NGNIX版本。

tcp_nodelay

Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location

对keepalive连接是否使用TCP_NODELAY选项,此外,它在SSL连接上启用,用于无缓冲的代理,以及用于WebSocket代理。

tcp_nopush

Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http, server, location

在打开sendfile选项时,确定是否开启FreeBSD系统上的TCP_NOPUSH或Linux系统上的TCP_CORK功能。开启此选项允许在Linux和FreeBSD 4.x上将响应头和正文的开始部分一起发送;一次性发送整个文件。

gzip参数

gzip模块 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。 Gzip压缩模块是Nginx是一个自带的模块但是默认状态是它未启用的,Gzip压缩模块启用后可以对WEB服务器传输给客户端的图片,html,js等数据进行压缩传输了,最高可以达到百分八十左右 该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。该模块启用后,nginx首先检查是否存在请求静态文件的gz结尾的文件,如果有则直接返回该gz文件内容。为了要兼容不支持gzip的浏览器,启用gzip_static模块就必须同时保留原始静态文件和gz文件。这样的话,在有大量静态文件的情况下,将会大大增加磁盘空间。我们可以利用nginx的反向代理功能实现只保留gz文件。

gzip

Syntax: gzip on | off;
Default: gzip off;
Context: http, server, location, if in location

禁启用gzip压缩响应。

gzip_buffers

Syntax: gzip_buffers number size;
Default: gzip_buffers 32 4k|16 8k;
Context: http, server, location

设置用于压缩响应的缓冲区的数量和大小。默认情况下,缓冲区大小等于一个内存页。4K或8K,这取决于一个平台。

gzip_comp_level

Syntax: gzip_comp_level level;
Default: gzip_comp_level 1;
Context: http, server, location

设置响应的GZIP压缩级别。可接受的值在1到9的范围内。

gzip_disable

Syntax: gzip_disable regex …;
Default: —
Context: http, server, location

这个指令出现在0.623版本中。
禁用与“User-Agent”头字段匹配的任何指定正则表达式的请求响应的GZIP压缩。

特殊mark“Msie6”(0.7.12)对应于正则表达式“MSIE[4-6]”,但工作速度更快。从版本0.811开始,“MSIE 6;…从这个mark中排除了“Sv1”。

gzip_http_version

Syntax: gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location

设置压缩响应所需的请求的最小HTTP版本。

gzip_min_length

Syntax: gzip_min_length length;
Default: gzip_min_length 20;
Context: http, server, location

设置将被压缩的响应的最小长度。长度仅由响应头 “Content-Length”字段指定

gzip_proxied

Syntax: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;
Default: gzip_proxied off;
**Context: http, server, location

根据请求和响应,启用或禁用对代理请求的响应的GZIP。判断请求是否是代理是通过“Via”请求头字段的存在来确定的。该指令接受多个参数:

参数 说明
off 禁用所有代理请求的压缩,忽略其他参数;
expired 如果响应头包含值为禁用缓存“Expires”字段,则启用压缩;
no-cache 如果响应头包含值为“no-cache”的“Cache-Control”字段,则启用压缩;
no-store 如果响应头包含值为“no-store”的“Cache-Control”字段,则启用压缩;
private 如果响应头包含值为“private”的“Cache-Control”字段,则启用压缩;
no_last_modified 如果响应头不包含“Last-Modified”字段,则启用压缩;
no_etag 如果响应头不包含“ETag”字段,则启用压缩;
auth 如果响应头包含“Authorization”字段,则启用压缩;
any 启用对所有代理请求的压缩。

gzip_types

Syntax: gzip_types mime-type …;
Default: gzip_types text/html;
Context : http, server, location

除了“text /html”之外,还可以对指定MIME类型的响应进行GZIP。特殊值“*”匹配任何MIME类型(0.8·29)。“text/html”类型的响应总是被压缩。

gzip_vary

Syntax: gzip_vary on | off;
Default: gzip_vary off;
Context: http, server, location

如果指令gzip、gzip_static或gunzip是启用的的,则启用或禁用响应头包含“Vary:Accept-Encoding”字段。

fastcgi 参数(PHP配置)

CGI全称是“通用网关接口”(Common Gateway Interface), 它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据。 CGI描述了客户端和这个程序之间传输数据的一种标准。 CGI的一个目的是要独立于任何语言的,所以CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。 如php,perl,tcl等。

FastCGI是Web服务器和处理程序之间通信的一种协议, 是CGI的一种改进方案,FastCGI像是一个常驻(long-live)型的CGI, 它可以一直执行,在请求到达时不会花费时间去fork一个进程来处理(这是CGI最为人诟病的fork-and-execute模式)。 正是因为他只是一个通信协议,它还支持分布式的运算,即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

fastcgi_connect_timeout

Syntax: fastcgi_connect_timeout time;
Default: fastcgi_connect_timeout 60s;
Context: http, server, location

定义用于与FASCGI服务器建立连接的超时。应该注意的是,这个超时时间通常不能超过75秒。

fastcgi_send_timeout

Syntax: fastcgi_send_timeout time;
Default: fastcgi_send_timeout 60s;
Context: http, server, location

设置用于向FASTCGI服务器发送请求的超时时间。超时仅设置在两个连续写入操作之间,而不是用于整个请求的传输。如果FASCGI服务器在此时间内没有接收到任何信息,则关闭连接。

fastcgi_read_timeout

Syntax: fastcgi_read_timeout time;
Default: fastcgi_read_timeout 60s;
Context: http, server, location

定义用于从FASCGI服务器读取响应的超时。超时仅设置在两个连续读取操作之间,而不是用于整个响应的传输。如果FASCGI服务器在此时间内不发送任何内容,则连接被关闭。

fastcgi_buffer_size

Syntax: fastcgi_buffer_size size;
Default: fastcgi_buffer_size 4k|8k;
Context: http, server, location

设置用于读取从FASCGI服务器接收的响应的第一部分的缓冲区的大小。这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页。4K或8K,这取决于平台。然而,它也可以设置更小。

fastcgi_buffers

Syntax: fastcgi_buffers number size;
Default: fastcgi_buffers 8 4k|8k;
Context: http, server, location
为单个连接设置用于从FASCGI服务器读取响应的缓冲区的数量和大小。默认情况下,缓冲区大小等于一个内存页。4K或8K,这取决于平台。

fastcgi_busy_buffers_size

Syntax: fastcgi_busy_buffers_size size;
Default: fastcgi_busy_buffers_size 8k|16k;
Context: http, server, location
当启用对来自FastCGI服务器的响应的缓冲时,限制可能忙于向客户端发送响应而响应尚未完全读取的缓冲区的总大小。同时,剩余的缓冲区可用于读取响应,如果需要,还可以将响应的一部分缓冲到临时文件。默认情况下,大小是由fastcgi_buffer_size和fastcgi_buffers指令所设置的两个缓冲区大小限制的。

fastcgi_temp_file_write_size

Syntax: fastcgi_temp_file_write_size size;
Default: fastcgi_temp_file_write_size 8k|16k;
Context: http, server, location

在启用从FastCGI服务器到临时文件的响应缓冲时,限制一次写入临时文件的数据的大小。默认情况下,大小是由fastcgi_buffer_size和fastcgi_buffers指令设置的两个缓冲区限制的。临时文件的最大大小由fastcgi_max_temp_file_size指令设置。

更多配置参看官方配置说明文档

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章