前言
本篇总结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
原文地址:http://blog.51cto.com/13589448/2124666