Nginx相关参数配置及实列
一:Nginx配置文件的整体结构:
二:全局块相关参数设置:全局块影响nginx全局模式
(1)user nobody; 这表示我一那个用户来运行nginx,在自己没有创建特定的用户时,默认nobody用户。
(2)worker_processes参数配置; 格式: worker_processes number | auto
number:nginx进程最多可以产生的worker process数
auto:Nginx进程将自动检测。
实列:worker_processes 4 :我们将产生的worke调成4
[aaa@qq.com ~]# ps -aux | grep nginx
root 13965 0.0 0.0 46452 2052 ? Ss Dec12 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 18012 0.0 0.0 54944 10420 ? S Dec13 0:00 nginx: worker process
nginx 18013 0.0 0.0 54944 10164 ? S Dec13 0:16 nginx: worker process
nginx 18014 0.0 0.0 54944 10164 ? S Dec13 0:16 nginx: worker process
nginx 18015 0.0 0.0 54944 10164 ? S Dec13 0:16 nginx: worker process
(3)worker_cpu_affinity; 格式:worker_cpu_affinity cpumask
这一参数跟Nginx产生的worker进程数相关联一般大于worker进程数。为了提高cpu的缓存率
实列:worker_cpu_affinity 0001 0010 0100 1000 这表示将worker进程绑定在特定的cpu上
提高缓率
(4)worker_flimit_nofile: 格式:worker_flimit_nofile number
指定所有worker进程所能够打开的最大文件句丙数。
worker_rlimit_nofile 65535;
(5)worker_priority; 格式:worker_priority number
指定worker进程的nice值 -20,(100) 19(139)
worker_priority -20
三:events相关配置参数:
(1)accept_mutex on | off;设置网络连接的序列化
这一参数默认为on状态,表示当用户请求时多个nginx进程接受连接进行序列化,防止多个进程对链接的争抢 这个参数衍生的名词:惊群现象。
惊群现象:指的是一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能
所以在这里,如果accept_mutexon,那么多个worker将是以串行方式来处理,其中有一个worker会被唤醒;反之若
accept_mutex off,那么所有的worker都会被唤醒,不过只有一个worker能获取新连接,其它的worker会重新进入休眠状态
(2)multi_accept on | off;受否允许同时接受多个网络连接
该指令默认为off状态,意指每个worker process 一次只能接收一个新到达的网络连接。
若想让每个Nginx的workerprocess都有能力同时接收多个网络连接,则需要开启此配置
(3)use model;事件驱动模型的选择
model模型可选择项包括:select、poll、kqueue、epoll、rtsig等
nginx模式使用epoll事件驱动模型
(4)worker_connections number;最大连接数的配置
表示每一个worker进程数能够同时开启的最大连接数,默认是512
http相关配置参数:
(1)include mime.types;指的是网络资源的媒体类型,也是前端请求的资源类型。
include指令是将mime.type文件包含起来。
default_type application/octet-stream;默认文件类型,默认为text/plain
[aaa@qq.com nginx]# cat mime.types types结构,包含了各种浏览器能够识别的mime类型以及对应类型的文件后缀名
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
(2)sendfile on|off;是否允许sendfile方式传输文件,默认为off,可以在http块,server块,location块
(3)sendfile_max_chunk size;每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
如果size>0则表示nginx进程的每个worker进程每次调用sendefile()传输的数据最大不能超出此值。
(4) keepalive_timeout size;连接超时时间,默认为75s,可以在http,server,location块。
(5)keepalive_requests number; 这个参数限制用户通过某一个连接向nginx服务器发起请求的次数。
server全局块的相关配置:
(1)监听连接的三种方式:
listen 10.5.100.183:8080; # 监听具体IP和具体端口上的连接
listen 10.5.100.183 ; # 监听IP上所有端口上的连接
listen 8080; # 监听具体端口上的所有IP的连接
(2)主机名称和IP虚拟主机;
server_name www.node1.com; 主机名称支持正则表达式书写,可以跟多个主机
server_name ~^www\.node1\.com$
正侧表达式的匹配方式:
(1)先做精确匹配检查
(2)左侧通配符匹配检查:*.yanyurun.com
(3)右侧通配符匹配检查:如 mail.*
(4)正侧表达式匹配检查:如 ~*.*\.node1\.com$
server {
listen 8080;
server_name image.node3.com;
location / {
root "/www/shuo/"; root path:设置资源路径映射;用于指明请求的URL所对应的资源所在文件系统的起始路径
}
}
server {
listen 8080;
server_name *.node3.com; 这表示左侧通配符匹配
location / {
root "/yan/yurun/";
}
}
配置之前我们要在/etc/hosts文件中填写相关域名解析。
三:location块的定义配置:
location [ = | ~ | ~* | ^~ ] uri { … }
location @name {…}
功能:允许根据用户请求的url来匹配定义的各location;匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能。
=:精确匹配检查;
~:正则表达式莫式匹配检查,区分字符大小写;
~*:正则表达式模块匹配检查,不区分字符大小写;
^~:URL的前半部分匹配,不支持正则表达式;
匹配的优先级:精确匹配(=),^~,~,~*,不带任何符号的location;
实列:
listen 8080;
server_name www.yan.com;
location / {
root "/www/8080/";
}
location /images/ {
root "/www/image/";
}
location ~* \.(txt|text)$ {
root "/www/text/";
}
}
mkdir /www/8080
mkdir /www/{image,text}
vim /www/8080/a.txt
vim /www/text/a.txt
vim /www/image/a.txt
假设:访问10.5.100.208:8080/a.txt
那么第一个匹配,第三个匹配,显示第三个location中的信息,因为第 三个符号优先级高
假设:访问10.5.100.208:8080/image/a.txt 三个location都匹配,还是显示第三个,第三个优先级高,但是会 报错,因为他会去找www/text下找image目录下a.txt
报错因为www/text下没有image这个目录
(2)设置http响应状态码来指定特用的错误页面;
server {
listen 8080;
server_name image.node3.com;
location / {
root "/www/shuo/";
}
error_page 404 =200 /40.html; 表示当客户访问的是一个错误页面时,显示/www/40.html的内容
显示的404状态码,但我们让客户看到的是200请求成功的状态码
location =/40.html {
root /www;
}
}
Nginx访问控制机制:
(1)基于IP地址的访问控制;
server {
listen 8080;
server_name image.node3.com;
location / {
root "/www/shuo/";
allow 10.5.0.0/16; 表示仅这个网段的用户能够访问本内容资源。
deny all; 表示禁止所有用户对这个资源内容的访问。
}
error_page 404 =200 /40.html;
location =/40.html {
root /www;
}
}
(2)基于用户的访问控制;两种认证方式:basic,digest。
[aaa@qq.com ~]# mkdir -pv /www/8080/
[aaa@qq.com 8080]# vim index.html
[aaa@qq.com ~]# htpasswd -c -m /etc/nginx/users/.htpasswd tom 添加可以访问的用户
New password:
Re-type new password:
Adding password for user tom
server {
listen 8080;
server_name www.yan.com;
location / {
root "/www/8080/";
allow 10.5.0.0/16;
deny all;
auth_basic "only for vip";
auth_basic_user_file /etc/nginx/users/.htpasswd;
}
}
(3)检查用户的请求状态;
location /status { 仅能用于location上下文
stub_status on;
allow 10.5.0.0/16;
deny all;
}
Active connections: 1 当前所有处于打开状态的连接数
server accepts handled requests
199 已经接受过的连接数
199 已经处理过的连接数
351 已经处理过的请求数;在保持连接的状态模式下,请求数量可能多于连接数量
Reading 0: 正处于接受请求状态的连接数
Writing:1 请求已经接受完成,正处于处理请求或发送相应的过程中的连接数
Waiting: 0 保持连接模式,且处于活动状态的连接数
(4)Nginx中的重写机制;
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重新发起请求,且不再会被当前locatrion内的任何rewrite规则检查;
redirect:以302响应码(临时重定向)返回新的URL
permanent:以301响应码(永久重定向)返回新的
例如:
location / {
root "/www/8080/";
#allow 10.5.0.0/16;
#deny all;
#auth_basic "only for vip";
#auth_basic_user_file /etc/nginx/users/.htpasswd;
rewrite ^/bbs/(.*)$ /form/$1 break; 这是将bbs/目录下的重写到form/目录下
}
(5)Nginx基于浏览器访问的重写机制;
if($http_user_agent ~* MSIE) { //这表示客户端使用IE浏览器访问,
}
if($http_user_agent ~* Chrome) {
}
if($http_user_agent ~* Firefox) {
}
基于谷歌浏览器的相关配置;
location / {
root "/www/web/";
index index.html index.htm;
if ($http_user_agent ~* Chrome) { 表示当以谷歌浏览器访问资源时,重写到from/目录下的资源
rewrite ^(.*\.html)$ /from/$1 break;
}
}
Nginx的常用参数配置;
1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user : 用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200;
6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
7.$http_referer : 用来记录从那个页面链接访问过来的;
8.$http_user_agent : 记录客户端浏览器的相关信息;
总结:Nginx的参数有很多,这里只是基本总结了几个。
上一篇: poj 2352 Stars