1、expires
expires用于控制页面缓存时间。属于ngx_http_headers_module模块。
Syntax: expires [modified] time;
expires epoch | max | off;
Default: expires off;
Context: http, server, location, if in location
示例:控制图片静态资源在客户端浏览器缓存10天
location ~* \.(png|gif)$ {
root /code/images;
expires 10d;
}
2、error_page
error_page可以针对指定的错误,给用户返回定义的URI的内容,即内部重定向到定义的URI。属于ngx_http_core_module模块。
Syntax: error_page code ... [=[response]] uri;
Default: —
Context: http, server, location, if in location
例如:
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
当用户请求的uri不存在时,本来应该返回404状态码,给用户显示404错误。配置以上配置后:
1、用户遇上404,返回404状态码,给用户显示/404.html的内容。
2、用户遇上500、502、503、504时,放回对应的状态码,给用户显示/50x.html的内容。
当然,如果不想给用户返回对应状态码,可以使用" = response " 语法将响应代码更改为另一个。例如:
error_page 404 =200 /404.html;
当用户遇上404,本来返回404状态码的,改为返回200状态码,同时给用户显示/404.html的内容。
如果错误响应是由代理服务器或FastCGI / uwsgi / SCGI / gRPC 服务处理的,并且服务器可能返回不同的响应代码(例如200、302、401或404),则可以使用返回的代码进行响应。例如:
error_page 404 = /404.php;
我们还可以使用下面方式将错误处理传递到命名位置:
location / {
error_page 404 403 401 = @error;
}
location @error {
default_type text/html;
return 200 '网站正在维护中。';
}
也可以对错误使用URL重定向进行处理。
error_page 403 http://www.baidu.com;
error_page 404 =301 http://www.baidu.com;
注意,在这种情况下,默认情况下,会将响应状态码302返回给客户端。同时只能将其更改为301、302、303、307和308中的一个。
3、try_files
Syntax: try_files file ... uri;
try_files file ... @name;
try_files file ... =code;
Default: —
Context: server, location
try_files指令,用于路径匹配,nginx会按它指定顺序检查文件是否存在,并使用找到的第一个文件进行请求处理。属于ngx_http_core_module模块。
文件的路径是根据root和alias指令从file参数中构造的完整的文件路径。可以通过在名称末尾指定斜杠(如"uri /")来检查目录是否存在。如果未找到任何文件,则进行内部重定向到最后一个参数中指定的uri。例如:
location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
最后一个参数也可以指向一个命名的位置或者代码,如下面的示例所示。
server {
listen 80;
server_name test.cp.com;
root /test;
location / {
index index.html;
try_files $uri $uri/ $uri.html /test.html =401;
}
}
当我们去访问http://test.cp.com/1.html时。
1、会先匹配到$uri,nginx会检查test目录下有没有1.html文件,有就返回响应,没有匹配下一个。
2、匹配到$uri/时,会检查有没有1.html目录,有默认返回这个目录下的index.html文件,没有匹配下一个。
3、匹配到$uri.html,会检查站点目录下有没有1.html.html,有返回响应,没有匹配下一个。
4、匹配到/test.html,会检查站点目录下有没有test.html,有就返回响应,没有匹配下一个。
5、匹配到=401,会给用户返回401状态码。
4、valid_referers
指定"Referer"请求标头字段值,匹配到定义的值,将会导致变量 $invalid_referer 变为一个空字符串。否则,变量将设置为"1"。搜索匹配不区分大小写。属于ngx_http_referer_module模块。
Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
后面参数可以是如下:
• none:请求标头中没有"Referer"字段。
• blocked:请求标头中有"Referer"字段,但其值已被防火墙或代理服务器删除,此类值是不以"http://" 或 "https://"开头。
• server_names:"Referer"请求标头字段包含服务器名称(即nginx配置文件中定义的虚拟主机名称)之一。
• arbitrary string:定义服务器名称和可选的URI前缀。服务器名称的开头或结尾可以带有"*"。在检查过程中,"Referer"字段中的服务器端口将被忽略。
• regular expression:第一个符号应为"~"。应注意,表达式将与"http://" 或 "https://"之后的文本进行匹配。
注:"Referer"请求标头字段值记录的是从哪个页面链接访问过来的。
示例:
valid_referers none blocked server_names
*.example.com example.* www.example.org/galleries/
~\.google\.;
if ($invalid_referer) {
return 403;
}
以上示例意思是当请求标头匹配到valid_referers定义的以上情况,则将变量 $invalid_referer 变为一个空字符串,接下来if判断$invalid_referer值是否为空,空则返回false,即if语句不执行;如果不符合以上定义情况, 则变量将设置为"1",if语句成立,执行返回403状态码。
5、root和alias的区别
root与alias路径匹配主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上,alias是一个目录别名的定义,root则是最上层目录的定义。
root的处理结果是:root路径+用户URI请求。
server {
listen 80;
server_name root.cp.com;
location /download {
root /code;
}
}
// 使用root时,当我请求 http://root.cp.com/download/1.jpg 时,实际上是去找服务器上 /code/download/1.jpg 文件
alias的处理结果是:使用alias定义的路径。
server {
listen 80;
server_name root.cp.com;
location /download {
alias /code;
}
}
// 使用alias时,当我请求 http://root.cp.com/download/1.jpg 时,实际上是去找服务器上 /code/1.jpg 文件
示例:
server {
listen 80;
server_name image.driverzeng.com;
location / {
root /code;
}
location ~* ^.*\.(png|jpg|gif)$ {
alias /code/images/;
}
}
//注意:可能有些变量不适用,即
URL: http://linux.root.com/download/1.jpg
URI: /download/1.jpg
$request_filename: /code/download/1.jpg
$request_uri: /download/1.jpg
6、流量限制参数
limit_rate和limit_rate_after可以限制传输速率,属于ngx_http_core_module。
限制向客户端传输数据的速率,该速率以每秒字节数指定,零值禁用速率限制。
Syntax: limit_rate rate;
Default: limit_rate 0;
Context: http, server, location, if in location
注意:该限制是根据请求设置的,因此,如果客户端同时打开两个连接,则总速率将是指定速率的两倍。
该参数值可包含在$limit_rate变量中。
设置初始值,传输达到这个值之后再对客户端传输数据的速率进行限制
Syntax: limit_rate_after size;
Default: limit_rate_after 0;
Context: http, server, location, if in location
示例:当向客户端传输的数据达到了500k,则将传输速率限制在50k每秒。
location /flv/ {
...
limit_rate_after 500k;
limit_rate 50k;
...
}
7、配置CPU亲和性
CPU亲和性(affinity)可以将一个进程或者线程绑定到一个或一组CPU上运行,可以避免进程在CPU之间频繁迁移,提高了缓存命中率。
[root@web1 ~]# vim /etc/nginx/nginx.conf
...
worker_processes auto;
worker_cpu_affinity auto;
...
或者
...
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
...
配置后:
[root@web02 ~]# ps -eo pid,args,psr | grep [n]ginx
6011 nginx: master process /usr/ 1
7012 nginx: worker process 0
7013 nginx: worker process 1
7014 nginx: worker process 2
7015 nginx: worker process 3