nginx模块参数配置

虚拟主机与请求分发

配置监听端口,中括号为可选参数(server)

listen address:port [ default | default_server | backlog=num rcvbuf=size | accept_filter=filter | deferred | bind | ipv6only=[on|off] | ssl ]

default/default_server:把这个server快作为整个Web服务的默认块。如果没有设置,在nginx.conf中找到第一个server块作为默认server块。当一个请求无法匹配配置文件中所有主机域名时,会选用默认虚拟主机。

backlog=num:表示TCP中backlog等待队列大小。默认-1,表示不设置。

rcvbuf=size:表示监听句柄的SO_RCVBUF,套接字接收缓冲区大小。

sndbuf=size:表示监听句柄的SO_SNDBUF,套接字发送缓冲区大小。

accept_filter:设置accept过滤器,只对FreeBSD操作系统有效。

deferred:就算TCP三次握手结束时内核也不会分配worker处理,当用户发送数据时才分配worker处理。

bind:绑定当前端口/地址对,只有同时对一个端口监听多个地址时才会生效。

ssl:当前监听端口必须使用ssl协议。

配置主机名称(server)

server_name name1 name2 ...;

处理请求时,nginx会取出header中的Host,与每个server中的server_name进行匹配,决定由哪个server处理这个请求,优先级如下:

字符串完全匹配

通配符在前面 *.testweb.com

通配符在后面 www.testweb.*

正则表达式 ~^\.testweb\.com$

如果所有server_name和Host都不匹配,就按照下面优先级处理:

优先选择listen配置加入了default/default_server的server块。

匹配listen端口的第一个server块。

重定向主机名的处理(http/server/location)

server_name_in_redirect on | off;(默认为on)

on重定向时使用server_name配置的第一个主机名替换原先的host请求头。off则使用请求本身的host头部。

location模块(server)

location [=|~|~*|^*|@] /uri/ {...}

location会根据用户的uri来匹配上面的表达式,如果可以匹配则选择该location处理。

匹配规则:

= 完全匹配

~ 大小写敏感匹配

~* 大小写不敏感匹配

^~ 以配置的uri开始的请求都会被匹配

@ nginx服务内部重定向,不直接处理用户请求

location / {} 匹配所有请求

请求会被第一个匹配的location处理。

文件路径定义

root方式设置资源路径(http/server/location/if)

root path;

location /download/ {

root /opt/web/html/;

}

匹配/download/index/test.html。返回/opt/web/html/download/index/test.html。

读取文件路径:root路径+uri路径

alias方式设置资源路径(loction),与spring boot静态资源映射类似

alias path;

location /download/ {

alias /opt/web/html/;

}

匹配/download/index/test.html。返回/opt/web/html/index/test.html。

读取文件路径:alias路径+(uri - location路径)

首页访问(http/server/location)

index file1 file2 ...;

index index.html;(默认)

//访问跟目录返回首页

location \ {

index index.html index.php;

}

HTTP返回码重定向页面

//重定向页面,保留原来的返回码。

error_page 404 /404.html;

error_page 502 503 504 /50x.html;

error_page 403 http://example.com/forbidden.html; //重定向到另一个location

error_page 404 = @ fetch; //重定向到另一个location

//重定向页面,返回新的的返回码。

error_page 404 =200 /empty.gif;

error_page 404 =403 /forbidden.gif;

try_files

try_files path1 path2... uri

如果path都找不到,则重定向到uri。

TCP和Http内存池分配(http/server)

request_pool_size

单次http连接时分配的内存,http结束时销毁request_pool_size。

单次tcp连接时分配connection_pool_size的内存,http结束时销毁connection_pool_size。

如果是keep-alive连接,单次TCP连接可以用于多次http请求。

网络连接的设置

读取http头的超时时间(http/server/location)

client_header_timeout 60;(默认60s)

客户端与服务器建立连接后,开始接收http头部的等待时间,超过这个时间没有读取到用户发来的字节,认为超时,向用户返回408(request time out)。

读取http包体的超时时间(http/server/location)

client_header_timeout 60;(默认60s)

与请求头类似,不过这是读取包体(post放在body里)才有效。

发送相应的超时时间(http/server/location)

send_timeout 60;(默认60s)

nginx向客户端发送了数据包,但是客户端没有接收,过了这个超时时间,nginx会主动关闭这个连接。

发送相应的超时时间(http/server/location)

reset_timeout_connection on | off;

reset_timeout_connection off;(默认)

