前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >服务器配置[通俗易懂]

服务器配置[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-20 03:02:39
发布于 2022-09-20 03:02:39
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

Nginx配置文件的整体结构

从图中可以看出主要包含以下几大部分内容:

1. 全局块

该部分配置主要影响Nginx全局,通常包括下面几个部分:

  • 配置运行Nginx服务器用户(组)
  • worker process数
  • Nginx进程PID存放路径
  • 错误日志的存放路径
  • 配置文件的引入
2. events块

该部分配置主要影响Nginx服务器与用户的网络连接,主要包括:

  • 设置网络连接的序列化
  • 是否允许同时接收多个网络连接
  • 事件驱动模型的选择
  • 最大连接数的配置
3. http块
  • 定义MIMI-Type
  • 自定义服务日志
  • 允许sendfile方式传输文件
  • 连接超时时间
  • 单连接请求数上限
4. server块
  • 配置网络监听
  • 基于名称的虚拟主机配置
  • 基于IP的虚拟主机配置
5. location块
  • location配置
  • 请求根目录配置
  • 更改location的URI
  • 网站默认首页配置

一份配置清单例析

笔者按照文章:《Nginx服务器开箱体验》 中的实验,给出了一份简要的清单配置举例:

配置代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user nobody nobody; worker_processes 3; error_log logs/error.log; pid logs/nginx.pid; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; server { listen 8088; server_name codesheep; access_log /codesheep/webserver/server1/log/access.log; error_page 404 /404.html; location /server1/location1 { root /codesheep/webserver; index index.server2-location1.htm; } location /server1/location2 { root /codesheep/webserver; index index.server2-location2.htm; } } server { listen 8089; server_name 192.168.31.177; access_log /codesheep/webserver/server2/log/access.log; error_page 404 /404.html; location /server2/location1 { root /codesheep/webserver; index index.server2-location1.htm; } location /srv2/loc2 { alias /codesheep/webserver/server2/location2/; index index.server2-location2.htm; } location = /404.html { root /codesheep/webserver/; index 404.html; } } } 

接下来就来详细剖析以下配置文件中各个指令的含义⬇️


配置运行Nginx服务器用户(组)

指令格式:user user [group];

  • user:指定可以运行Nginx服务器的用户
  • group:可选项,可以运行Nginx服务器的用户组

如果user指令不配置或者配置为 user nobody nobody ,则默认所有用户都可以启动Nginx进程


worker process数配置

Nginx服务器实现并发处理服务的关键,指令格式:worker_processes number | auto;

  • number:Nginx进程最多可以产生的worker process数
  • auto:Nginx进程将自动检测

按照上文中的配置清单的实验,我们给worker_processes配置的数目是:3,启动Nginx服务器后,我们可以后台看一下主机上的Nginx进程情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ps -aux | grep nginx 

很明显,理解 worker_processes 这个指令的含义就很容易了


Nginx进程PID存放路径

Nginx进程是作为系统守护进程在运行,需要在某文件中保存当前运行程序的主进程号,Nginx支持该保存文件路径的自定义

指令格式:pid file;

  • file:指定存放路径和文件名称
  • 如果不指定默认置于路径 logs/nginx.pid

错误日志的存放路径

指定格式:error_log file | stderr;

  • file:日志输出到某个文件file
  • stderr:日志输出到标准错误输出

配置文件的引入

指令格式:include file;

  • 该指令主要用于将其他的Nginx配置或者第三方模块的配置引用到当前的主配置文件中

设置网络连接的序列化

指令格式:accept_mutex on | off;

  • 该指令默认为on状态,表示会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢。

说到该指令,首先得阐述一下什么是所谓的 “惊群问题”,可以参考 WIKI百科的解释。就Nginx的场景来解释的话大致的意思就是:当一个新网络连接来到时,多个worker进程会被同时唤醒,但仅仅只有一个进程可以真正获得连接并处理之。如果每次唤醒的进程数目过多的话,其实是会影响一部分性能的。

