nginx的主配置文件是nginx.conf,这里主要针对这个文件进行说明
1.主配置文件nginx.conf
2.nginx配置文件的结构
从上面的配置文件中我们可以总结出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同时开启的最大连接数。
配置格式:
默认值为512.
这里的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配置格式:
path:配置日志文件的存放路径和名称
format:可选项,自定义服务日志的格式字符串,也可以通过“格式串的名称”使用log_format指令定义好的格式,“格式串的名称”在log_format中定义。
size:配置临时存放日志的内存缓冲区大小
此指令可以在http/server/location块中进行设置。默认的配置如下:
其中,main是log_format指令默认定义的日志格式字符串的名称。
如果要取消记录服务日志的功能:
log_format是专门用于定义日志格式,并且可以为格式字符串定义一个名字,以便于access_log指令可以直接调用
配置格式:
name:格式字符串的名字
string:服务日志的格式字符串,相关变量及含义可以参考官网文档
示例:
输出如下:
$remote_addr:获取用户的IP地址
$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中配置。
示例:
5.4 配置连接超时时间
与用户建立会话之后,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服务有关。
示例:
监听所有80和8000端口
6.配置location块
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的请求路径,其语法结构如下:
其中,path为修改后的根路径。
示例:
当此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代表服务器端出现错误。
配置格式:
code:要处理的HTTP错误代码
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,用于设置包含用户名和密码信息的文件路径,配置结构如下:
其中file问认证文件的绝对路径。
这里的密码文件支持明文和密码加密后的文件,明文格式如下:
加密密码可以使用crypt()函数进行密码加密的格式,在linux上可以使用htpasswd命令生成,在PHP和perl中,也提供crypt()函数。
示例:
运行后输入密码即可。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">