开启时,连接超时后不走四次挥手而是向客户端发送RST重置连接,释放套接字资源(例如滑动窗口)。RST关闭连接可能会带来一些问题。

关闭用户连接的方式(http/server/location)

lingering_close off | on |always

lingering_close on;(默认)

always:关闭连接前必须无条件处理连接上的所有用户发送的数据。

off:关闭连接前不理会连接上是否有准备就绪的来自用户发送的数据。

on:一般来说关闭连接前会处理连接上用户发送的数据。除了有些情况下业务认定之后数据是不需要的。

关闭前的超时时间(http/server/location)

lingering_timeout 5s;(默认)

在关闭前等待lingering_timeout 时间,如果没有数据可读,直接关闭连接。如果有,则在读取完连接缓存区的数据并丢弃后关闭连接。

lingering_time(http/server/location)

lingering_time 30;(默认)

用户请求的content-length大于max_client_body_size配置时,nginx会返回413(request entity too large)响应。但是很多客户端不理会,仍然会继续上传,这时经过lingering_time时间后,此时nginx不管用户是否在上传都会把连接关掉。

禁用keepalive(http/server/location)

keepalive_disable [ msie6 | safari | none ]...

keepalive_disable msie6 safari;(默认)

keepalive功能是为了让多个请求复用一个http长连接,这个功能对服务器性能提升有帮助。但是例如IE6和safari,它们使用keepalive时发送post请求处理有性能问题。所以默认IE6和safari禁止keepalive。

keepalive超时时间

MIME类型设置(http/server/location)

设置mime type到文件扩展名的映射。多个扩展名可以映射到同一个MIME type。

types {

text/html html;

text/html conf;

image/gif gif;

image/jpeg jpeg jpg;

}

按照请求方式限制客户端的请求(location)

参数取值包括:GET、HEAD、POST、PUT、DELETE、MKCOL、COPY、MOVE、OPTIONS、PROPFIND、PROPPATCH、LOCK、UNLOCK或PATCH。

limit_except GET POST {

allow 192.168.1.0/32;

deny all;

}

limit_except表示允许(限制除了),后面配置的请求方式,限制其他的方式。注意,允许GET将自动允许HEAD,反过来也一样。

HTTP包体请求最大值(http/server/location)

client_max_body_size size;

client_max_body_size 1m;

浏览器发送含有较大HTTP包体的请求时,头部会有一个content-length字段,client_max_body_size是用来限制content-length表示的值的大小,当用户上传大文件时,nginx收完请求头发现content-length大于限制的大小就直接返回413(request entity too large),而不用等接收完整个包体。

对请求限速(http/server/location/if)

表示限制服务器响应客户端时每秒发送的字节数,可用于下载限速。

limit_rate speed;

limit_rate 0;(默认,0为不限速)

可以针对不同客户端限速

server {

if ($slow) {

set $limit_rate 400k;

}

}

超过指定大小才开始限速(http/server/location/if)

limit_rate_after 1m;

limit_rate_after 100k;

响应长度超过limit_rate_after后才开始限速。

文件操作优化

开启sendfile(http/server/location)

sendfile on | off;(默认off)

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

打开文件缓存(http/server/location)

文件缓存会保存以下三种信息:

1、文件句柄、文件大小和上次修改事件。

2、已经打开过的目录结构。

3、没有找到的或没有权限的文件信息。

这样通过读取缓存可以减少对磁盘的操作。

open_file_cache off;(默认关闭)

open_file_cache max=1000 inactive=20s;

max:当内存中存储的元素到达1000时,采用LRU(least recently used)算法,移除最近最少使用的元素来保存新元素。

inactive:20s没有被访问过的元素会被淘汰。默认60s。

是否缓存打开文件错误的信息(http/server/location)

open_file_cache_errors on| off;

表示是否缓存打开文件时出现找不到路径或没有权限的等错误。

不被淘汰的最小访问次数(http/server/location)

open_file_cache_min_uses 1;

在inactive时间内被访问大于或等于open_file_cache_min_uses次的纪录不会被淘汰。

文件缓存检查频率

open_file_cache_valid 60s;

默认60s检查一次缓存中元素是否有效。

客户端请求的特殊处理

忽略不合法的http头部(http/server)

ignore_invalid_headers on| off;

ignore_invalid_headers on;(默认)

off:出现不合法头部时,nginx会拒绝服务,并响应400(bad request)错误。

on:则会忽略此HTTP头部。

