Nginx http模块配置

Nginx http模块配置详解

Nginx 中的 http 模块从外到内有 http 块、server 块、location 块,同时各个模块有各自的属性元素。每个模块的具体作用如下:

模块 说明
http 块 即一个 http 处理模块,可进行 http 的相关参数配置,内可以包含多个 server 块。
server 块 即是一个虚拟主机,需配置域名和端口,也只处理对应主机域名的 http 请求,内可包含多个 location 块。
location 块 对应具体的路径请求(http 请求)。

它们的大体关系如下:

http{ server{ location { } location { } } server{ location { } location { } } }

http块常用配置

upstream

定义上游服务器集群,在反向代理中 proxy_pass 使用,用于负载均衡。如:

upstream backend{ ip_hash; server 192.168.0.1; server 192.168.0.2:8080; server 192.168.0.3 max_fails=5 fail_timeout=30s; server 192.168.0.4 down; } server { location /{ proxy_pass http://backend; } }

当希望某一请求固定到指定上游服务器上,可以在 upstream 块中加 ip_hash 关键字。注意 upstream 块内的 server 使用。server 的具体规则如下:

  1. server 后可以是域名、ip 地址或加端口;

  2. 当某 server 不使用时,则在后加 down 关键字;

  3. 若希望某一服务器处理更多请求,则可以在后加权重 weight ,如 weight = 10,默认值为 1(不能与 ip_hash 同时使用);

  4. 配置在指定时间内失败多少次,服务器不可用,可用配置 fail_timeout(失败时间,默认为 10 秒),max_fails(失败次数,默认为 1,若为 0,则不检查失败)。

server块常用配置

listen

监听的端口,后可加 ip 地址、端口或主机名,如:

listen 8080 listen 127.0.0.1:8080 listen *:8080

注意:不加端口时,默认监听 80 端口。

server_name

server_name 用于与 http 请求 header 头部的 Host 匹配。注意:后可跟多个主机名,主机名也可使用通匹符,如 *.test.com

location

路径配置

符号有:=、~、~\*、^~、@,模式为:location 符号 /uri,具体解释如下:

符合 说明
= 表示完全匹配,不存在正则表示,如 location = /uri {…}
~ 表示匹配时,大小写敏感的,如 location ~ /uri {…}
~* 表示匹配时,大小写不敏感,即忽略大小写问题,如 location ~* /uri {…},这时 /uri,/Uri, /URI 都可以匹配上。
^~ 表示匹配时,只需开头部分匹配上即可,如 location ^~ /uri/ {…} ,这时只要以 /uri/ 开头的地址都会匹配上。
@ 表示 nginx 内部的重定向,不直接处理用户的请求,如 location @error {…} , 这时可以到另一个location 内部,重定向到 @error 路径,如 location ~ /test {error_page 404 @error}。

限时请求方法

limit_except 后跟不允许的方法,括号为可限制 ip,同时注意请求方法的包含原则,如限制了 GET 方法,则同时也就限制了 HEAD 方法。如:

limit_except GET { allow 192.168.0.1/32; deny all; }

即禁止除 192.168.0.1 地址外的,方法为 GET 或 HEAD 的请求。

配置转发

配置转发的方法 proxy_method,如:

location ~ /test{ proxy_method=POST; }

表示不管请求是什么方法,转发后的方法为 POST。

配置转发路径

配置转发路径 proxy_pass,如:

location ~ /test{ proxy_pass https://192.168.0.5:8080; } location ~ /test1{ proxy_pass https://backend; }

注意:转发时,默认不会带上原求的 Host 头部,若想带上,则需加上配置 proxy_set_header Host $host;

http和server通用配置

配置请求头header

配置请求头 header(包括请求行和请求头部)的内存 buffer 大小 client_header_buffer_size,默认为client_header_buffer_size 1k ,即 1k 大小。

当超过时,由下面的超大请求内存 large_client_header_buffers 来决定是否抛错。

配置超大请求header

配置超大请求 header 的内存 buffer 大小 large_client_header_buffers,后跟 buffer 的个数和每个 buffer 的大小,默认为 large_client_header_buffers 4 8k,即 4 个 buffer,每个 buffer 为 8k。

当请求行(即是协议+方法+地址)大于单个 buffer 大小时,则返回 414(requst uri too large),当请求中的单个 header 大于了单个 buffer 大小,则返回 400(bad request)。

请求行+请求头部超过 buffer 个数*单个 buffer 大小也会出错的。

http server location通用配置

限制请求体大小

限制请求体大小 client_max_body_size ,如 client_max_body_size 10m; 即限制请求体最大为 10m,默认值为1m。超过则发送 403( reques entity to large) 响应。

配置首页

配置首页 index,当路径为 / 时,通常会返回首页,默认为 index.html 页面,如:

location / { root path; index /index1.html /index2.html /index3.html; }

注意:index 后可跟多个地址,返回时,则返回第一个可访问的首页。示例中,则返回地址为 path/index1.html。

配置重定向

根据 http 返回码重定向页面 error_page,error_page 后跟返回码和重定向地址,如:

server { error_page 404 /404.html; error_page 400 = 200 /404.html; error_page 403 = /404.html; error_page 405 406 /404.html; location = /404.html { proxy_pass http://192.168.0.1/404.html; } }

注意:error_page 可跟多个返回码;虽然重定向了,但返回码到客户端是不变的。不过,可以通过 = 来改,= 后接新的返回码,后也可以不跟返回码,让重定向后的请求决定。

读取请求头部超时时间

读取请求头部超时时间 client_header_timeout (默认单位为秒),默认为 client_header_timeout 60,即读取头部超时时间为 60 秒,超时由返回 408(request time out)。

读取请求体超时时间

读取请求体超时时间 client_body_timeout (默认单位为秒) 默认为 client_body_timeout 60,即读取请求体超时时间为 60 秒。

发送响应超时时间

发送响应超时时间 send_timeout (默认单位为秒) 默认为 send_timeout 60,即发送超时时间为 60 秒。

长连接时间

长连接时间 keepalive_timeout (默认单位为秒),默认为 keepalive_timeout 75。

最大请求数

一个长连接的最大请求数 keepalive_requests,默认为 keepalive_requests 100 ,即一个连接上最多可发送 100 次请求。

DNS解析地址

设置 DNS 解析地址 resolver 后地址,可多个,如:resolver 192.168.0.1 192.168.0.2

Nginx配置文件总结

Nginx 默认使用的配置文件是 nginx.conf,同时,在 nginx.conf 文件里面,我们还可以使用 include 指令包含其他的配置文件。