Nginx04_核心配置文件结构
整体介绍
从前面的内容学习中,我们知道Nginx的核心配置文件默认是放在/usr/local/nginx/conf/nginx.conf
,这一节,我们就来学习下nginx.conf的内容和基本配置方法。
读取Nginx自带的Nginx配置文件,我们将其中的注释部分【学习一个技术点就是在Nginx的配置文件中可以使用#
来注释】删除掉后,就剩下下面内容:
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服务器整体运行的配置指令
worker_processes 1;
events块
主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
events {
worker_connections 1024;
}
http块
是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置...
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.conf配置文件中默认有三大块:全局块、events块、http块
http块中可以配置多个server块,每个server块又可以配置多个location块。
全局块
user指令
user:用于配置运行Nginx服务器的worker进程的用户和用户组。
默认值:nobody,位置全局块。
该属性也可以在编译的时候指定,语法如下./configure --user=user --group=group
,如果两个地方都进行了设置,最终生效的是配置文件中的配置。
可以把该指令替换为自己,如果用一个不存在的用户,会报错:
测试
在/root/
下创建文件夹html
,然后再html
下创建文件index.html
。
写上如下内容:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
<p><em>I am yaowy</em></p>
</body>
</html>
修改/usr/local/nginx/conf/nginx.conf
# yaowy是我的虚拟机创建的一个普通用户
user yaowy;
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 /root/html;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重新加载配置文件
/usr/local/nginx/sbin/nginx -s reload
如果没有启动,直接先执行/usr/local/nginx/sbin/nginx
启动即可。
访问测试
403拒绝访问错误,因为我们使用的用户是普通用户yaowy,而给nginx配置的访问首页html文件在root目录下。
在用户yaowy的家目录下,再次创建html目录,在里面创建文件index.html。记住使用yaowy这一普通用户,如果一不小心使用了root用户,那就用chown -R yaowy:yaowy html
这一命令修改属组就好了。
修改/usr/local/nginx/conf/nginx.conf
文件,重点修改http-server-location部分,内容如下:
location / {
root /home/yaowy/html;
index index.html;
}
执行/usr/local/nginx/sbin/nginx -t
测试文件,报
/usr/local/nginx/sbin/nginx -t
是nginx配置文件测试命令,如果结果是success
再执行/usr/local/nginx/sbin/nginx -s reload
让Nginx重新加载配置文件
浏览器请求测试
成功
work process指令
work_process:用于配置Nginx生成工作进程的数量,这个是Nginx服务器实现并发处理服务的关键所在。理论上来说workder process的值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要受到来自服务器自身的限制,建议将该值和服务器CPU的内核数保存一致。
如果将worker_processes设置成2,重新加载nginx配置文件,则会看到如下内容:
其他指令
daemon:设定Nginx是否以守护进程的方式启动。默认值是on
,即开启状态。守护式进程是linux后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止。
pid:用来配置Nginx当前master进程的进程号ID存储的文件路径。默认值是/usr/local/nginx/logs/nginx.pid
。该属性可以通过./configure --pid-path=PATH
来指定
error_log:用来配置Nginx的错误日志存放路径。默认值是/usr/local/nginx/logs/nginx.pid
。该属性可以通过./configure --error-log-path=PATH
来指定。使用方式为error_log file [日志级别];
。日志级别是可选项。日志级别的值有:debug|info|notice|warn|error|crit|alert|emerg,翻译过来为试|信息|通知|警告|错误|临界|警报|紧急,这块建议大家设置的时候不要设置成info以下的等级,因为会带来大量的磁盘I/O消耗,影响Nginx的性能。
include:用来引入其他配置文件,使Nginx的配置更加灵活。无默认值,所谓引入,就是将对应的被引入文件的文本内容替换到include指令这里。
events块
accept_mutex
accept_mutex
默认值是on。
这个配置主要可以用来解决常说的"惊群"问题。大致意思是在某一个时刻,客户端发来一个请求连接,Nginx后台是以多进程的工作模式,也就是说有多个worker进程会被同时唤醒,但是最终只会有一个进程可以获取到连接,如果每次唤醒的进程数目太多,就会影响Nginx的整体性能。如果将上述值设置为on(开启状态),将会对多个Nginx进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。
multi_accept
multi_accept
用来设置是否允许同时接收多个网络连接。默认值是off
,即关闭状态。如果multi_accept
被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接.
worker_connections
worker_connections
用来配置单个worker进程最大的连接数,默认值是512。这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number值不能大于操作系统支持打开的最大文件句柄数量。
use
use
:用来设置Nginx服务器选择哪种事件驱动来处理网络消息。默认值根据操作系统而定。此处所选择事件处理模型是Nginx优化部分的一个重要内容,method的可选值有select/poll/epoll/kqueue等,之前在准备centos环境的时候,我们强调过要使用linux内核在2.6以上,就是为了能使用epoll函数来优化Nginx。而我们的CentOS7的内核版本肯定是在2.6以上,能够使用epoll函数。
另外这些值的选择,我们也可以在编译的时候使用
--with-select_module
、--without-select_module
、 --with-poll_module
、 --without-poll_module
来设置是否需要将对应的事件驱动模块编译到Nginx的内核。
events指令配置实例
打开Nginx的配置文件/usr/local/nginx/conf/nginx.conf
,添加如下配置:
events{
accept_mutex on;
multi_accept on;
worker_commections 1024;
use epoll;
}
启动测试:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
http块
定义MIME-Type
我们都知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。所以说MIME Type是网络资源的媒体类型。Nginx作为web服务器,也需要能够识别前端请求的资源类型。
在Nginx的配置文件中,默认有两行配置:
include mime.types;
default_type application/octet-stream;
default_type
用来配置Nginx响应前端请求默认的MIME类型。在default_type之前还有一句include mime.types
,include之前我们已经介绍过,相当于把mime.types文件中MIMT类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中。
举例来说明:
有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并且响应性能非常快。
如何实现:
location /get_text {
#这里也可以设置成text/plain
default_type text/html;
return 200 "This is nginx's text";
}
location /get_json{
default_type application/json;
return 200 '{"name":"TOM","age":18}';
}
重新加载测试:
自定义服务日志
Nginx中日志的类型分access.log
、error.log
。
access.log
:用来记录用户所有的访问请求。默认值是logs/access.log
。
error.log
:记录nginx本身运行时的错误信息,不会记录用户的访问请求。默认值是logs/error.log
。
Nginx服务器支持对服务日志的格式、大小、输出等进行设置,需要使用到两个指令,分别是access_log
和log_format
指令。
其他配置指令
sendfile
用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能.
keepalive_timeout
用来设置长连接的超时时间。默认值是75s。
为什么要使用keepalive?
我们都知道HTTP是一种无状态协议,客户端向服务端发送一个TCP请求,服务端响应完毕后断开连接。
如何客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,效率相对来说比较多,使用keepalive模式,可以告诉服务器端在处理完一个请求后保持这个TCP连接的打开状态,若接收到来自这个客户端的其他请求,服务端就会利用这个未被关闭的连接,而不需要重新创建一个新连接,提升效率,但是这个连接也不能一直保持,这样的话,连接如果过多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时间。
keepalive_requests
用来设置一个keep-alive连接使用的次数。默认值是100。
server块和location块
server块和location块是nginx配置的重点,后面会进行详细的说明。
总结:
这篇博客只是简单的对nginx配置文件进行了下说明,有点迷糊没关系,后面我会结合实际的配置文件进行讲解。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库