http头是否允许下划线(http/server)

underscores_in_headers off | on;

默认为off,不允许头部名称中带"_"(下划线)

If-Modified-Since处理策略(http/server/location)

if_modified_since [off | exact | before];

if_modified_since exact;(默认)

if_modified_since代表浏览器本地缓存文件时的时间。

off:忽略该头部,每次返回最新文件。

exact:将if-modified-since与文件上次修改时间做精确对比,如果没有匹配上则返回文件最新内容,如果匹配上了则返回304(not modified),表示客户端文件是最新的,客户端收到读取本地缓存,没必要浪费宽带。

before:只要文件上次修改时间早于或等于if-modified-since时间就返回304给客户端。

合并多个/符号(http/server/location)

merge_slashes on | off;

merge_slashes on;(默认)

url中多个/符号相邻出现时合并为一个。

DNS地址解析(http/server/location)

resolver address....;

resolver 127.0.0.1 192.168.1.1;

设置dns服务解析地址

DNS地址解析超时时间(http/server/location)

resolver_timeout time;

resolver_timeout 30s;(默认)

返回错误页时是否标明nginx版本(http/server/location)

server_tokens on | off;

server_tokens on;(默认)

处理请求时出错,是否在响应的server头部中表明nginx版本。

负载均衡配置

集群配置(http)

upstream name {....}

upstream定义了一个上有服务器集群,便于反向代理的proxy_pass使用。

upstream backend {

server backend1.example.com;

server backend2.example.com;

server backend3.example.com;

}

server {

location /backend {

proxy_pass http://backend;

}

}

server配置(upstream)

server name [parameters];

集群中单台机器的配置。

upstream backend {

server backend1.example.com weight=5;

server 127.0.0.1:8080 max_fails=30s fail_timeout=30s;

server unix:/tmp/backend3;

}

name可以是域名,ip:port,unix句柄等。其后面的参数如下:

weight:设置服务器权重,默认1。

max_fails:默认1,表示fail_timeout时间段内,如果向上游服务器转发失败次数超过max_fails配置次数,则认为在fail_timeout时间段内服务器不可用。

fail_timeout:默认10s,表示在此时间段内转发失败次数超过max_fails次,则这段时间上有服务器不可用。

down:表示这台服务器永久下线。只有在使用ip_hash配置项才有用。

backup:在使用ip_hash配置时是无效的。表示只有其他上有服务器都不可用时才转发给它。

ip_hash配置(upstream)

ip_hash与权重不可以同时使用。

upstream backend {

ip_hash;

server backend1.example.com;

server backend2.example.com down;

}

通过对用户ip进行hash,让同一个用户每次请求同一个上游服务器。如果有一台服务器暂时不可用,不能直接删除,而是使用down参数进行标识,确保转发策略的一致性。

反向代理配置

proxy_pass配置(location/if)

proxy_pass url;

将当前请求反向代理到URL参数指定的服务器上。

proxy_pass http://localhost:8080/uri/;(常见url)

proxy_pass http://unix:/path/to/backend.socket:/uri/;(unix句柄)

proxy_pass http://backend;(upstream块)

默认反向代理不会转发Host头部,如果需要转发,加上配置:

proxy_set_header Host $host;

代理转发时请求方式配置(http/server/location)

proxy_method POST;

转发时客户端get请求也会改为post请求。

禁止转发响应头配置(http/server/location)

proxy_hide_header Cache-Control;

proxy_hide_header MicrosoftOfficeWebServer;

在转发响应给客户端时,配置在proxy_hide_header后面的响应头都会被忽略。

允许转发响应头配置(http/server/location)

proxy_pass_header Cache-Control;

proxy_pass_header MicrosoftOfficeWebServer;

在转发响应给客户端时,配置在proxy_pass_header后面的响应头都会被转发。

proxy_redirect(http/server/location)

proxy_redirect [ default | off | redirect replacement]

proxy_redirect default;(默认)

当上有服务器返回的是重定向或者刷新请求时(301/302),proxy_redirect可以重设头部的location或refresh字段,

off:关闭location的修改。

default:按照proxy_pass配置项,和所属的location配置项重组发送给客户端的location。

以下配置效果相同:

location /one/ {

proxy_pass http://upstream:port/two/;

proxy_redirect default;

}

location /one/ {

proxy_pass http://upstream:port/two/;

proxy_redirect http://upstream:port/two/ /one/;

}

你可能感兴趣的:(nginx模块参数配置)