We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
前面说过Nginx的主要配置文件为conf/nginx.conf
Nginx
conf/nginx.conf
默认配置如下:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
上述配置意思后面再详细解读。
首先我们分析Nginx的配置文件的结构:
Nginx配置文件的通用结构为
xxx{ // ... //全局配置 xxx{ //xxx子模块配置 } }
其中,全局配置能够影响子模块配置
由此,我们可以从大模块->包含模块的顺序开始分析。
首先是最外层的配置,Nginx最外层分别又:
全局块: 全局块配置在所有的大括号外,主要用于设置Nginx整体的一些运行配置命令
events块: events块主要涉及的到Nginx服务器与用户的网络连接,比如是否允许同时开启多个网络连接,每个worker process可以支持多少个连接数等等
events
worker process
这一块主要影响Nginx服务器的性能
http块: http块主要配置http请求的各种配置,比如代理,缓存,日志等
http
这三个块是Nginx配置的主要模块。而每个块中又可以包含子模块。这里主要介绍http块的子模块:
server块: server块的配置主要和"虚拟主机"的配置有关。一个server块,对应一个"虚拟主机"
server
对于每个虚拟主机,也可以包含自己单独的配置,下面介绍其子模块
location块: location块的主要作用Nginx接收到请求后,对虚拟主机的请求再一次细分,有点类似ServletMapping的作用。。
location
ServletMapping
配置到location块之后,基本就没有其他的什么配置了。
整体来说,Nginx的主要配置的块划分如下所示:
xxx xxx http{ server{ location{ } } }
需要注意的是,Nginx每条配置都需要以;结尾
配置Nginx服务器用户组,只有被设置的用户(用户组)成员才可以启动Nginx
user [user] [group]
user nobody nobody; //默认为nobody
配置允许生成的worker process数量
worker_processes [number] | [auto]
默认唯一
配置PID文件路径
PID
pid [filePath]
注意,filePath同时需要包含文件名
filePath
配置错误日志路径以及级别
error_log [filePath] | [stderr| info | notice | warn | error | crit | alert | emerg]
此命令可以在http ,server ,location块中单独配置
引入其他配置文件
include [filePath]
此配置可以放在任意块中
设置网络连接序列化,避免”惊群“效应,使得每个work prcess按顺序接收请求
work prcess
accept_mutex [on | off]
默认为on
on
设置是否允许worker prcess同时接收多个网络连接
worker prcess
multi_accept [on | off]
默认为off
off
设置事件驱动模型
use [method]
method可以选择为:select | poll | kqueue | epoll | rtsig | /dev/poll | eventport
method
select | poll | kqueue | epoll | rtsig | /dev/poll | eventport
配置最大连接数
worker_connections [number]
默认为512
512
注意最大连接数包括了所有可能的连接数,不仅仅是前端用户连接的数量
以下命令可以选择在http, server, location中进行配置,主要都是http的一些参数
http, server, location
配置MIME-Type
MIME-Type
一般默认情况下,Nginx默认定义了一个IME-Type文件,里面配置了默认的IME类型,我们只用将其包含进来即可:
IME-Type
IME
include mime.types
此文件中定义了一个默认文件对应的MIME-Type,比如html文件对应text/html等
html
text/html
此外,还可以定义一个默认类型:
default_type mime-type
表示当一个都没有在types文件中匹配到的时候,则使用此MIME类型
types
MIME
定义服务器日志
access_log [filePath] [format]
access_log记录的是前端访问Nginx的日志。filePath为日志保存的路径,需要精确到名称。format为日志格式,一般使用默认的即可。
access_log
format
此配置可以定义http块,server块,或者location块中
可以使用access_log off;指令关闭访问日志
access_log off;
配置sendfile
sendfile
sendfile on | off
sendfile_max_chunk [size]
sendfile()有点类似0拷贝的文件传输,默认为off
sendfile()
sendfile_max_chunk用于设置每个worker process每次调用sendfile()传输的数据最大的值,0表示无限制
sendfile_max_chunk
0
超时时间
keepalive_timeout [time] [header_timeout]
keepalive_timeout表前端用户连接后,保持连接的时间
keepalive_timeout
time :时间,默认为75s
time
75s
header_timeout : 可选项,在应答报文头部的Keep—Alive域设置超时间:keep-Alive:timeout=[timeout]
header_timeout
Keep—Alive
keep-Alive:timeout=[timeout]
示例:keepalive_timeout 120s 100s;
keepalive_timeout 120s 100s;
配置单链接请求数上限
keepalive_requests [numbers]
表示用户成功建立会话之后,用户通过此连接发送请求的数量限制,默认为100,
此配置还可以配置到location中
配置网络监听
网络监听配置有3中方式
IP
listen [address] [:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sendbuf=size] [deffered] [bind] [ssl]
listen [port] [default_server] [setfib=number] [rcvbuf=size] [sendbuf=size] [accept_filter=filter] [deffered] [bind] [ipv6only=on | off ] [ssl]
下面对上面的参数进行一一解释:
address
ip
IPv6
[]
port
path
socket
default_server
address:port
ssl
SSL
backlog=num
listen()
num
一般情况下,其他的标识符不怎么常用。下面列举一些listen的常用方法:
listen
listen *:80 | *:8000; #监听所有80端口和8000端口 listen 192.168.1.10:8000; #监听指定ip和端口 listen 192.16.1.10; #监听指定ip下80端口的链接 listen 8000; #监听8000端口下的所有连接 listen 192.168.0.1 default_server #监听80端口,并设置为默认虚拟主机处理
配置虚拟主机名
server_name [name];
name可以定义多个,以空格隔开,可以使用通配符,但是通配符只能在名称的首段或者尾段。
name
如: server_name *.myserver.com www.myserver.*;
server_name *.myserver.com www.myserver.*
同时,name还可以使用正则表达式,需要以~开头,表明需要使用正则表达式解析
~
如:server_name ~^www\d+\.myserver\.com$;
server_name ~^www\d+\.myserver\.com$;
同时在使用正则表达式的时候,支持使用$1 $2获取捕获变量
$1 $2
且,对于server_name匹配顺序如下:
server_name
其次,再按照先后顺序进行匹配。
server_name:也可以通过虚拟IP进行区分,这里不详细描述
配置location块
location [ = | ~ | ~* | ^~ ] uri
简单介绍下每个前缀的意思:
例如:location /user/~[\d*]test
location /user/~[\d*]test
其中,/user/这部分为不包含 正则表达的uri,后面的匹配字符为包含正则的uri
/user/
uri
Nginx会首先找到所有符合不包含正则表达式uri:/user/,然后再通过正则进行匹配~[\d*]。
~[\d*]
=
~*
^~
详见: 一文弄懂Nginx的location匹配
配置请求的根目录
root [path]
值得注意的是,root是会拼接上url中的path的,例如
root
url
location /data/ { root /location; }
则当请求是/data/index.html的时候,会在/location/data/目录下查找index.html
/data/index.html
/location/data/
index.html
配置修改location中的uri
alias [path]
alias功能和root差不多,不过root是拼接url,但是alias是替换掉路径。
alias
比如:
location /data/ { alias /location/test/; }
则当请求是/data/index.html的时候,Nginx会到/location/test/目录下查找index.html文件,注意alias应该以/结尾,而root则没有关系。
/location/test/
/
设置默认页面
index [filePath]
设置错误页面
error_page code [=[response] uri
code
response
error_page 404 /404.html
error_page 410 =301 /empty.gif //将错误码修改为301
error_page 410 =301 /empty.gif
设置用户白名单
allow [address] | [CIDR] | all;
address : 用户的ip地址
CIDR :客户端的CIDR地址
CIDR
all : 表示允许所有用户访问
all
设置黑名单
deny [addiress] | [CIDR] | all;
all : 表示禁止所有用户访问
当白名单和黑名单同时匹配的时候,Nginx会在检索到第一个匹配的名单后,立即停止检索。
也就是以先配置的为准。
配置Nginx访问密码()
auth_basic [string | off ]
string : 开启认证功能,配置验证时的提示信息
string
off : 关闭认证功能
auth_basic_user_file [filePath]
filePath : 指定密码,比如:
name1:password1 name2:password2
到这里Nginx
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Nginx的配置
前面说过
Nginx
的主要配置文件为conf/nginx.conf
默认配置如下:
上述配置意思后面再详细解读。
首先我们分析
Nginx
的配置文件的结构:Nginx
配置文件的通用结构为由此,我们可以从大模块->包含模块的顺序开始分析。
首先是最外层的配置,
Nginx
最外层分别又:全局块: 全局块配置在所有的大括号外,主要用于设置
Nginx
整体的一些运行配置命令events
块:events
块主要涉及的到Nginx
服务器与用户的网络连接,比如是否允许同时开启多个网络连接,每个worker process
可以支持多少个连接数等等这一块主要影响
Nginx
服务器的性能http
块:http
块主要配置http
请求的各种配置,比如代理,缓存,日志等server块:
server
块的配置主要和"虚拟主机"的配置有关。一个server
块,对应一个"虚拟主机"location块:
location
块的主要作用Nginx
接收到请求后,对虚拟主机的请求再一次细分,有点类似ServletMapping
的作用。。整体来说,
Nginx
的主要配置的块划分如下所示:详细配置
需要注意的是,
Nginx
每条配置都需要以;结尾全局配置
配置
Nginx
服务器用户组,只有被设置的用户(用户组)成员才可以启动Nginx
user [user] [group]
配置允许生成的
worker process
数量worker_processes [number] | [auto]
默认唯一
配置
PID
文件路径pid [filePath]
注意,
filePath
同时需要包含文件名配置错误日志路径以及级别
error_log [filePath] | [stderr| info | notice | warn | error | crit | alert | emerg]
引入其他配置文件
include [filePath]
events
设置网络连接序列化,避免”惊群“效应,使得每个
work prcess
按顺序接收请求accept_mutex [on | off]
默认为
on
设置是否允许
worker prcess
同时接收多个网络连接multi_accept [on | off]
默认为
off
设置事件驱动模型
use [method]
method
可以选择为:select | poll | kqueue | epoll | rtsig | /dev/poll | eventport
配置最大连接数
worker_connections [number]
默认为
512
注意最大连接数包括了所有可能的连接数,不仅仅是前端用户连接的数量
http , server ,location
以下命令可以选择在
http, server, location
中进行配置,主要都是http
的一些参数配置
MIME-Type
一般默认情况下,
Nginx
默认定义了一个IME-Type
文件,里面配置了默认的IME
类型,我们只用将其包含进来即可:include mime.types
此文件中定义了一个默认文件对应的
MIME-Type
,比如html
文件对应text/html
等此外,还可以定义一个默认类型:
default_type mime-type
表示当一个都没有在
types
文件中匹配到的时候,则使用此MIME
类型定义服务器日志
access_log [filePath] [format]
access_log
记录的是前端访问Nginx
的日志。filePath
为日志保存的路径,需要精确到名称。format
为日志格式,一般使用默认的即可。此配置可以定义
http
块,server
块,或者location
块中可以使用
access_log off;
指令关闭访问日志配置
sendfile
sendfile on | off
sendfile_max_chunk [size]
sendfile()
有点类似0拷贝的文件传输,默认为off
sendfile_max_chunk
用于设置每个worker process
每次调用sendfile()
传输的数据最大的值,0
表示无限制超时时间
keepalive_timeout [time] [header_timeout]
keepalive_timeout
表前端用户连接后,保持连接的时间time
:时间,默认为75s
header_timeout
: 可选项,在应答报文头部的Keep—Alive
域设置超时间:keep-Alive:timeout=[timeout]
示例:
keepalive_timeout 120s 100s;
server
配置单链接请求数上限
keepalive_requests [numbers]
表示用户成功建立会话之后,用户通过此连接发送请求的数量限制,默认为100,
此配置还可以配置到
location
中配置网络监听
网络监听配置有3中方式
IP
地址:listen [address] [:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sendbuf=size] [deffered] [bind] [ssl]
listen [port] [default_server] [setfib=number] [rcvbuf=size] [sendbuf=size] [accept_filter=filter] [deffered] [bind] [ipv6only=on | off ] [ssl]
下面对上面的参数进行一一解释:
address
:ip
地址,如果是IPv6
地址,则需要使用[]
括起来。port
: 端口号,如果只定义了IP
地址,没有定义端口号,则使用80端口path
:socket
文件路径default_server
: 标识符,将此虚拟主机设置为address:port
的默认主机ssl
: 设置连接使用SSL
模式进行backlog=num
: 设置监听函数listen()
最多允许num
个网络连接处于挂起状态一般情况下,其他的标识符不怎么常用。下面列举一些
listen
的常用方法:配置虚拟主机名
server_name [name];
name
可以定义多个,以空格隔开,可以使用通配符,但是通配符只能在名称的首段或者尾段。如:
server_name *.myserver.com www.myserver.*
;同时,
name
还可以使用正则表达式,需要以~
开头,表明需要使用正则表达式解析如:
server_name ~^www\d+\.myserver\.com$;
同时在使用正则表达式的时候,支持使用
$1 $2
获取捕获变量且,对于
server_name
匹配顺序如下:server_name
server_name
成功server_name
成功server_name
成功其次,再按照先后顺序进行匹配。
配置
location
块location [ = | ~ | ~* | ^~ ] uri
简单介绍下每个前缀的意思:
例如:
location /user/~[\d*]test
其中,
/user/
这部分为不包含 正则表达的uri
,后面的匹配字符为包含正则的uri
Nginx
会首先找到所有符合不包含正则表达式uri
:/user/
,然后再通过正则进行匹配~[\d*]
。=
:用于标准uri
前。要求请求字符串与uri
严格匹配,如果匹配成功,则停止继续向下搜索~
: 用来表示uri
包含正则表达式,并且区分大小写~*
: 用于表示uri
包含正则表达式,并且不区分大小写^~
: 当uri
查找标准uri
的时候,成功匹配到该uri
时,直接使用该location
处理请求 详见: 一文弄懂Nginx的location匹配
配置请求的根目录
root [path]
值得注意的是,
root
是会拼接上url
中的path
的,例如则当请求是
/data/index.html
的时候,会在/location/data/
目录下查找index.html
配置修改
location
中的uri
alias [path]
alias
功能和root
差不多,不过root
是拼接url
,但是alias
是替换掉路径。比如:
则当请求是
/data/index.html
的时候,Nginx
会到/location/test/
目录下查找index.html
文件,注意alias
应该以/
结尾,而root
则没有关系。设置默认页面
index [filePath]
设置错误页面
error_page code [=[response] uri
code
错误码response
: 替换的错误代码uri
: 返回的错误页面比如:
error_page 404 /404.html
error_page 410 =301 /empty.gif
//将错误码修改为301设置用户白名单
allow [address] | [CIDR] | all;
address
: 用户的ip
地址CIDR
:客户端的CIDR
地址all
: 表示允许所有用户访问设置黑名单
deny [addiress] | [CIDR] | all;
address
: 用户的ip
地址CIDR
:客户端的CIDR
地址all
: 表示禁止所有用户访问当白名单和黑名单同时匹配的时候,
Nginx
会在检索到第一个匹配的名单后,立即停止检索。也就是以先配置的为准。
配置
Nginx
访问密码()auth_basic [string | off ]
string
: 开启认证功能,配置验证时的提示信息off
: 关闭认证功能auth_basic_user_file [filePath]
filePath
: 指定密码,比如:到这里
Nginx
The text was updated successfully, but these errors were encountered: