nginx的主配置文件是nginx.conf,这里主要针对这个文件进行说明php
1.主配置文件nginx.conf
从上面的配置文件中咱们能够总结出nginx配置文件的基本结构
2.1 全局块
全局块是默认配置文件从开始到events之间的内容,主要设置一些影响nginx服务器运行的配置命令,做用域是nginx服务器全局,一般包括nginx的用户和组,容许生成的work process数,nginx进程pid文件,日志的路径和类型、配置文件引入等
2.2 events块
设计的明日您主要影响nginx服务器与用的的网络链接。经常使用的设置包括是否开启对多worker process下的网络链接进行序列化,是否容许同时接收多个网络链接,选取那种事件驱动模型处理链接请求,每一个worker process同时支持的最大链接数。
这一部分的指令对于nginx的性能影响较大,在实际阴影中须要根据实际状况灵活配置。
2.3 http块
这是nginx配置中的重要部分,代理、缓存和日志等绝大多数功能和第三方模块的配置均可以放在这个模块中。http包含全局块和下面的server块、location块。
http全局块中配置的命令包括文件引入、MIME-Type定义,日志自定义,是否使用sendfile传输文件,链接超时时间、单链接强求数上限等。
2.4 server块
server块配置和“虚拟主机”有密切联系。
注意:在http全局块中介绍的部分指令能够再server块中和location块中使用,只是做用域不一样。
在server块中,最多见的两个配置项就是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
2.5 location块
每一个server中能够包含多个location块,location块的做用体如今实现nginx功能的灵活运用
它的主要做用是,基于nginx服务器接收到的请求字符串,对除虚拟主机名称以外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现的。许多第三方模块的配置也是在这个块中提供功能。
3.全局配置
3.1 容许生成的worker process数
worker process是nginx服务器处理高并发的关键,理论上说,它的值越大,能够值得并发处理量也就越多,但实际上仍是要受到软件自己、操做系统资源、硬件等的限制。
配置格式:
number:制定能够生成的worker process数
auto:让nginx自动检测
默认的配置文件中,number=1
若是将number改成3
改成auto
3.2 pid文件存放路径
这个通常在进行编译安装的时候会进行指定,固然你也能够在配置文件中从新指定
配置格式:
file是指定的pid文件路径,默认状况下是在/var/run/nginx/nginx.pid
注意:文件路径在这里可使用相对路径,可是必须包含文件名。
此指令只能在全局块中进行配置
3.3 错误日志文件路径
这个配置能够在全局块、http、server中使用,只是做用域不一样。
配置格式:
nginx服务器的日志支持输出到某一固定的文件file或者输出到标准错误输出stderr;日志级别可选,由高到低分为debug(须要在编译安装时配置--with-debug)、info、notice、warn、error、crit、alert、emerg等。
配置实例:
注意:nginx用户必定要对指定的文件拥有读写权限,不然nginx -t会报错。
3.4 引入其余配置文件
咱们可能会引入其余的nginx配置或第三方模块的配置引用到当前的主配置中。
配置格式:
file支持相对路径,此指令能够放在配置文件的任意地方。
4.events配置块
4.1 网络链接序列化问题
网络链接中有一个“惊群”的问题,意思是,当某一时刻只有一个网络链接的时候,多个睡眠的进程会被同时唤醒,可是只有一个进程能够得到链接。若是每次唤醒的进程数目太多,会影响一部分系统性能。在nginx多进程的状况下,可能会出现这种问题。为了解决这个问题,nginx配置中包含了这样一条指令---accept_mutex,当其设置为开启的时候,将会对多个nginx进程接受链接进行序列化,防止多个进程之间的争抢。
配置格式:
4.2 是否容许同时接受多个网络链接
每一个nginx的worker process多有同时接受多个新到达的网络链接,可是要在配置文件中进行配置。
配置格式:
此指令默认为关闭状态,
只能在events中进行配置。
4.3 事件驱动模型的选择
nginx支持多种事件驱动模型来处理网络请求,包括select、poll、kqueue、epoll、rtsing、/dev/poll和eventport
配置格式:
method为使用的驱动模型,
只能在events中进行配置。
4.4 最大链接数
worker_connections主要用来设置容许每一个worker process同时开启的最大链接数。
配置格式:
这里的number不只仅包括和前端用户创建的链接数,而是包括全部可能的链接数。另外,numbers值不能大于错作系统支持大开的最大句柄数。只能在events中配置。
5.http配置段
5.1 定义MIME-Type
在经常使用的浏览器中,能够显示的内容哟HTML、XML、GIF及Flash等文本媒体类型,浏览器为区分这些资源,须要使用MIME Tyep。Nginx做为web服务器,必须能识别前端请求的资源类型。
在nginx的默认配置中,能够看到以下内容:
此指令能够在http/server/location中进行配置。
5.2 自定义访问日志
access_log记录nginx服务器提供服务过程应答前端请求的日志,支持对服务日志的格式、大小、输出等进行设置,须要使用两个指令,分别是access_log和log_format指令
access_log配置格式:
format:可选项,自定义服务日志的格式字符串,也能够经过“格式串的名称”使用log_format指令定义好的格式,“格式串的名称”在log_format中定义。
size:配置临时存放日志的内存缓冲区大小
此指令能够在http/server/location块中进行设置。默认的配置以下:
其中,main是log_format指令默认定义的日志格式字符串的名称。
若是要取消记录服务日志的功能:
log_format是专门用于定义日志格式,而且能够为格式字符串定义一个名字,以便于access_log指令能够直接调用
配置格式:
string:服务日志的格式字符串,相关变量及含义能够参考官网文档
示例:
$time_local:服务器的时间
$request:获取到请求为GET
$status:请求状态,200表示请求成功
$body_bytes_sent:获取到请求体的大小为1334B
$http_referer:http://192.168.61.130/index.php,请求的内容
$http_user_agent:获取到用户使用的是windows平台的浏览器(内核)类型
注意:此指令只能在http中配置
5.3 配置容许sendfile方式传输文件
在Linux kernel2.2版本以后出现了一种叫作“零拷贝(zero-copy)”系统调用机制,目前不少应用服务器如apache、samba、nginx都支持sendfile。nginx在支持了sendfile系统调用后,避免了内核层与用户层的上线文切换(content swith)工做,大大减小了系统性能的开销。sendfile相关指令:sendfile和sendfile_max_chunk。
sendfile配置:
用于控制sendfile功能的开关,默认关闭。能够在http/server/location中配置。
sendfile_max_chunk配置:
其中,size值若是大于0,nginx进程的每一个worker process每次调用sendfile()传输的数据量最大不能超过这个值,若是设置为0,则无限。默认设置为0。能够在
http/server/location中配置。
示例:
与用户创建会话以后,nginx能够保持这些连接打开一段时间,指令keepalived_timeout就是用来设置此时间的
配置格式:
timeout:服务器端对链接的保持时间。默认为65。
header_timeout:可选项,在应答报文头部的Keep-Alive域设置超时时间:“Kepp-Alive:timeout=header_timeout
”。报文中的这个指令能够被Mozilla和Konqueror识别。
能够配置在server、location中
示例:
其含义是,在服务器端保持链接的时间设置为120s,发给用户端的应答报文头部中Kepp-Alive域的超时时间为100s。
能够配置在
http/server/location中。
5.5 单链接请求上限数
nginx服务器端和用户端创建会话链接后,用户端经过此链接发送请求,指令keepalive_requests用于限制用户经过某一链接线nginx发送请求的次数。
配置格式以下:
默认值为100,能够在server和location中。
5.6 配置监听
配置监听使用listen指令,经常使用的有两种配置方法
第一种:配置监听的ip地址
address:监听的IP地址,若是是IPV6地址,须要用中括号“[]”括起来。
port:端口号,若是只是定义了IP地址,没有定义端口号,就使用80端口
default_server:标识符,将此虚拟主机设置为address:port的默认主机。
setfib=number:老版本使用,现不经常使用
backlog=number:设置监听函数listen()最多容许多少网络链接同时处于挂机状态,在FreeBSD中默认为-1,其余平台为511
rcvbuf=size:设置监听socket接收缓存区大小
sndbuf=size:设置监听socket发送缓存区大小
deferred:标识符,将accept()设置为Deferred模式
accept_filter=filter:设置监听端口对请求的过滤,被过滤的内容不能被接受和处理。这个功能只在FreeBSD和NetBSD中可用。
bind:标识符,使用独立的bind()处理此address:port
ssl:标识符,设置会话链接使用SSL模式运行,与HTTPS服务有关。
示例:
location的配置语法:
其中,uri变量是待匹配的请求字符串,可使不放正则表达式的字符串,如index.php等;也能够是包含正则的字符串,如\.php$(表示以.php结尾的URL)等。
其中,方括号中的内容是可选项,用来改变请求字符串与uri的匹配方式。在不添加此选项时,nginx服务器首先在server块的多个location块中搜索是否有标准uri字符串匹配,若是有多个能够匹配,就记录匹配度最高的一个。而后,服务器在用location块中的正则uri和请求字符串匹配,当第一个正则uri匹配成功,结束搜索,并使用这个location块处理请求;若是正则匹配所有失败,就是用刚才记录的匹配度最高的location块处理此请求。
下面是各个标识符的含义:
“=”:用于标准uri前,要求请求字符串与uri严格匹配。若是已经匹配成功,就中止继续向下搜索并当即处理此请求。
“~”:用于表示uri包含正则表达式,而且区分大小写
“~*”:用于表示uri包含正则表达式,而且不区分大小写
“~^”:用于标准uri以前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,当即使用此location处理请求,而再也不使用location块中的正则uri和请求字符串作匹配。
6.1 配置请求的根目录root
web服务器接收到请求以后,首先要在服务器端指定目录中寻找请求资源。在nginx服务器中,指令root就是用来配置这个根目录的,配置结构以下:
表示当location块接收到/zabbix的请求时,将会在/var/lib/zabbix目录下寻找index.php响应请求。
能够在http/server/location中配置,通常在location中。
6.2 更改location的uri
在location块中,除了使用root指令指明请求处理根目录,还可使用alias指令改变location接收到的URI的请求路径,其语法结构以下:
示例:
当此location块接收到“/data/index.htm”请求时,匹配成功,以后根据alias指令的配置,nginx服务器将到/location1/test/other目录下找到index.htm并相应请求。能够看到,经过alias指令的配置,根路径已经从/data更改成/location1/other了。
6.3 设置网站的默认首页index
指令index用于设置网站的默认首页,它通常由两个做用:1.用户在发出请求访问网站时,请求地址能够不写首页名称;2.能够对一个请求,根据其请求内容而设置不一样的首页。
配置结构:
其中file变量能够包含多个文件名,其间使用空格分隔,也能够包含其余变量。此变量默认为indx.html。
示例:
当location块接收到“/data/location/web”时,匹配成功,他首先将预置变量$1置为“locationtest”,而后在/data/locationtest/web路径下按照index的配置顺序依次寻找index.locationtest.html页,index.my1.html页,和index.html页,首先找到那个页面,就使用哪一个页面响应请求。
6.4 设置错误页面
若是用户端尝试查看网页时出现错误,服务器会将HTTP错误从网站发送到web浏览器。若是没法显示网页,web浏览器会显示网站发送的实际错误网页或web浏览器内置的友好错误消息。nginx支持自定义错误页面的内容。能够经过这一功能,在网站发生错误时为用户提供人性化错误界面显示。
通常来讲,HTTP 2XX表示请求正常,HTTP 3XX表示网站重定向,HTTP 4XX表示客户端出现错误,HTTP 5XX表明服务器端出现错误。
配置格式:
response:可选项,将code指定的错误代码转化为新的response。
uri:错误页面的路径或者网站地址。
示例:
在上面的是李总能够看到,变量uri其实是一个相对与nginx服务器安装路径的相对路径。若是不想将错误页面放到nginx服务器的安装路径下管理,只须要另外使用一个location块定向错误页面到新的路径下便可。
error_page指令能够在http、server、location中使用。
7.认证功能配置
7.1 基于IP配置nginx的访问权限
nignx配置经过两种途径支持基本访问权限的控制,其中一种是由HTTP标准模块ngx_http_access_module支持的,其经过IP来判断是否拥有对nginx的访问权限。
allow指令,用于设置容许访问nginx的客户端IP,配置结构以下:
address:容许访问的客户端IP,不支持同时设置多个,若是有多个IP须要设置,须要重复使用allow指令。
CIDR:容许访问的客户端的CIDR地址,例如202.80.18.23/25,前面是32位IP地址,后面“/25”表明该IP地址中前25位是网络部分,其他位表明主机部分。
all:表明容许全部客户端访问
另外一个是deny指令,用于设置禁止访问nginx的客户端地址,配置结构:
首先禁止192.168.1.1访问,而后容许192.168.0.1/24网段访问,而后是禁止其余全部的ip访问,匹配顺序是从上向下。
7.2 基于密码配置nginx的访问权限
nginx还支持基于http basic authentication协议的认证。须要识别用户名和密码,认证失败的客户端没有访问权限,该功能由http标准模块ngx_http_auth_basic_module支持。
auth_basic指令,用于开关认证功能。
string:开启该认证功能,并配置验证时的指示信息。
off:关闭认证功能。
auth_basic_user_file,用于设置包含用户名和密码信息的文件路径,配置结构以下:
这里的密码文件支持明文和密码加密后的文件,明文格式以下:
加密密码可使用crypt()函数进行密码加密的格式,在linux上可使用htpasswd命令生成,在PHP和perl中,也提供crypt()函数。
示例:
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">html