所以在这里,如果accept_mutex on,那么多个worker将是以串行方式来处理,其中有一个worker会被唤醒;反之若accept_mutex off,那么所有的worker都会被唤醒,不过只有一个worker能获取新连接,其它的worker会重新进入休眠状态

这个值的开关与否其实是要和具体场景挂钩的。


是否允许同时接收多个网络连接

指令格式:multi_accept on | off;

  • 该指令默认为off状态,意指每个worker process 一次只能接收一个新到达的网络连接。若想让每个Nginx的worker process都有能力同时接收多个网络连接,则需要开启此配置

事件驱动模型的选择

指令格式:use model;

  • model模型可选择项包括:select、poll、kqueue、epoll、rtsig等……

最大连接数的配置

指令格式:worker_connections number;

  • number默认值为512,表示允许每一个worker process可以同时开启的最大连接数

定义MIME-Type

指令格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
include mime.types; default_type mime-type; 
  • MIME-Type指的是网络资源的媒体类型,也即前端请求的资源类型
  • include指令将mime.types文件包含进来

cat mime.types 来查看mime.types文件内容,我们发现其就是一个types结构,里面包含了各种浏览器能够识别的MIME类型以及对应类型的文件后缀名字,如下所示:


自定义服务日志

指令格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
access_log path [format]; 
  • path:自定义服务日志的路径 + 名称
  • format:可选项,自定义服务日志的字符串格式。其也可以使用 log_format 定义的格式

允许sendfile方式传输文件

指令格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sendfile on | off; sendfile_max_chunk size; 
  • 前者用于开启或关闭使用sendfile()传输文件,默认off
  • 后者指令若size>0,则Nginx进程的每个worker process每次调用sendfile()传输的数据了最大不能超出此值;若size=0则表示不限制。默认值为0

连接超时时间配置

指令格式:keepalive_timeout timeout [header_timeout];

  • timeout 表示server端对连接的保持时间,默认75秒
  • header_timeout 为可选项,表示在应答报文头部的 Keep-Alive 域设置超时时间:“Keep-Alive : timeout = header_timeout”

单连接请求数上限

指令格式:keepalive_requests number;

  • 该指令用于限制用户通过某一个连接向Nginx服务器发起请求的次数

配置网络监听

指令格式:

  • 第一种:配置监听的IP地址:listen IP[:PORT];
  • 第二种:配置监听的端口:listen PORT;

实际举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
listen 192.168.31.177:8080; # 监听具体IP和具体端口上的连接 listen 192.168.31.177; # 监听IP上所有端口上的连接 listen 8080; # 监听具体端口上的所有IP的连接 

基于名称和IP的虚拟主机配置

指令格式:server_name name1 name2 ...

  • name可以有多个并列名称,而且此处的name支持正则表达式书写

实际举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server_name ~^www\d+\.myserver\.com$

此时表示该虚拟主机可以接收类似域名 www1.myserver.com 等的请求而拒绝 www.myserver.com 的域名请求,所以说用正则表达式可以实现更精准的控制

至于基于IP的虚拟主机配置比较简单,不再太赘述:

指令格式:server_name IP地址


location配置

指令格式为:location [ = | ~ | ~* | ^~ ] uri {...}

  • 这里的uri分为标准uri和正则uri,两者的唯一区别是uri中是否包含正则表达式

uri前面的方括号中的内容是可选项,解释如下:

  • “=”:用于标准uri前,要求请求字符串与uri严格匹配,一旦匹配成功则停止
  • “~”:用于正则uri前,并且区分大小写
  • “~*”:用于正则uri前,但不区分大小写
  • “^~”:用于标准uri前,要求Nginx找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配

请求根目录配置

指令格式:root path;

  • path:Nginx接收到请求以后查找资源的根目录路径

当然,还可以通过alias指令来更改location接收到的URI请求路径,指令为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alias path; # path为修改后的根路径 

设置网站的默认首页

