-
nginx.conf文件的结构
-
全局块
-
events块
-
http块
-
http全局块
-
server块(一个或多个)
-
server全局块
-
location块(一个或多个)
-
-
-
-
各个块的作用:
-
全局块:
-
位置:配置文件开头到events块之间的内容。
-
作用范围:Nginx服务器全局。
-
内容:
-
Nginx服务器的用户(组)。
-
允许生成的worker process数。
-
Nginx进程PID的存放路径。
-
日志的存放路劲和类型。
-
配置文件引入等。
-
-
-
events块:
-
作用范围:主要影响Nginx服务器与用户的网络连接。
-
内容:
-
是否开启对worker process下的网络连接进行序列化。
-
是否允许同时接收多个网络连接。
-
事件驱动模型的选取。
-
每个worker process进程的最大连接数。
-
-
注意:该部分对Nginx服务器的性能影响较大。
-
-
http块:
-
http全局块内容:
-
文件引入。
-
MIME-Type定义。
-
日志定义。
-
是否使用sendfile传输文件。
-
连接超时时间。
-
单连接请求数上限等。
-
-
-
server块:
-
虚拟主机:
-
为充分利用硬件资源,Nginx服务器在同一台服务器上只运行一组Nginx进程,就可以运行多个网站。
-
每个server块相当于一台虚拟主机。
-
-
server全局块内容:
-
本虚拟主机的监听端口。
-
本虚拟主机的名称或IP等。
-
-
-
location块
-
内容:
-
基于Nginx服务器接收到的请求字符串(server_name/uri_string,主要为uri_string部分)进行匹配,对特定的请求进行处理。
-
地址定向。
-
数据缓存。
-
应答控制。
-
第三方模块的配置等。
-
-
-
-
基础配置指令:
-
配置运行Nginx服务器的用户(组):
-
指令:user user [group];
-
作用:
-
只有设置的用户或用户组成员才有权限启动Nginx进程。
-
配置为nobody或不配置时,表示所有用户都可以启动Nginx进程。
-
-
默认值:nobody。
-
生效位置:全局块。
-
-
配置允许生成的worker process数:
-
指令:worker_process NUM | auto;
-
通常配置值:服务器的cpu核心数。
-
生效位置:全局块。
-
-
配置Nginx进程PID存放路径:
-
指令:pid FILENAME;
-
默认值:logs/nginx.pid。
-
生效位置:全局块。
-
-
配置错误日志存放路径:
-
指令:error_log FILENAME | stderr [debug | info | notice | warn | error | crit | alert | emerg];
-
默认值:error_log logs/error.log error;
-
生效位置:全局块、http块、server块、location块。
-
-
配置文件的引入:
-
指令:include FILENAME;
-
生效位置:全局块、http块、server块、location块。
-
-
设置网络连接的序列化:
-
指令:accept_mutex on | off;
-
作用:防止某一连接到来时,多个Nginx进程争抢,影响系统性能。
-
默认值:on。
-
生效位置:events块。
-
-
设置是否允许同时接收多个网络连接:
-
指令:multi_accept on | off;
-
作用:
-
on: 每个worker process进程可以同时接收多个新到达的网络连接。
-
off:每个worker process进程一次只能接收一个新到达的网络连接。
-
-
默认值:off。
-
生效位置:events块。
-
疑问:与下文worker_connections的关系。
-
multi_accept针对新连接;worker_connections针对已连接。
-
-
-
事件驱动模型的选择:
-
指令:use select | poll | epoll | kqueue | rtsig | /dev/poll | eventport。
-
生效位置:events块。
-
-
配置最大连接数:
-
指令:worker_connections NUM;
-
作用:配置允许每个worker process同时开启的最大连接数。
-
默认值:512.
-
生效位置:events块。
-
-
定义MIME-Type
-
定义:
-
MIME-Type是网络资源的媒体类型,如HTML, XML, GIF及Flash等。
-
浏览器和服务器都需要能够识别这些资源类型。
-
mime.types文件的第一列为资源类型,第二列为相关类型的文件后缀名。
-
-
指令:
-
default_type MIME_Type;
-
-
默认值:text/plain。
-
生效位置:http块、server块、location块。
-
-
自定义服务日志:
-
日志作用:记录Nginx服务器应答前端请求的日志。
-
log_format指令:
-
指令:log_format FORMAT_NAME string...
-
FORMAT_NAME: 日志格式的名称。
-
string: 使用nginx内置变量定义的格式字符串。
-
-
生效位置:http块。
-
-
access_log指令:
-
指令:access_log FILENAME [format [buffer=size]]
-
FILENAME: 服务日志的存放路径。
-
format: log_format定义的日志格式的名称。
-
buffer: 临时存放日志的内存缓冲区大小。
-
-
默认值:access_log logs/access.log combined;
-
取消服务日志记录功能:access_log off;
-
生效位置:http块、server块、location块。
-
-
-
配置允许sendfile方式传输文件:
-
疑问:sendfile方式是一种什么样的方式?
-
sendfile指令:
-
指令:sendfile on | off;
-
作用:开启或关闭使用sendfile()传输文件。
-
默认值:off。
-
生效位置:http块、server块、location块。
-
-
sendfile_max_chunk指令:
-
指令:sendfile_max_chunk size;
-
作用:每个worker process进程每次调用sendfile()传输数据量的最大值。
-
默认值:0,表示无限制。
-
生效位置:http块、server块、location块。
-
示例:sendfile_max_chunk 128k;
-
-
-
配置连接超时时间:
-
指令:keepalive_timeout timeout [header_timeout];
-
timeout: 服务器端对连接的保持时间。默认值75秒。
-
header_timeout: 应答报文头部字段Keep-Alive的配置值:“Keep-Alive:timeout=header_timeout”。
-
-
示例:keepalive_timeout 120s 100s;
-
生效位置:http块,server块,location块。
-
-
单连接请求数上限:
-
指令:keepalive_requests NUM;
-
默认值:100.
-
作用:限制用户通过某一连接向Nginx服务器发送请求的次数。
-
-
配置网络监听:
-
指令:listen ...;
-
示例:
-
listen *:80 | *:8080;
-
listen 10.10.168.251:8080;
-
listen 10.10.168.251;
-
listen 8080;
-
-
生效位置:一般用于server块。
-
-
基于名称的虚拟主机设置:
-
指令:server_name name_string;
-
name_string: Nginx对外提供的虚拟主机的名称。
-
-
前提:设置好主机的名称,并配置好DNS。???
-
实测在ubuntu14.04 /etc/hosts文件中,增加ip和主机名的映射关系后即可。原因:linux系统再向DNS服务器发出域名解析请求之前,会首先查询/etc/hosts文件,如果里面有相应的记录,就回使用/etc/hosts里面的记录。
-
-
说明:虚拟主机名支持通配符和正则表达式。
-
选取虚拟主机的优先级:
-
说明:由于允许使用通配符和正则表达式,所以可能出现一个虚拟主机名对应多个虚拟主机。
-
优先级:
-
准确匹配的server_name;
-
通配符在开始时匹配server_name成功。
-
通配符在结尾时匹配server_name成功。
-
正则表达式匹配server_name成功。
-
-
-
生效位置:server块。
-
-
基于IP的虚拟主机配置:
-
指令:server_name IP;
-
IP: 服务器上需要已经配置了该ip地址。
-
-
生效位置:server块。
-
-
配置location块:
-
指令:location [=|~|~*|^~] uri {...}
-
说明:
-
[...]的部分是可选项,不输入该部分时,用来改变请求字符串与uri的匹配方式。
-
下文中将uri分为:标准uri(不含正则)和正则uri(含正则)。
-
-
不使用[...]时,Nginx服务器如何在server块中搜索并使用多个location块的uri和请求字符串匹配的:
-
在多个location块中搜索标准uri与请求字符串匹配度最高的一个,并记录。
-
在多个location块中搜索正则uri与请求字符串是否有匹配的:
-
如果有,则使用该location块处理此请求;
-
否则,使用匹配度最高的标准uri的location块进行处理。
-
-
-
[...]4个选项的含义:
-
= : 请求字符串与标准uri严格匹配,如果匹配成功则使用该location处理此请求。
-
~ : 表示uri包含正则表达式,并区分大小写。
-
~* : 表示uri包含正则表达式,并不区分大小写。
-
说明:如果uri包含正则,则必须使用~或~*标识。
-
-
^~: 搜索标准uri与请求字符串匹配度最高的一个,并使用该location块处理此请求。
-
说明:该种形式下,会对uri中的空格,问号等符号进行url编码。
-
-
-
生效位置:server块。
-
-
配置请求的根目录:
-
指令:root path;
-
示例:
-
location /data/
-
{
-
root /locationtest1
-
-
}
-
说明:当location块接收到/data/index.html的请求时,将在/locationtest1/data/目录下找到index.html文件来响应请求。
-
-
生效位置:http块,server块,location。通常在location块下配置。
-
-
更改location的uri:
-
指令:alias path;
-
示例:
-
location ~ ^/data/(.+\.(htm|html))$
-
{
-
alias /locationtest1/other/$1
-
-
}
-
说明:当location块接收到/data/index.html的请求时,将在/locationtest1/other/目录下找到index.html文件来响应请求。此时原uri中的/data/已经没有用处了。
-
疑问:如果与root指令一起使用呢??
-
-
生效位置:location块。
-
-
设置网站的默认首页:
-
指令:index file;
-
作用:请求地址中,可以不写首页名称。
-
示例:
-
location ~ /data/(.+)/web/$
-
{
-
index index.$1.html index.my1.html index.html
-
-
}
-
说明:当location块接收到/data/locationtest/web/的请求时,将在/data/locationtest/web/目录下依次查找index.locationtest.html index.my1.html index.html文件,首先找到哪个文件,就用哪个文件响应请求。
-
-
生效位置:location块。
-
-
设置网站的错误页面:
-
http响应:
-
通常表示:
-
2xx:请求成功。
-
3xx:网站重定向。
-
4xx:客户端端错误。
-
5xx:服务器端错误。
-
-
常见的http错误:
-
-
指令:error_page code [=response] uri
-
code: http错误代码。
-
response: 可选项,将code指定的错误代码转化为新的错误代码response,返回给客户端。
-
uri:
-
错误页面的路径。相对于Nginx安装路径下html/目录的相对目录。
-
网址。
-
-
-
生效位置:http块,server块,location块。
-
-
基于IP配置Nginx的访问权限:
-
allow指令:
-
指令:allow address | CIRD | all;
-
address: 允许访问的客户端的ip。
-
CIDR: 允许访问的客户端的CIDR地址。
-
all: 允许所有客户端访问。
-
-
-
deny指令:
-
指令:deny address | CIRD | all;
-
address: 禁止访问的客户端的ip。
-
CIDR: 禁止访问的客户端的CIDR地址。
-
all: 禁止所有客户端访问。
-
-
-
示例:
-
location /
-
{
-
deny 192.168.1.1
-
allow 192.168.1.0/24
-
deny all;
-
-
}
-
说明:
-
禁止192.168.1.1访问Nginx;
-
允许192.168.1.0网段(除192.168.1.1)访问Nginx;
-
禁止其余所有ip访问Nginx;
-
-
-
生效位置:http块,server块,location块。
-
-
基于密码配置Nginx的访问权限:
-
auth_basic指令:
-
指令:auth_basic string | off;
-
string:开启认证功能,并配置验证时的提示信息。
-
off:关闭认证功能。
-
-
-
auth_basic_user_file指令:
-
指令:auth_basic_user_file file;
-
file:密码文件中绝对路径。
-
-
功能:设置包含用户名和密码信息的文件路径。
-
file文件说明:
-
示例:name1:password1
-
密码可以为明文,也可以为密文。
-
密文可有crypt()函数加密。
-
在linux平台可以使用htpasswd命令生成。
-
示例:htpasswd -c -d /nginx/conf/pass_file username
-
说明:该命令在apache的安装目录下有。
-
-
-
-
生效位置:http块,server块,location块。
-
-