Nginx深入:nginx功能模块、目录结构及配置文件详解
Nginx功能模块说明
1、Nginx 核心功能模块(Core functionality)
Nginx核心功能模块负责Nginx的全局应用,主要对应主配置文件的核心层(Main层)和事件(Events)层,这里有很多 Nginx 必需的全局参数配置。
有关核心功能模块的官方文档为:http://nginx.org/en/docs/ngx_core_module.html
2、标准的 HTTP 功能模块集合
这些标准的 HTTP 功能模块,虽然不是 Nginx 软件所必需的,但都是很常用的,因此绝大部分默认情况都会自动安装到 Nginx 软件中,见下表。保留软件的默认配置就好,不建议改动,除非你明确知道你在做什么,有什么额外影响。
企业场景常用的 Nginx HTTP 功能模块汇总
| Nginx HTTP 功能模块 | 模块说明 |
|---|---|
| ngx_http_core_module | 包括一些核心的 HTTP 参数配置,对应 Nginx 的配置为 HTTP 区块部分 |
| ngx_http_access_module | 访问控制模块,用来控制网站用户对 Nginx 的访问 |
| ngx_http_gzip_module | 压缩模块,对 Nginx 返回的数据压缩,属于性能优化模块 |
| ngx_http_fastcgi_module | FastCGI 模块,和动态应用相关,如 PHP |
| ngx_http_proxy_module | proxy 代理模块 |
| ngx_http_upstream_module | 负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查 |
| ngx_http_rewrite_module | URL 地址重写模块(伪静态) |
| ngx_http_limit_conn_module | 限制用户并发连接数及请求数模块 |
| ngx_http_limit_req_module | 根据定义的 key 限制 Nginx 请求过程的速率 |
| ngx_http_log_module | 访问日志模块,以指定的格式记录 Nginx 客户访问日志等信息 |
| ngx_http_auth_basic_module | web 认证模块,设置 Web 用户通过账号索码访问 Nginx |
| ngx_http_ssl_module | ssl模块,用于加密的 HTTP 连接,如 https |
| ngx_http_stub_status_module | 记录 Nginx 基本访问状态信息等的模块 |
在生产环境中,配置、调整及优化 Nginx 软件,主要就是根据这此模块的功能修改相应的参数来实现的。
官方文档:https://nginx.org/en/docs/
Nginx目录结构及配置文件介绍
注:以下介绍基于源码编译安装的nginx
[root@web01 ~]# tree /app/nginx
/app/nginx
├── client_body_temp
├── conf #//nginx所有的配置文件的目录,重要
│ ├── fastcgi.conf #fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default
│ ├── fastcgi_params #fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types #媒体类型文件
│ ├── mime.types.default
│ ├── nginx.conf #nginx默认的主配置文件
│ ├── nginx.conf.default
│ ├── scgi_params #scgi相关参数文件
│ ├── scgi_params.default
│ ├── uwsgi_params #uwsgi相关参数文件,配置Python环境可能会用到
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp #//fastcgi临时数据目录
├── html #//这是编译安装时nginx的默认站点目录
│ ├── 50x.html #错误页面优雅替代显示文件,例如:出现 502 错误时会调用此页面
│ └── index.html #默认的首页文件,在实际环境中,大家习惯用(注意字眼不是必须) index.html、index.php、index.jsp来做网站的首页文件。
├── logs #//nginx默认的日志存放目录,包括错误日志及访问日志
│ ├── access.log #访问日志
│ ├── error.log #错误日志
│ └── nginx.pid #nginx的pid文件,nginx进程启动后,会把所有进程的pid号写到此文件
├── proxy_temp #//临时目录
├── sbin #//命令目录
│ └── nginx #启动命令
├── scgi_temp
└── uwsgi_temp
# 注:
所有default结尾的都是备份文件,未注释的生产很少用,可以不必理会。
koi-utf、koi-win、win-utf:这3个文件是 KOI8-R 编码转换的映射文件,因为 Nginx 的作者是俄罗斯人,在 Unicode 流行之前,KOI8-R 是使用最为广泛的俄语编码。
PS:以yum官方源安装的nginx配置文件是在/etc/nginx下
[root@web02 ~]# tree /etc/nginx/
/etc/nginx/
├── conf.d
│ └── default.conf
├── default.d
├── fastcgi_params
├── mime.types
├── modules -> ../../usr/lib64/nginx/modules
├── nginx.conf
├── nginx.conf.rpmsave
├── scgi_params
└── uwsgi_params
Nginx的主配置文件
Nginx主配置文件nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。配置文件中main区块(层)位于最上面,main层后面有Events层、http层等,在http层中又包含一个或多个server层,每个server层中又可有一个或多个location层。
nginx.conf是Nginx最重要的配置文件之一。必须搞定它。下面以yum官方源安装的nginx主配置文件为例详解。
[root@web02 ~]# grep -v '^$|#' /etc/nginx/nginx.conf
## 核心层(main层)
user nginx; # nginx的启动用户
worker_processes auto; # nginx运行的work进程数量(建议与CPU数量一致或auto)
auto:自动根据cpu的核心数来启动对应的工作进程数
error_log /var/log/nginx/error.log notice; # nginx错误日志存放路径,notice为错误日志级别
pid /var/run/nginx.pid; # 启动后进程号存放路径
## 事件层(events层)
events {
worker_connections 1024; # 每个worker进程支持的最大连接数
}
## http层(网站配置)
http {
include /etc/nginx/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 /var/log/nginx/access.log main; // 访问日志路径
sendfile on; // 开启高效文件传输
keepalive_timeout 65; // 长连接超时时间
include /etc/nginx/conf.d/*.conf; #//包含nginx其他子配置文件(网站虚拟机配置文件)
## server层
#使用Server配置网站, 每个Server{}标签对应一个独立的网站站点(所谓虚拟主机)
server {
listen 80; # 监听端口,默认80
server_name abc.com alias; # 提供服务的的域名及别名(比如abc.org,访问这个同abc.com)
access_log access.log; # 该网站的访问日志
location / { # 控制网站访问路径
root /usr/share/nginx/html; # 存放网站源代码的位置
index index.html; # 默认返回网站的文件
}
}
...
# 第二个虚拟主机配置
server {
...
}
} # http层结束
########## 注意 ##########
nginx配置文件,每一行都以';'结尾
http{} 标签主要用来解决用户的请求与响应。
server{} 标签主要用来响应具体的某一个网站。
location{} 标签主要用于匹配网站具体URL路径。
Nginx的其他配置文件
Nginx配合PHP动态服务相关配置文件为fastcgi.conf、fastcgi_params
Nginx配合Python动态服务相关配置文件为uwsgi_params
Nginx日志管理
错误日志配置
Nginx 会把自身运行的故障信息及用户访问的日志信息记录到指定的日志文件里。
# 错误日志在main层配置
格式:
error_log file level; # file为错误日志存放目录,level为错误日志级别
其中,关键字error_log不能改变,存放日志文件的目录可以指定任意,错误日志级别常见的有 [debug |info |notice |warn |error |crit |alert |emerg],级别越高记录的信息越少,生产场景一般是 warn |error |crit 这三个级别之一,比如可以用error。注意不要配置 info 等较低级别.会带来巨大磁盘 I/O 消耗。
其他可以设置error_log的层:http、server、location
访问日志配置
Nginx会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户浏览行为等,此功能由ngx_http_log_module模块负责。
Nginx访问日志主要由以下两个参数控制:
log_format:用来定义日志格式(可定义多种格式,取不同名字)
access_log:用来指定日志路径及使用的格式
# 以上面主配置文件中的配置为例:(默认参数)
位置:http层内
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 /var/log/nginx/access.log main; // 访问日志路径
# 在没有特殊要求的情况下,采用默认配置即可。
# 日志变量说明
'$remote_addr - $remote_user [$time_local] "$request" '
$remote_addr 远端的IP(上一访问你的IP)
$remote_user 登录的用户(网页没有登录用户则为空)
[$time_local] 记录访问时间和时区
"$request" http请求方式
'$status $body_bytes_sent "$http_referer" '
$status http状态码,记录请求返回的信息
$body_bytes_sent 流量
"$http_referer" 跳转地址(从哪个网站跳转过来的)
'"$http_user_agent" "$http_x_forwarded_for"'
"$http_user_agent" 客户端信息,如浏览器、手机客户端等
"$http_x_forwarded_for" 当前端有代理服务器时,设置Web节点记录客户端地址的配置,此参数生效的前提是代理服务器上也要进行相关的x_forwarded_for设置
日志管理实操
# 查看日志
root@web01,172.16.1.7:~ # ll /var/log/nginx/
total 68
-rw-r----- 1 nginx adm 31262 Sep 28 11:39 access.log
-rw-r----- 1 nginx adm 33759 Sep 28 11:39 error.log
# 启动服务后,浏览器打开10.0.0.7显示nginx默认页面,刷新一下,日志便出来一条
[root@web01 ~]# curl 10.0.0.7
[root@web01 ~]# tail -f /var/log/nginx/access.log
10.0.0.7 - - [04/Aug/2023:06:20:32 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
10.0.0.7 - - [04/Aug/2023:06:20:58 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
root@web01,172.16.1.7:~ # tail -f /var/log/nginx/access.log
10.0.0.1 - - [29/Sep/2022:09:37:48 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "-"
10.0.0.1 - - [29/Sep/2022:09:37:48 +0800] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "-"
10.0.0.1 客户端IP,网卡
- 该网站不需要登录,没有用户(对应第二个-)
[29/Sep/2022:09:37:48 +0800] 时间、时区
"GET / HTTP/1.1" 请求方式 请求URI HTTP协议版本号
304 状态码(缓存,清缓存之后变200,代表正常访问)
0 流量,响应body的大小
"-" 无跳转
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 客户端信息
"-" 没有使用代理
Nginx深入:nginx功能模块、目录结构及配置文件详解的更多相关文章
- Nginx安装,目录结构与配置文件详解
1.Nginx简介 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设 ...
- Nginx目录结构与配置文件详解
Nginx安装 具体安装nginx请移步:[nginx部署] 安装依赖 安装pcre依赖软件 [root@ubuntu ~]# yum install -y pcre pcre-devel //外网情 ...
- Tomcat的目录结构和配置文件详解
本文转载: https://www.zybuluo.com/1234567890/note/515235 参考帖子: Tomcat(一):基础配置详解 Tomcat服务器中配置多个域名,访问不同的we ...
- Linux:apache目录结构和配置文件详解
bin目录下的常见命令 conf目录 htdocs目录 logs目录 httpd.conf文件解析. 如果后期自己新创建了新的站点目录,就要重新增加对应的目录权限配置 extra/目录下配置文件解析 ...
- elasticsearch(三) 之 elasticsearch目录介绍和配置文件详解
目录 elasticsearch 配置 目录详情 (config) 配置文件 elasticsearch.yml 配置集群名称(cluster.name) 配置 network.host 更改数据和储 ...
- net core体系-web应用程序-3项目结构、配置文件详解
一.应用程序文件结构 如下图所示,相比于Asp.Net项目,在新建的Asp.Net Core项目中,没有了Global.asax以及Web.config这样的文件,但多了几个其他主要的文件,它们分别为 ...
- nginx应用场景,特性,目录结构,常用模块,内置变量,URL和URI,http状态码,配置文件详解
1.nginx介绍 1丶俄罗斯人开发的,开源www服务软件 2丶软件一共780K 3丶nginx本身是一款静态(html,js,css,jpg等)www软件 4丶静态小文件高并发,同时占用的资源很少, ...
- Nginx配置配置文件详解
文章目录 配置文件 nginx.conf配置文件详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 事件相关配置 Fastcgi相关配置参数 常需要调整的参数 nginx作 ...
- Nginx知多少系列之(三)配置文件详解
目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...
- ubuntu nginx 安装以及配置文件详解
1.到nginx官网下载源码包.最好下载稳定版本,nginx官网http://www.nginx.org/ 2.安装nginx依赖包运行命令: sudo apt-get install libssl- ...
随机推荐
- 2022-10-24:以下go语言代码输出什么?A:3 3;B:3 4;C:0 0;D:0 1。 package main func main() { m := make(map[int]int
2022-10-24:以下go语言代码输出什么?A:3 3:B:3 4:C:0 0:D:0 1. package main func main() { m := make(map[int]int, 3 ...
- 2020-09-07:Docker的四种网络类型?
福哥答案2020-09-07: 敲docker network ps命令,显示三种模式.1.bridge模式:使用–net =bridge指定,默认设置.桥接式网络模式(默认).容器的默认网络模式,d ...
- 2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态。如何让容器处于running状态?
2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态.如何让容器处于running状态? 答案2022-02-08: 加 ...
- Kerberos协议原理
本文主要介绍Kerberos认证协议的原理以及解决了什么问题 Kerberos是什么 Kerberos是计算机网络世界中的一种身份认证协议. 身份认证是我们日常生活中经常进行的活动,比如我们要去银行取 ...
- openlayers获取绘制多边形的顶点坐标
虽使用Interaction无数次,进行图形绘制与用户交互等,但当需要获取绘制图形的顶点坐标时还是不晓得咋弄? 都知道在绘制完成后回调中能获取到当前的event对象draw.on('drawend', ...
- flutter apk启动闪退问题
今发布一个flutter apk 安装后启动时老是闪退,经过一遍又一遍查找,发现是指定了so的问题 看多次点击启动 一.比对打包后的apk 在出现该问题后也搜索了不少资料,参考过 https://bl ...
- SpringBoot配置文件加载
Spring Boot 配置文件加载是通过 Spring Boot 的自动配置机制实现的,它可以根据不同的环境加载不同的配置文件,包括 application.properties.applicati ...
- 手把手实践丨基于STM32+华为云设计的智慧烟感系统
摘要:当前基于STM32和华为云,设计了一种智慧烟感系统,该系统可以检测烟雾,同时将检测到的数据上传到云端进行处理和分析. 本文分享自华为云社区<基于STM32+华为云设计的智慧烟感系统> ...
- .Net Core后端架构实战【3-介入IOC控制反转】
摘要:基于.NET Core 7.0WebApi后端架构实战[2-介入IOC控制反转] 2023/04/09, ASP.NET Core 7.0, VS2022 引言 Inversion of Co ...
- CentOS 8 已是绝版?还有后续么?
文章由 Linux爱好者( ID: LinuxHub)整理自开源中国 + 红帽官方.本文章经原作者同意后授权转载. 2020年12月8日,CentOS 项目宣布,CentOS 8 将于 2021 年底 ...