指令格式:index file ......

  • file可以包含多个用空格隔开的文件名,首先找到哪个页面,就使用哪个页面响应请求

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167722.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx 服务器配置文件指令
 localtion 配置         语法结构: location [ =  ~  ~* ^~ ] uri{ ... }         uri 变量是带匹配的请求字符, 可以是不含正则表达的字符串, 也可以是包含正则的字符串         其中[ ] 中的是可选项 uri 的是必选项: 用来改变请求字符串与uri的匹配方式         =  用于标准uri 前面 , 要求请求字符串与uri严格匹配,如果已经匹配成功,就停止匹配立即处理这个请求         ~  表示uri包含正则表达式 并且区分大小写         ~*  用于表示uri包含正则表达式 不区分大小写         ^~  要求找到表示uri和请求字符串匹配度最高的location, 然后处理这个要求   网站错误页面         1xx:指示信息--表示请求已接收,继续处理         2xx:成功--表示请求已被成功接收、理解、接受         3xx:重定向--要完成请求必须进行更进一步的操作         4xx:客户端错误--请求有语法错误或请求无法实现         5xx:服务器端错误--服务器未能实现合法的请求         http消息    代码    含义         以移动      301    请求的数据具有新的位置,而且更改是永久的         重定向      302    请求数据临时位置更改         无法找到网页 400  可以连接到服务器,但是由于地址问题,无法找到网页         网站拒绝显示  404  可以连接到网站但是找不到网页         无法显示该页面 405  可以连接网站,页面内容无法下载,网页编写方式问题         网站无法显示该页面 500 服务器问题         未执行          501 没有讲正在访问的网站设置显示为浏览器所请求的网站         不支持版本      505  请求的协议版本信息       常见:         200 OK      //客户端请求成功         400 Bad Request  //客户端请求有语法错误,不能被服务器所理解         401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用         403 Forbidden  //服务器收到请求,但是拒绝提供服务         404 Not Found  //请求资源不存在,eg:输入了错误的URL         500 Internal Server Error //服务器发生不可预期的错误         503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常         eg:HTTP/1.1 200 OK (CRLF)        常见的配置文件说明         1, error_log file | stderr [debug | info | notice | warn | error | crit | alert | emerg ]                     debug  --- 调试级别      输出日志信息最全              info  --- 普通级别      输出提示信息              notice --- 注意级别      输出注意信息               warn  --- 警告级别      输出一些无关紧要的错误信息             error  --- 错误级别      有影响服务正常运行的错误               crit  --- 严重错误级别  严重错误级别               alert  --- 十分严重级别  十分严重             emerg  ---  超级严重      超级严重         nginx服务器的日志文件输出到某一文件或者输出到标准输出错误输出到stder:         后面则是跟的日志级别可选项, 由低到高分为debug .... emerg 设置级别后联通高级别也会别记录         2, user user group         配置启动程序的用户 用户 组 希望所有能启动则不写         3, worker_processes number | auto         number 指定nginx进程做多产生woker peocess数         auto nginx 自动检测进程数         4, pi
