配置文件主要格式
main,event,http
worker_processes 3;
events {
worker_connections 1024;
}
http {
upstream {
.,..
}
server {
listen IP:PORT;
location /URL {
if ...{
...
}
root "/path/to/somewhere";
...
}
}
server {
,,.
}
}
正常运行的必备配置:
1、user USERNAME [GROUPNAME];
指定运行worker进程的用户 和组,例如:
user nginx nginx;s
2、pid /path/to/pid_file;
指定nginx的pid文件;
3、worker_rlimit_nofile #;
指定一个worker进程所能够打开的最大文件句柄数;
4、worker_rlimit_sigpending #;
指定每个用户能够发往worker的信号的数量;
优化性能相关的配置:
1、worker_processes #:
worker线程的个数;通常应该为物理CPU核心个数减1;
2、worker_cpu_affinity cpumask ...;
绑定worker进程至指定的CPU上;
CPUMASK
0001
0010
0100
1000
例如:
worker_cpu_affinity 00000001 00000010 00000100;
3、timer_resolution t;
gettimeofday();
4、worker_priority nice;
-20, 19
事件相关的配置:
1、accept_mutex [on|off]
内部调用用户 请求至各worker时用的负载均衡锁;打开时表示能让多个worker轮流地、序列化地与响应新请求;
2、lock_file /path/to/lock_file;
3、accept_mutex_delay #ms;
4、use [epoll|rgsig|select|poll];
定义使用的事件模型;建议让Nginx自动选择;
5、worker_connections #;
每个worker进程所能够响应的最大并发请求数;
虚拟主机相关的配置:
1、server {}
定义一个虚拟主机;
2、listen
监听的端口
完整格式 :listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen address[:port] [default_server] ssl
backlog=number: 指明TCP协议backlog队列的大小。默认为-1,表示不设置;
rcvbuf=size:设定监听句柄的SO_RCVBUF参数;
例如:
listen 172.16.100.8:8080
3、server_name name [...];
后可跟多个主机名;名称还可以使用通配符和正则表达式(~);
(1) 先做精确匹配;www.magedu.com:
(2) 左侧通配符匹配,例如:*.magedu.com;
(3) 右侧通配符匹配,例如:www.*;
(4) 正则表达式匹配,例如: ~^.*\.magedu\.com$
(5) default_server
4、location [=|~|~*|^~] /uri {...}
location @name
功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;
=: 精确匹配检查;
~: 正则表达式模式匹配,区分字符大小写;
~*:正则表达式模式 匹配,不区分字符大小写;
^~:URI的前半部分匹配,不检查正则表达式;
匹配优先级:精确匹配(=)、^~、~和~*、由不带符号的URL进行左侧匹配;
5、root
设置web资源路径映射;用于指明请求的URL所对应的文档的根目录路径;
`location /images/ {
root "/web/imgs/";
}`
6、alias path
用于location配置段,定义路径别名
`location /images/ {
alias /www/pictures/;
}`
注意:root表示指明路径为对应location的“ /” URL;alias表示路径映射,即location中的URL是相对于alias所指明的路径而言;
7、index file
默认主页面
index index.html;
8、error_page code [...] [=code] URI | @name
根据http状态码重定向错误页面
error_page 404 /404.html
=[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;
9、try_files
try_files path1[,path2,...] URI
10、基于IP的访问控制
allow IP/Network;
deny IP/Network;
11、基于用户的访问控制
basic,digest
auth_basic "";
auth_basic_user_file "/PATH/TO/PASSWDORD_FILE"
账号密码文件建议使用htpasswd来创建
12、https服务
生成私钥,生成证书签署请求,并获得证书。
13、stub_status {on|off};
仅能用于location上下文;
location /status {
stub_status on;
allow 172.16.0.0/16;
deny all;
}
结果示例:
Active connections: 6 #当前所有处于打开状态的链接数;
server accepts handled requests
241 241 431
(1)已经接受过的连接数
(2)已经处理过的连接数
(3)已经处理过的请求数:在“保持连接”模式下,请求数量可能会多于连接数量。
Reading:0 Writing:1 Waiting:5
Reading:正处于接受请求状态的连接数
Writing:请求已经接收成功,正处于处理请求或发送响应的过程中的连接数
Waiting:保持连接模式,且处于活动状态的连接数。
14、rewrite regex replacement flag;
例如:
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
http://www.magedu.com/images/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg
flag:
last:
此rewrite规则重写完成后,不再被后面其它的rewrite规则进行处理:而是由User
Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程。
break: 一旦被此rewrite规则重写完成后,由User
Agent对新的URL重新发起请求,且不再会被当前location内的任何rewrite规则所检查。
redirect:以302响应码(临时重定向)返回新的URL;
permanent 以301响应码(永久重定向)返回新的URL;
15、if
语法: if (condition) {...}
应用环境:server,location
condition:
(1) 变量名:
变量值为空串,或者以“0”开始,则为false;其他均为true
(2) 以变量为操作数构成的比较表达式可使用=,!=类似的比较操作符进行测试
(3) 正则表达式的模式匹配操作
(4) 测试路径为文件可能性:-f !-f
(5) 测试指定路径为目录的可能性:-d !-d
(6) 测试文件的存在性:-e, !-e
(7) 检查文件是否有执行权限:-x , !-x
例如:
if($http_user_agent ~* MSIE){
rewrite ^(.*)$ /msie/$1 break; 判断是手机还是电脑用户
}
16、防盗链
location ~* \.(jpg|gif|jpeg|png){
valid_referer none blockd www.magedu.com;
if($invalid_referer){
rewrite ^/ http://www.magedu.com/403.html;
}
}
17、定制访问日志
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
注意此处可用变量为nginx各模块内建变量。
网络连接相关的配置:
1、keepalive_timeout time;
保持连接的超时时长,默认为75s;
2、keepalive_requests #;
在一次保持连接上允许承载最大资源请求数;
3、keepalive_disable [msie6|safari|none]
为指定类型的浏览器禁用长连接;
4、tcp_nodelay on|off
对长连接是否使用TCP_NODELAY选项;
5、client_header_timeout time;
读取http请求报文首部的超时时长;
6、client_body_timeout time;
读取http请求报文body部分的超时时长;
7、send_timeout time;
发送响应报文的超时时长;
对客户端请求进行限制:
1、limit_except METHOD {...}
指定对范围之外的其它方法的访问控制;
limit_except GET {
allow 172.16.0.0/16;
deny all;
}
2、client_body_max_size SIZE;
限制请求报文中body部分的上限;通过检测请求报文首部中的"Content_Length"来判定;
3、limit_rate speed;
限制客户端每秒种传输的字节数,默认为0,表示无限制;
对内存或磁盘资源进行分配
1、client_body_in_file_only on|clean|off;
请求报文的body部分是否可暂存于磁盘;on表示允许,并且即使请求结束,也不会删除暂存的内容;clean表示会删除;off不允许暂存;
2、client_body_in_single_buffer on|off
3、client_body_buffer_size size;
4、client_body_temp_path DIR [level1 [level2 [level3 [level4]]]]
例如:client_body_temp_path /var/tmp/nginx/client 1 2
5、client_header_buffer_size size:
MIME类型相关的配置:
1、types {}
定义MIME types至文件的扩展名;
types {
text/html .html;
image/jpeg .jpg;
}
2、default_type MIME-TYPE;
文件操作优化相关的配置:
1、sendfile on|off;
2、aio on|off;
3、directio size|off;
是否使用O_DIRECT选项去请求读取文件;与sendfile功能互斥;
4、open_file_cache max=N[inactive=time] | off;
nginx可以缓存以下三种信息:
(1) 文件句柄、文件大小和最近一次修改时间;
(2) 打开目录的目录结构;
(3) 没有找到的或者没有权限操作的文件的相关信息;
max=N表示可缓存的最大条目上限;一旦到达上限,则会使用LRU从缓存中删除最近最少使用的条目;
inactive=time: 在inactive指定的时长内没有被访问过的缓存条目就会淘汰;
5、open_file_cache_errors on|off;
是否缓存在文件缓存中缓存打开文件时出现找不到路径,没有权限等的错误信息;
6、open_file_cache_min_uses time;
每隔多久检查一次缓存中缓存条目的有效性;默认60s;
重点关注:server{}, location{}, listen, server_name, root, alias, keepalive_timeout, keepalive_requests, error_page