nginx中的http模块配置
nginx中的http模块配置
文章目录
一、简介
本文将介绍http各个模块及常用的路径配置。
二、http模块总览
http模块从外到内有http块、server块、location块,同时各个模块有各自的属性元素。
-
http块:即一个http处理模块,可进行http的相关参数配置,内可以包含多个server块;
-
server块:即是一个虚拟主机,需配置域名和端口,也只处理对应主机域名的http请求,内可包含多个location块;
-
location块:对应具体的路径请求(http请求)。
总体示意图如下:
http{
server{
location {
}
location {
}
}
server{
location {
}
location {
}
}
}
三、http块常用配置
3.1 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使用:
- 后可以是域名、ip地址或加端口;
- 当某server不使用时,则在后加 down 关键字;
- 若希望某一服务器处理更多请求,则可以在后加权重 weight ,如weight=10,默认值为1(不能与ip_hash同时使用);
- 配置在指定时间内失败多少次,上器服务器不可用,可用配置fail_timeout(失败时间,默认为10秒),max_fails(失败次数,默认为1,若为0,则不检查失败)。
四、server块常用配置
4.1 listen
监听的端口,后可加ip地址、端口或主机名,如
listen 8080
listen 127.0.0.1:8080
listen *:8080
注意:不加端口时,默认监听80端口。
4.2 server_name 主机名称
server_name用于与http请求header头部的Host匹配。
注意:后可跟多个主机名,主机名也可使用通匹符,如*.test.com。
五、location块常用配置
5.1 路径配置
路径配置(符号有:=、、*、^~、@,模式为: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}。
5.2 请求限制
限制请求的方法 limit_except method {…},limit_except后跟不允许的方法,括号为可限制ip,同时注意请求方法的包含原则,如限制了GET方法,则同时也就限制了HEAD方法。如
limit_except GET {
allow 192.168.0.1/32;
deny all;
}
即禁止除192.168.0.1地址外的,方法为GET或HEAD的请求
5.3 配置转发方法
配置转发的方法proxy_method,如:
location ~ /test{
proxy_method=POST;
}
表示不管请求是什么方法,转发后的方法为POST。
5.4 配置转发路径
配置转发路径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块都可使用的配置
6.1 配置请求头header内存buffer大小
配置请求头header(包括请求行和请求头部)的内存buffer大小 client_header_buffer_size
默认为client_header_buffer_size 1k ,即1k大小。当超过时,由下面的超大请求内存 large_client_header_buffers来决定是否抛错。
6.2 配置超大请求header内存buffer大小
配置超大请求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块都可使用的配置
7.1 限制请求体大小client_max_body_size
限制请求体大小 client_max_body_size ,如
client_max_body_size 10m; 即限制请求体最大为10m,默认值为1m。超过则发送403( reques entity to large)响应。
7.2 配置首页index
当路径为/时,通常会返回首页,默认为index.html页面,如:
location / {
root path;
index /index1.html /index2.html /index3.html;
}
注意:index后可跟多个地址,返回时,则返回第一个可访问的首页。示例中,则返回地址为path/index1.html。
7.3 根据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可跟多个返回码;
-
虽然重定向了,但返回码到客户端是不变的。不过,可以通过=来改,=后接新的返回码,后也可以不跟返回码,让重定向后的请求决定。
7.4 读取请求头部超时时间 client_header_timeout (默认单位为秒)
默认为client_header_timeout 60,即读取头部超时时间为60秒,超时由返回408(request time out)。
7.5 读取请求体超时时间 client_body_timeout (默认单位为秒)
默认为client_body_timeout 60,即读取请求体超时时间为60秒。
7.6 发送响应超时时间 send_timeout (默认单位为秒)
默认为send_timeout 60,即发送超时时间为60秒。
7.7 长连接时间 keepalive_timeout (默认单位为秒)
默认为 keepalive_timeout 75
7.8 一个长连接的最大请求数 keepalive_requests
默认为 keepalive_requests 100 ,即一个连接上最多可发送100次请求
7.9 设置DNS解析地址 resolver
设置DNS解析地址 resolver,后地址,可多个,如:resolver 192.168.0.1 192.168.0.2
上一篇: IP地址和掩码解析分类
下一篇: php打乱数组二维数组多维数组的简单实例
推荐阅读
-
nginx中http核心模块的配置指令4
-
nginx中的http模块配置
-
nginx中http核心模块的配置指令1
-
Spark远程调试配置,在IDEA中的配置
-
Maven中的AJAX4JSF资源配置 maven配置管理JBossApacheXML
-
Maven中的AJAX4JSF资源配置 maven配置管理JBossApacheXML
-
SpringBoot中关于static和templates的注意事项以及webjars的配置
-
RCP中采用actionSet配置菜单的方法总结 博客分类: RCP EclipseUIXML
-
Ubuntu下Nginx+PHP7-fpm的配置
-
Golang中 怎么通过sock实现Nginx和golang程序的fastcgi通讯