Nginx系列--04HTTP常用指令及常用模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx系列--04HTTP常用指令及常用模块相关的知识,希望对你有一定的参考价值。

前言

本篇总结nginx中HTTP常用指令与一些常用的模块

一. HTTP协议常用指令


1. keepalive_timeout

语法 :
keepalive_timeout timeout [header_timeout];
解释 :
当第一个参数timeout的值不为零时,开启长连接。什么是长连接?我们知道应用层的HTTP协议使用的四层协议是tcp连接,而tcp连接非常重量级,如果用户请求一次资源就经历一次tcp的三次握手和四次挥手,伤不起呀!所以最好是能够重用TCP连接,用户请求一次资源后TCP连接不断开,而是等待用户的再一次请求。这种设计是非常合理的,因为一般的网站首页都是有好几十个请求的。我们以新浪官网为例
技术分享图片
那长连接什么时候断开呢?他可以从两个维度进行判断,一个时间(timeout指定),一个请求的链接数(keepalive_requests指定)。那一个维度达到就断开tcp连接。
长连接设置的时间并非越长越好,因为有可能用户一次没有这么多请求,长期保持一个空闲的链接也是一种资源的浪费。那长连接保持多长时间最佳?答案是,没有最佳,一般来说timeout的默认值75秒相对大一点,15秒可以作为一个参考值。
timeout: 这个值Nginx默认为75s,这个为长连接在服务端保持时间。[header_timeout]将会在响应报文中设置keep-alive=header_timeout,他设置的是客户端保持长连接的时间,超过这个时间客户端将会断开连接,这个参数是可选的。
可在http,sever,location上下文中使用
接下来我们测试一下长连接
示例1--长连接开启:
配置文件/etc/nginx/nginx.conf

http {
    server {
    listen 80;
    server_name node1;
        root /var/www/vhost/;
    index index.html;
    keepalive_timeout 600s;
    }
}

长连接保持的是十分钟。
技术分享图片
示例2--关闭长连接
配置文件/etc/nginx/nginx.conf

http {
    server {
    listen 80;
    server_name node1;
        root /var/www/vhost/;
    index index.html;
    keepalive_timeout 0s;
    }
}

技术分享图片

修改了配置文件,记得重载哟

__示例3--header_timeout__

http {
    server {
            listen: 80;
                server_name node1;
                root /var/www/vhost;
                index index.html;
                keepalive_timeout 10s 5s;
        }
}

技术分享图片

2. keepalive_requests

语法
keepalive_requests number
解释
在一次长连接中最多能够请求的此时,达到此值服务器端将会断开连接。
可在http,server, location上下文中使用。
示例

http {
    server {
            listen  80;
                server_name node1;
                root /var/www/vhost;
                index index.html
                keepalive_timeout 600s;
                keepavlie_requests 2;
        }
}

技术分享图片

3. keepalive_disabled

语法
keepalive_disable none | browser ...;
解释
指明那些浏览器不开启长连接,像早期的ie 6浏览器就不支持长连接。默认msie6不开启长连接。对于这些不支持长连接的浏览器,server端开启长连接就没有必要了,所以要将不支持的浏览器去除。
可在http,server,location上下文中使用。

4. send_timeout

语法
send_timeout time
解释
指定相应客户端的超时时长。他是两次成功写操作相应报文时间,而不是传输整个相应报文时间。如果客户端在这个时间没有收到任何相应,连接会断开。默认是60秒

5. client_body_buffer_size

读取缓冲区大小,这个缓冲区用于存放用户请求body部分。如果请求的body大小大于缓冲区大小,整个body部分或者body的部分将会被写入临时文件中。

6. client_body_temp_path

语法
client_body_temp_path path [level1 [level2 [level3]]];
解释
指明用于存储用户body的目录,他是一个三级子目录结构。
示例
配置:
client_body_temp_path /spool/nginx/client_temp 1 2;
文件路径:
/spool/nginx/client_temp/7/45/00000123457
说明:
存储在磁盘是,每一个body会以一个文件的形式存在,他的文件名是通过hash得到。示例中的hash文件名为74500000123457。配置中的level 1为1,表明取hash中的第一个字母作为一级目录,配置中的level 2 为2,表明取hash中后续的两个字母为二级目录。所以文件路径为/spool/nginx/client_temp/7/45/00000123457。

7. limit_rate

设置响应报文传输给客户端的速率。单位是b/s。默认是0,0表示没有限制。

8. limit_except

设置能在location中使用的http方法。可以是如下这些:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, or PATCH。容许GET方法,那么HEAD方法也可以。
注意次指令只能在location中使用。
示例
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
这个配置可以使用GET和HEAD方法。

9. sendfile

这是sendfile功能是否开启,默认是off。
sendfile 功能:对于小的相应报文,并不是在应用层进行封装,而是在内核中封装后直接返回给用户。

二. 常用模块


1. ngx_http_access_module

作用
通过用户IP限制用户访问
示例
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
说明
禁止192.168.1.1访问,除了192.168.1.0/24,10.1.1.0/16,2001:0db8::/32,其余都拒绝。

2. ngx_http_auth_basic_module

作用
通过用户名和密码控制用户访问
示例
location / {
auth_base "HTTP Basic Authentication ";
auth_basic_file_path /etc/nginx/conf.d/htpasswd;
}

创建登陆用户
使用的工具是htpasswd,来自httpd-tools包中
~]# htpasswd -c /etc/nginx/conf.d/htpasswd user1
技术分享图片

3. ngx_http_sub_status_module

用于查看nginx内部状态。
示例
location /status {
stub_status;
}
技术分享图片

4. ngx_http_gzip_module

作用
用于压缩相应报文
示例

gzip  on; #启用压缩功能
gzip_comp_level 6;    #指明压缩的的高级,数字越大,响应报文越小,但越占用CPU。
gzip_min_length 64;   # 当相应报文达到多少时才进行压缩。单位是字节
gzip_proxied any;
gzip_types text/xml text/css  application/javascript;

6、gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
off:对代理的请求不启用
no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;

参考

http://nginx.org/en/docs/
http://nginx.org/en/docs/http/ngx_http_access_module.html

以上是关于Nginx系列--04HTTP常用指令及常用模块的主要内容,如果未能解决你的问题,请参考以下文章

九爷带你了解 nginx HTTP模块配置常用指令

Nginx 模块常用指令

nginx作为http服务器常用模块

Nginx Record

Nginx Record

Nginx核心模块——HTTP中的配置指令location和rewrite介绍