2025年4月15日 星期二 乙巳(蛇)年 正月十六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 服务器 > Nginx

Nginx基础配置详解(main、events、http、server、location)

时间:11-10来源:作者:点击数:20

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配置文件的基本配置,Nginx是多模块化的,还有很多高级功能,我们后面继续探索。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