您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

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

时间:2023-05-07 17:12:16  来源:  作者:fkjavaer

 

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



Tags:Nginx   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
为什么Nginx被称为“反向”代理呢?
Nginx(发音为"engine-x")是一款高性能、轻量级的开源Web服务器软件,也可用作反向代理服务器、负载均衡器和HTTP缓存。Nginx之所以有被称为“反向”代理,是因为它充当客户端设备...【详细内容】
2024-02-01  Search: Nginx  点击:(59)  评论:(0)  加入收藏
如何在Java环境中安装Nginx?
1. 下载Nginx:首先,前往Nginx官方网站(https://nginx.org/en/download.html)下载新版本的Nginx。选择适合您操作系统的版本,通常有Windows、Linux和Mac等不同操作系统的版本可供...【详细内容】
2024-01-22  Search: Nginx  点击:(59)  评论:(0)  加入收藏
一文教你学会使用Nginx
前段时间,了不起给大家说过如果使用 Docker 发布自己的后端项目,也就不再使用 Jar 包进行项目的发版操作,但是这其中就又涉及到了前端如何发版,为什么这么说,因为资深前端开发,可...【详细内容】
2023-12-27  Search: Nginx  点击:(87)  评论:(0)  加入收藏
Nginx 反向代理为什么叫做“反向”?
今天我们来聊聊正向代理和反向代理。01 正向代理(Forward Proxy)正向代理是位于用户设备和互联网之间的服务器。它代理的是客户端,是站在用户一方的。其真实客户端对于服务器不...【详细内容】
2023-12-06  Search: Nginx  点击:(90)  评论:(0)  加入收藏
Nginx的负载均衡实现,你学会了吗?
环境 主机 ip 用途 软件 web1 192.168.50.60 nginx-1 httpd web2 192.168.50.61 nginx-2 httpd proxy 192.168.50.62 负载...【详细内容】
2023-12-06  Search: Nginx  点击:(145)  评论:(0)  加入收藏
Nginx如何开启GZIP文件压缩,你学会了吗?
简介GZip 是一种改进web应用程序性能的技术,文件压缩后再传输可以减少传输数据,提升传输速度。在Nginx服务器上开启Gzip压缩可以有效减少网络传输流量,提升网站的访问速度和性...【详细内容】
2023-11-30  Search: Nginx  点击:(122)  评论:(0)  加入收藏
Nginx配置文件中的关键字是什么?
Nginx 是一款高性能的 Web 服务器软件,同时也是一款反向代理服务器软件。Nginx 的配置文件通常是 /etc/nginx/nginx.conf,以下是一个典型的配置文件,并对其中的关键字进行详细...【详细内容】
2023-11-22  Search: Nginx  点击:(147)  评论:(0)  加入收藏
Nginx 大揭秘:读写分离助力您轻松征服高并发
引言在构建高性能、高可用的 Web 应用时,如何有效地处理数据库的读写负担已成为一个十分重要的考虑因素。Nginx 作为一款强大的反向代理服务器,提供了简单而灵活的负载均衡配...【详细内容】
2023-11-14  Search: Nginx  点击:(51)  评论:(0)  加入收藏
Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?
k8s发布应用的两种方式: kubernetes-dashboard kubectl命令行一、Dashboard方式配置部署:包含应用名称、容器镒、pod数量、Service非常的方便,不想设置配置yaml的可以很方便的...【详细内容】
2023-11-06  Search: Nginx  点击:(368)  评论:(0)  加入收藏
掌握Nginx的高级用法,构建高性能Web应用
Nginx是一款高性能的Web服务器和反向代理服务器,它广泛用于构建高性能、可靠和安全的Web应用程序。除了基本的用法外,Nginx还提供了一些高级功能和配置选项,可以进一步优化性能...【详细内容】
2023-10-26  Search: Nginx  点击:(218)  评论:(0)  加入收藏
▌简易百科推荐
为什么Nginx被称为“反向”代理呢?
Nginx(发音为"engine-x")是一款高性能、轻量级的开源Web服务器软件,也可用作反向代理服务器、负载均衡器和HTTP缓存。Nginx之所以有被称为“反向”代理,是因为它充当客户端设备...【详细内容】
2024-02-01  coderidea  微信公众号  Tags:Nginx   点击:(59)  评论:(0)  加入收藏
哪种服务器操作系统更好呢?
在当今的IT世界中,服务器操作系统扮演着至关重要的角色。它们是确保服务器能够高效、安全地运行的关键因素。然而,对于许多人来说,服务器操作系统的种类和特点可能是一个复杂的...【详细内容】
2024-01-30    简易百科  Tags:操作系统   点击:(76)  评论:(0)  加入收藏
什么是VPS服务器
VPS服务器是一种虚拟化技术,它将一台物理服务器划分为多个虚拟的独立服务器,每个虚拟服务器都可以拥有自己的操作系统、运行环境、应用程序等。这种技术使得每个虚拟服务器可...【详细内容】
2024-01-30    简易百科  Tags:VPS服务器   点击:(67)  评论:(0)  加入收藏
VPS服务器下载速度慢?这五招帮你提速
VPS服务器下载速度慢可能会让用户感到沮丧,尤其是对于需要大量下载和上传数据的用户。幸运的是,有一些方法可以帮助您提高VPS服务器的下载速度,使您的在线体验更加顺畅。在本文...【详细内容】
2024-01-30  IDC行业观察者    Tags:VPS服务器   点击:(57)  评论:(0)  加入收藏
美国VPS和英国VPS:地理位置对服务器性能的影响
在今天的数字时代,VPS已成为在线业务和网站托管的关键组成部分。然而,选择合适的VPS主机服务时,地理位置通常被忽视,尽管它对服务器性能有着重要的影响。本文将探讨美国VPS和英...【详细内容】
2024-01-26  IDC行业观察者    Tags:服务器   点击:(52)  评论:(0)  加入收藏
如何判断服务器所需带宽:基于业务需求和流量模式的关键考量
在选择服务器时,带宽是一个重要的考虑因素。带宽的大小直接影响到网站的加载速度和用户的访问体验。那么,如何判断服务器需要多大的带宽呢?本文将为你揭示这一关键问题的答案...【详细内容】
2024-01-26  源库科技    Tags:服务器   点击:(74)  评论:(0)  加入收藏
服务器内存空间及IO操作原理解析
服务器的内存空间分为内核空间和用户空间,而我们编写的程序通常在用户空间中运行。在进行读写操作时,我们直接操作的是用户缓冲区,而用户缓冲区的内容来自于内核缓冲区。这种内...【详细内容】
2024-01-23  王建立    Tags:服务器   点击:(42)  评论:(0)  加入收藏
如何在Java环境中安装Nginx?
1. 下载Nginx:首先,前往Nginx官方网站(https://nginx.org/en/download.html)下载新版本的Nginx。选择适合您操作系统的版本,通常有Windows、Linux和Mac等不同操作系统的版本可供...【详细内容】
2024-01-22  敲代码的小动    Tags:Nginx   点击:(59)  评论:(0)  加入收藏
服务器证书和SSL证书有啥区别?
在互联网经济时代,随着越来越多的信息以及合作都是从企业官网开始的,因此绝大多数企业都会为自己的网站配置SSL证书,以提高安全性。在接触SSL证书时,也有很多人称之为服务器证书...【详细内容】
2024-01-10  安信SSL证书    Tags:服务器证书   点击:(65)  评论:(0)  加入收藏
宝塔面板怎样部署java项目?
宝塔面板怎样部署java项目?在使用宝塔面板部署Java项目之前,需要确保已经安装了Java Development Kit (JDK)。接下来,将介绍如何使用宝塔面板来部署Java项目的步骤。步骤一:安装...【详细内容】
2024-01-09  西部数码    Tags:宝塔面板   点击:(105)  评论:(0)  加入收藏
站内最新
站内热门
站内头条