Nginx核心配置文件结构

从前面的内容学习中,我们知道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服务器整体运行的配置指令#events块,主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
events {     指令名    指令值;
}
#http块,是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置...
http {      指令名 指令值;server { #server块,是Nginx配置和虚拟主机相关的内容指令名  指令值;location / { #location块,基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理指令名   指令值;}}...
}

如果404也需要跳入到error页面需要在err_page 中添加一个404
重写加载配置文件

进入sbin
./nginx -s reload

简单小结下:

nginx.conf配置文件中默认有三大块:全局块、events块、http块

http块中可以配置多个server块,每个server块又可以配置多个location块。

全局块

user指令

(1)user:用于配置运行Nginx服务器的worker进程的用户和用户组。

语法 user user [group]
默认值 nobody
位置 全局块

该属性也可以在编译的时候指定,语法如下./configure --user=user --group=group,如果两个地方都进行了设置,最终生效的是配置文件中的配置。

该指令的使用步骤:

(1)设置一个用户信息"www"

user www;


回到sbin目录下

./nginx -t


(2) 创建一个用户

useradd www
./nginx -t
ps -ef| grep nginx #查看worker进程的用户
./nginx -s reload

(4)创建/root/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 WWW</em></p>
</body>
</html>

(5)修改nginx.conf

location / {root   /root/html;index  index.html index.htm;
}
重写加载
./nginx -s reload

(5)测试启动访问

页面会报403拒绝访问的错误

(6)分析原因

因为当前用户没有访问/root/html目录的权限

(7)将文件创建到 /home/www/html/index.html,修改配置

cd /home/www/
cp -r /root/html/ ./
location / {root   /home/www/html;index  index.html index.htm;
}

(8)再次测试启动访问

能正常访问。

综上所述,使用user指令可以指定启动运行工作进程的用户及用户组,这样对于系统的权限访问控制的更加精细,也更加安全。

work process指令

master_process:用来指定是否开启工作进程。(一般默认开启就行)

语法 master_process on|off;
默认值 master_process on;
位置 全局块

注意该配置需要重启nginx,使用reload无法生效

worker_processes:用于配置Nginx生成工作进程的数量,这个是Nginx服务器实现并发处理服务的关键所在。理论上来说workder process的值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要受到来自服务器自身的限制,建议将该值和服务器CPU的内核数保存一致。

语法 worker_processes num/auto;
默认值 1
位置 全局块

如果将worker_processes设置成2,则会看到如下内容:

其他指令

daemon:设定Nginx是否以守护进程的方式启动。

守护式进程是linux后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止。

语法 daemon on|off;
默认值 daemon on;
位置 全局块

pid:用来配置Nginx当前master进程的进程号ID存储的文件路径。

语法 pid file;
默认值 默认为:/usr/local/nginx/logs/nginx.pid
位置 全局块

该属性可以通过./configure --pid-path=PATH来指定

error_log:用来配置Nginx的错误日志存放路径

语法 error_log file [日志级别];
默认值 error_log logs/error.log error;
位置 全局块、http、server、location

该属性可以通过./configure --error-log-path=PATH来指定
其中日志级别的值有:debug|info|notice|warn|error|crit|alert|emerg,翻译过来为试|信息|通知|警告|错误|临界|警报|紧急,这块建议大家设置的时候不要设置成info以下的等级,因为会带来大量的磁盘I/O消耗,影响Nginx的性能。

(5)include:用来引入其他配置文件,使Nginx的配置更加灵活

语法 include file;
默认值
位置 any

events块

(1)accept_mutex:用来设置Nginx网络连接序列化(建议设置成on)

语法 accept_mutex on|off;
默认值 accept_mutex on;
位置 events

这个配置主要可以用来解决常说的"惊群"问题。大致意思是在某一个时刻,客户端发来一个请求连接,Nginx后台是以多进程的工作模式,也就是说有多个worker进程会被同时唤醒,但是最终只会有一个进程可以获取到连接,如果每次唤醒的进程数目太多,就会影响Nginx的整体性能。如果将上述值设置为on(开启状态),将会对多个Nginx进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。

(2)multi_accept:用来设置是否允许同时接收多个网络连接(建议设置成on)

语法 multi_accept on|off;
默认值 multi_accept off;
位置 events

如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接

(3)worker_connections:用来配置单个worker进程最大的连接数(1024)

语法 worker_connections number;
默认值 worker_commections 512;
位置 events

这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number值不能大于操作系统支持打开的最大文件句柄数量。

(4)use:用来设置Nginx服务器选择哪种事件驱动来处理网络消息。(epoll)

语法 use method;
默认值 根据操作系统定
位置 events

注意:此处所选择事件处理模型是Nginx优化部分的一个重要内容,method的可选值有select/poll/epoll/kqueue等,之前在准备centos环境的时候,我们强调过要使用linux内核在2.6以上,就是为了能使用epoll函数来优化Nginx。

另外这些值的选择,我们也可以在编译的时候使用

--with-select_module--without-select_module

--with-poll_module--without-poll_module来设置是否需要将对应的事件驱动模块编译到Nginx的内核。

events指令配置实例

打开Nginx的配置文件 nginx.conf,添加如下配置

events{accept_mutex on;multi_accept on;worker_commections 1024;use epoll;
}

启动测试

./nginx -t
./nginx -s reload

http块

定义MIME-Type

我们都知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。所以说MIME Type是网络资源的媒体类型。Nginx作为web服务器,也需要能够识别前端请求的资源类型。

在Nginx的配置文件中,默认有两行配置

include mime.types;
default_type application/octet-stream;  # 已二进制流的方式处理,可能就会下载当前文件

(1)default_type:用来配置Nginx响应前端请求默认的MIME类型。

语法 default_type mime-type;
默认值 default_type text/plain;
位置 http、server、location

在default_type之前还有一句include mime.types,include之前我们已经介绍过,相当于把mime.types文件中MIMT类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中。

举例来说明:
有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并且响应性能非常快。

如何实现:

location /get_text {#这里也可以设置成text/plaindefault_type text/html;return 200 "<h1>This is nginx's text</h1>";
}
location /get_json{default_type application/json;return 200 '{"name":"TOM","age":18}';
}

自定义服务日志

Nginx中日志的类型分access.log、error.log。

access.log:用来记录用户所有的访问请求。

error.log:记录nginx本身运行时的错误信息,不会记录用户的访问请求。

Nginx服务器支持对服务日志的格式、大小、输出等进行设置,需要使用到两个指令,分别是access_log和log_format指令。

可以使用 tail -f /usr/local/nginx/logs/access.log 查看访问日志

(1)access_log:用来设置用户访问日志的相关属性。

语法 access_log path[format[buffer=size]]
默认值 access_log logs/access.log combined;
位置 http, server, location
access_log logs/my.log;

(2)log_format:用来指定日志的输出格式。

语法 log_format name [escape=default|json|none] string…;
默认值 log_format combined “…”;
位置 http
log_format myformat '=====>This is My format:$http_user_agent';
access_log logs/my.log myformat;

其他配置指令

(1)sendfile:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能

语法 sendfile on|off;
默认值 sendfile off;
位置 http、server、location

(2)keepalive_timeout:用来设置长连接的超时时间。
》为什么要使用keepalive?

我们都知道HTTP是一种无状态协议,客户端向服务端发送一个TCP请求,服务端响应完毕后断开连接。
如何客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,效率相对来说比较多,使用keepalive模式,可以告诉服务器端在处理完一个请求后保持这个TCP连接的打开状态,若接收到来自这个客户端的其他请求,服务端就会利用这个未被关闭的连接,而不需要重新创建一个新连接,提升效率,但是这个连接也不能一直保持,这样的话,连接如果过多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时间。
语法 keepalive_timeout time;
默认值 keepalive_timeout 75s;
位置 http、server、location

(3)keepalive_requests:用来设置一个keep-alive连接使用的次数。

语法 keepalive_requests number;
默认值 keepalive_requests 100;
位置 http、server、location

server块和location块

server块和location块都是我们要重点讲解和学习的内容,因为我们后面会对Nginx的功能进行详细讲解,所以这块内容就放到静态资源部署的地方给大家详细说明。

本节我们主要来认识下Nginx默认给的nginx.conf中的相关内容,以及server块与location块在使用的时候需要注意的一些内容。

 server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504 404  /50x.html;location = /50x.html {root   html;}}

