Nginx基础配置(main、events、http、server、location)
作者:fkjavaer
1.概览
nginx为我们提供了一个配置文件nginx.conf,其存放于/usr/local/nginx,我们来看看。这里是已经去除#注释部分的内容,同时加上了每个指令代表的含义。
# worker进程的数量,设置为auto,将获取CPU的核心数 worker_processes 1; events { # 设置每个工作进程同时连接的最大数量 worker_connections 1024; } # 提供配置文件上下文,设置http服务器 http { # 设置包含的mime类型 include mime.types; # 定义响应的默认mime类型 default_type application/octet-stream; # 高效文件传输模式 sendfile on; # 长连接超时时间,在此期间客户端连接将保持打开状态,如果连接一直活跃,超时时间将自动刷新。如果设置为0,即禁用长连接 keepalive_timeout 65; # 虚拟服务器配置 server { # 配置监听端口,多个server可以监听同一个端口,只要server_name + listen的组合值唯一即可。 listen 80; # 配置服务器名称,如果请求时没有匹配的服务器名称,将使用默认的服务器名称 server_name localhost; location / { # html为相对路径,相对于当前配置文件所在的目录 root html; index index.html index.htm; } # 配置错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
可以看到,nginx.conf配置文件由3部分组成:
- main块
- events块
- http块。http块中可以配置多个server块,每个server块中可以配置多个location块。
接下来我们来分别看看这三大块可以进行哪些配置。由于可配置项的数量很多,我们仅列举出常用的配置选项,具体可见官方文档:
main块+events块:https://nginx.org/en/docs/ngx_core_module.html
http块:https://nginx.org/en/docs/http/ngx_http_core_module.html
2.main块
main块也就是全局块,主要设置一些影响nginx服务器整体运行的配置指令。例如:worker进程数量,master进程pid存放位置等。
以下是main块的常用配置:
1)配置是否以守护进程方式运行nginx
作用域:main
语法:daemon on | off
默认值:daemon on;
2)配置工作进程的数量
作用域:main
语法:worker_processes number | auto
默认值:worker_processes 1;
3)配置主进程pid存放位置
作用域:main
语法:pid file
默认值:pid logs/nginx.pid;
配置示例:
# 配置以守护进程方式运行 daemon on; # 配置工作进程数量 worker_processess 2; # 配置主进程pid存放位置 pid logs/nginx.pid;
3.events块
events块主要配置Nginx服务器与客户端的网络连接相关指令。例如每个worker进程可以同时支持的最大连接数。
以下是events块的常用配置:
1)配置有新连接时工作进程的唤醒方式
这里有一个“惊群”的问题,大致意思是:在某一时刻只接收到一个新的网络连接,多个睡眠的进程会被同时唤醒,但只有一个进程可以获得连接,这就回造成一部分系统资源的浪费。在Nginx服务中,如果存在多个工作进程,就有可能出现“惊群”问题。
作用域:events
语法:accept_mutex on | off
默认值:accept_mutex off;
作用:如果启用accept_mutex,有新连接时,工作进程将依次接受。否则,所有工作进程将被通知,如果新连接的数量低,就会造成工作进程资源浪费。
2)配置是否允许同时接收多个连接
作用域:events
语法:multi_accept on | off
默认值:multi_accept off;
作用:如果禁用multi_accept,工作进程将一次接受一个新连接。否则,工作进程将一次接受所有新连接。
3)配置每个工作进程最大连接数
作用域:events
语法:worker_connections number
默认值:worker_connections 512;
作用:设置工作进程可以同时打开的最大连接数。
配置示例:
# 配置以守护进程方式运行 daemon on; # 配置工作进程数量 worker_processess 2; # 配置主进程pid存放位置 pid logs/nginx.pid; events { # 配置有新连接时,唤醒工作进程的方式 accept_mutex on; # 配置每个工作进程是否可以同时接收连接 multi_accept on; # 配置每个工作进程的最大连接数 worker_connections 1024; }
4.http块
http块是Nginx服务器配置中的重要部分,代理、缓存、第三方模块的配置都放在这个模块。http块中可以包含多个server块,server块也可以包含多个location块。
🔔Tips:很多的配置指令可以同时存在于http,server,location块中,如果同时配置,生效的原则为就近原则
以下是http块的常用配置:
1)配置mime-type
作用域:http,server,location
语法:default_type mime-type
默认值:default_type text/plain;
作用:定义响应的mime类型
在浏览器中,可以显示文本,图片等资源,浏览器为了区分这些资源,需要使用mime-type(网络资源的媒体类型)。Nginx作为web服务器,也需要识别客户端请求的资源类型。因此,Nginx定义了mime.types文件,其中定义了很多的资源类型。我们在定义default_type时,参照这个文件配置即可。
cd /usr/local/nginx cat mime.types # 输出内容,省略绝大部分 types { text/html html htm shtml; text/css css; text/xml xml; image/gif gif; image/jpeg jpeg jpg; application/json json; application/octet-stream bin exe dll; application/octet-stream deb; application/octet-stream dmg; application/octet-stream iso img; application/octet-stream msi msp msm; ...... }
2)配置错误页面
作用域:http,server,location,if in location
语法:error_page code … [=[response]] uri;
作用:定义错误对应的响应
示例:
1)指定404错误码对应的响应
error_page 404 /404.html;
2)更改404错误码为200,并指定响应
error_page 404 =200 /empty.gif;
3)指定响应代码
error_page 404 = /404.php;
3)配置每个连接的最大请求数
作用域:http,server,location
语法:keepalive_requests number
默认值:keepalive_requests 1000;
作用:设置一个连接能提供服务的最大请求数。在发出最大数量的请求后,连接将关闭。定期关闭连接有利于内存的释放。
4)配置每个连接处理请求的最长时间
作用域:http,server,location
语法:keepalive_time time
默认值:keepalive_time 1h;
作用:设置一个连接处理请求的最长时间。到达该时间后,连接将在随后的请求处理之后关闭。
5)配置连接超时时间
作用域:http,server,location
语法:keepalive_timeout timeout [header_timeout]
默认值:keepalive_timeout 75s;
作用:设置长连接的超时时间,在此期间,连接将保持打开状态。零值将禁用长连接
6)配置文件高效传输模式
作用域:http,server,location,if in location
语法:sendfile on | off
默认值:sendfile off;
作用:如果开启此选项,可以提升文件传输的速度。
7)包含其他文件
作用域:any
语法:include file
示例:include mime.types;
作用:将另一个文件包含到配置中
配置示例:
# 配置以守护进程方式运行 daemon on; # 配置工作进程数量 worker_processess 2; # 配置主进程pid存放位置 pid logs/nginx.pid; events { # 配置有新连接时,唤醒工作进程的方式 accept_mutex on; # 配置每个工作进程是否可以同时接收连接 multi_accept on; # 配置每个工作进程的最大连接数 worker_connections 1024; } http { # 配置引入资源的媒体类型文件 include mime.types; # 配置默认的响应类型 default_type text/plain; # 配置每个连接能处理的最大请求数 keepalive_requests 1000; # 配置每个连接处理请求的最长时间 keepalive_time 1h; # 配置每个连接的超时时间 keepalive_timeout 75s; # 配置开启文件高效传输模式 sendfile on; }
5.server块
server块包含在http块中,在server块里,我们可以配置虚拟主机,虚拟主机技术将一台服务器划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。这和可以http块中定义多个server块契合。
以下是server块的常用配置:
1)配置网络监听端口
listen指令的配置相对复杂,我们这里只看最简单且常用的一种方式:listen port。
🔔在nginx中有个概念:default_serer,如果没有显式指定,则配置文件中定义的第一个server为默认server
作用域:server
语法:listen 8080
作用:监听指定端口上的所有的连接
2)配置虚拟主机的名称
作用域:server
语法:server_name name …
默认值:server_name “”
作用:设置虚拟主机的名称
server_name的语法看上去比较简单,支持同时配置多个名称,第一个为主名称。
Nginx为我们提供了多种配置形式:使用具体名称、使用通配符以及使用正则表达式。
1)使用具体名称
server_name myserver.com www.server.com;
2)使用通配符
可以使用*替换名称的开头部分和结尾部分。
server_name *.myserver.com www.myserver.*;
3)使用正则表达式
使用正则表达式,在Nginx中使用正则表达式需要以~开头。
server_name ~^www\.\d+\.com$;
该正则表达式的含义是:以www开头,紧跟.(.在正则表达式中有特殊含义,因此需要使用\转义)再紧跟一个或多个0-9的数字(\d代表0-9的任意一个数字,+代表其前面的字符出现一次或多次),再紧跟.com
示例:www.4399.com
既然可以通过多种形式来配置server_name,因此在包含多个虚拟主机的配置中,可能会出现一个请求被多个虚拟主机的server_name匹配成功,Nginx做了规定,按照以下优先级匹配虚拟主机:
1)完全匹配server_name成功
2)通配符在开头部分时匹配server_name成功
3)通配符在结尾部分时匹配server_name成功
4)第一个正则表达式匹配server_name成功
🔔Tips:如果server_name被处于同一优先级的匹配方式多次匹配成功,则首次匹配成功的虚拟主机处理请求。
6.location块
location块包含在server块中,每个server块可以设置多个location块。location块的作用在于,对请求中的URI进行匹配并进行处理。
1)配置location块
作用域:server,location
语法:location [ = | ~ | ~* | ^~ ] uri { … }
location @name { … }
作用:对请求的URI进行匹配
同样的location的配置也存在多种方式:
Nginx定义了匹配规则:
1)先使用不含正则表达式的location进行匹配,找到匹配度最高的一个
2)再通过包含正则表达式的配置进行匹配,如果能匹配到则停止向下匹配并立即处理请求,否则使用第一步的匹配度最高的location来处理请求。
1)精准匹配,如果匹配成功,则停止向下匹配并立即处理请求
# 精准匹配 location = /test { ... }
2)匹配以/test开头
# 匹配以/test开头的URI location /test { ... }
3)匹配以/test开头,如果匹配成功,则停止向下匹配并立即处理请求
# 匹配以/test开头的URI,如果匹配成功,则停止向下匹配并立即处理请求 location ^~ /test { ... }
4)正则匹配,区分大小写
# 匹配以/test开头的URI,区分大小写 location ~ /test { ... }
5)正则匹配,不区分大小写
# 匹配以/test开头的URI,不区分大小写 location ~* /test { ... }
2)配置请求的根目录
作用域:http, server, location, if in location
语法:root path
默认值:root html
作用:配置请求的根目录
可以看到默认配置为root html,这里的html是一个相对路径,相对于当前配置文件所在的目录
配置示例:
# 配置以守护进程方式运行 daemon on; # 配置工作进程数量 worker_processess 2; # 配置主进程pid存放位置 pid logs/nginx.pid; events { # 配置有新连接时,唤醒工作进程的方式 accept_mutex on; # 配置每个工作进程是否可以同时接收连接 multi_accept on; # 配置每个工作进程的最大连接数 worker_connections 1024; } http { # 配置引入资源的媒体类型文件 include mime.types; # 配置默认的响应类型 default_type text/plain; # 配置每个连接能处理的最大请求数 keepalive_requests 1000; # 配置每个连接处理请求的最长时间 keepalive_time 1h; # 配置每个连接的超时时间 keepalive_timeout 75s; # 配置开启文件高效传输模式 sendfile on; server { # 配置监听端口 listen 8080; # 配置location location / { root html; index index.html; } location /test { return 200 'test success'; } } }
到此这篇关于Nginx基础配置(main、events、http、server、location)的文章就介绍到这了,更多相关Nginx基础配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!