星哥玩云
2022/07/26
4.8K0
Nginx服务器基础配置
Nginx服务器以其功能丰富著称。它既能作为HTTP服务器,也可作为反向代理服务器或者邮件服务器;能够快速响应静态页面(HTML)的请求;支持FastCGI、SSL、Virtual Host、URL、Rewrite、HTTP Base Auth、Gzip等大量使用功能;并且支持很多的第三方功能模块的扩展。
用户5921339
2025/05/20
2740
Nginx服务器基础配置
Nginx系列(二):Nginx 配置文件说明
从配置文件开始到 events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行 Nginx服务器的用户(组)、允许生成的 worker process数,进程PD存放路径、日志存放路径和类型以及配置文件的引入等。
鳄鱼儿
2024/05/21
2530
Nginx配置——反向代理
其他话不多说,下面来学习一下Nginx的反向代理。如果没有Linux和Nginx环境,可以参考前两篇文章。
全栈程序员站长
2022/09/14
9.2K0
Nginx配置——反向代理
nginx配置
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。 2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。 3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。 4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。 5、location块:配置请求的路由,以及各种页面的处理情况。
zhangjiqun
2024/12/16
1840
nginx配置
终极 Nginx 配置指南(全网最详细)
对于自己上线项目的前端来说,nginx也是必须要了解和熟悉的,查了很多的nginx文章,看着写的都很详细,但是却没有了整体的概念。这里就重新梳理一遍,也理清思路。
程序员皮皮林
2024/09/10
4.8K0
终极 Nginx 配置指南(全网最详细)
Nginx 配置
在了解具体的Nginx配置项之前我们需要对于Nginx配置文件的构成有所概念,一般来说,Nginx配置文件会由如下几个部分构成:
一滴水的眼泪
2020/09/24
1.9K0
Nginx配置详解
Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。
lyb-geek
2018/07/26
6570
Nginx配置详解
深入解析Nginx配置文件
Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于各类Web服务器。作为一名测试工程师,了解Nginx配置文件的细节有助于更好地进行测试和优化服务器性能。本文将详细介绍Nginx配置文件的结构及其主要配置项。
霍格沃兹测试开发Muller老师
2024/06/19
1.9K0
服务器-Nginx基础配置
Nginx的默认配置文件为:nginx.conf,文件一共由三个部分组成,分别为:全局块、events块、http块在http块中,包含http全局块,多个server块。在每个server块中,可以包含多个server块和location块。
小二三不乌
2018/08/02
1.1K0
Nginx(二)------nginx.conf 配置文件
  上一篇博客我们将 nginx 安装在 /usr/local/nginx 目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件 nginx.conf 也在其中,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改,所以本篇博客我们先大致介绍一下该配置文件的结构。
IT可乐
2018/09/28
1.1K0
Nginx(二)------nginx.conf 配置文件
Nginx反向代理的配置
最近搞个服务器,然后部署了个人网站,以及一些服务供自己玩耍,其中Nginx最让我很难受,配置总是要现用现百度。所以,我来了,咳咳,我带来了一些​常用的配置。​需要有 Linux 和 Nginx 环境。
Java技术债务
2022/08/09
1.5K0
403forbidden404not found宝塔 nginx配置默认首页nginx demo
2、惊群现象:一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能。
zhangjiqun
2024/12/16
2350
403forbidden404not found宝塔 nginx配置默认首页nginx demo
Nginx(四)
本篇,我们来介绍一下 nginx.conf 的 http 块、server 块以及 location 块中的一些常见基本配置。
1ess
2021/11/01
4450
Nginx详解-入门
第【67篇】文章,每一篇都是亲自实践后的总结,只希望能够帮助都有需要的人。"莫愁前路无知己、天下谁人不识君"
IT学习日记
2022/09/13
5500
Nginx高性能Web服务器详解
1.配置文件包含:全局块、events块、http块、server块、location块
硬核项目经理
2019/08/06
2.9K0
nginx如何配置代理
nginx源码:https://trac.nginx.org/nginx/browser
挑战者
2019/10/14
2.3K0
Nginx 配置文件介绍
最佳值取决于许多因素,包括(但不限于)CPU内核的数量、存储数据的硬盘驱动器的数量以及负载模式。当有人怀疑时,将其设置为可用CPU内核的数量将是一个好的开始(值“auto”将尝试自动检测它)。
郑小超.
2022/09/23
1.1K0
Nginx 配置文件介绍
一文讲懂Nginx常用配置及和基本功能
Nginx(发音同engine x)是一款轻量级的Web服务器、反向代理服务器和负载均衡器,由俄罗斯程序员Igor Sysoev开发。Nginx的设计目标是高性能、高并发、高可靠、低资源消耗,可以作为Web服务器、反向代理服务器和负载均衡器使用。Nginx现已成为Internet上访问量最大的网站之一,据统计,截至2023年5月份,Nginx在全球占据了39%的市场份额。
网络技术联盟站
2023/06/01
1.7K0
【服务器】Nginx文件配置
Nginx配置解释: nginx.conf文件 #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; #工作模式及连接数上限 events { #ep
互联网金融打杂
2018/05/09
1.6K0
相关推荐
Nginx 服务器配置文件指令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验