nginx ---- nginx.conf核心配置文件相关推荐

  1. Nginx编译安装及配置文件详解

    写在前面 Centos版本:Centos 7.6 - 64bit Nginx版本:1.20.2 一.什么是Nginx Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及 ...

  2. nginx平滑升级与配置文件详解

    nginx平滑升级与配置文件详解 文章目录 nginx平滑升级 nginx配置文件 nginx.conf配置详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 网络连接相关 ...

  3. Nginx —— nginx的命令行控制(nginx的启动与停止、重载配置文件、回滚日志文件、平滑升级等操作)

    在linux中,需要使用命令来控制Nginx服务器的启动与停止.重载配置文件.回滚日志文件.平滑升级等行为. 默认情况下,nginx被安装在目录/usr/local/nginx中,其二进制文件路径为/ ...

  4. Nginx的安装和配置文件详细说明

    1.nginx的安装 1.1解压nginx文件 1.2 nginx文件说明 3.启动nginx 4.验证是否启动成功 2 配置文件(说明) user  nginx;nginx的运行账号(rpm安装时会 ...

  5. docker-compose部署nginx,挂载外置配置文件及项目

    1.docker.docker-compose安装 教程很多,不多写了,不会的自行百度 2.自定义配置文件nginx.conf 下载nginx获取对应版本的nginx.conf,地址http://ng ...

  6. nginx: [emerg] duplicate “log_format“ name “main“ in /usr/local/phpstudy/vhost/sys/nginx/sys.conf:11

    前言 CentOS Linux release 8.2.2004 (Core) phpstdy X1.26 nginx1.15 配置nginx日志出错 nginx: [emerg] duplicate ...

  7. nginx 多php项目配置文件,nginx 配置文件配置多个站点

    nginx环境下配置多个站点 一.找到nginx的配置文件 一般会在/etc/nginx/nginx.conf 二.修改配置文件我的配置文件如下,其中server 包括的内容是一个对象 一个网站对应一 ...

  8. nginx php多域名配置文件,配置文件,nginx_nginx多站点配置,无法通过域名访问,使用ip访问会跳转到其中一个站点,配置文件,nginx - phpStudy...

    nginx多站点配置,无法通过域名访问,使用ip访问会跳转到其中一个站点 在一台服务器设置了Nginx多站点,但是访问这些站点的域名均无法访问,错误如下图: 通过ip会跳转到其中一个站点,具体表现为: ...

  9. Nginx 配置问题 server directive is not allowed here in /etc/nginx/nginx.conf:69

    前沿 今天在其他服务器上重新配置 nginx.conf 文件,配置结束启动 nginx 发现遇到了这样一个错误,我擦-?我配置文件都是从上个服务器上 复制粘贴过来的,怎么会遇到这个问题呢?百思不得其解 ...

最新文章

  1. 清华学姐的研究生复试经验!
  2. 重新分区_手机DATA重新分区教程(超详细)
  3. 学会使用svn:externals
  4. 工程管理专业就业前景_网络工程师就业前景如何?
  5. 2019-03-10-算法-进化(存在重复)
  6. GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
  7. 阿里二面:RocketMQ 消息积压了,增加消费者有用吗?
  8. main函数的类型定义
  9. 如何高效地远程部署?Fabric 来支招!
  10. sql server从一个数据库复制一张表到另外一个数据库
  11. 4 合并grid列_在 Power BI Desktop 中合并数据
  12. Linux(CentOS) 下安装字体
  13. stm32上基于LwIP移植LibArtnet
  14. 【烈日炎炎战后端】JAVA多线程(11.2万字)
  15. 便携式电热水壶外贸出口欧洲CE认证准备资料
  16. 苹果27寸一体机拆机图解_苹果新iMac一体电脑拆机图解
  17. 大数据与AI时代,企业爆发之道?Tesra超算网络保驾护航!
  18. cocos Creator 3.2 关于 NodePool 对象池的应用- (弹出框)
  19. ​即将过去的2021年。
  20. 史上最通俗易懂的ASM教程

热门文章

  1. 【报告分享】疫情期间抖音、快手带货趋势分析报告.pdf(附下载链接)
  2. 程序员如何达到年薪百万?python程序员必读书籍!
  3. 预训练新范式!为什么Prompt会更有效?
  4. rs232接口_RS232接口与RS485的区别
  5. 吴恩达机器学习笔记3——线性代数
  6. Java-类和对象、关键字、构造方法
  7. 吴恩达机器学习(十)支持向量机(SVM)
  8. Python爬虫入门之使用Redis+Flask维护动态代理池
  9. (筆記) 如何增加SignalTap II能觀察的reg與wire數量? (SOC) (Quartus II) (SignalTap II)
  10. 【msdn wpf forum翻译】获取当前窗口焦点所在的元素