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功能模块、目录结构及配置文件详解的更多相关文章

  1. Nginx安装,目录结构与配置文件详解

    1.Nginx简介 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设 ...

  2. Nginx目录结构与配置文件详解

    Nginx安装 具体安装nginx请移步:[nginx部署] 安装依赖 安装pcre依赖软件 [root@ubuntu ~]# yum install -y pcre pcre-devel //外网情 ...

  3. Tomcat的目录结构和配置文件详解

    本文转载: https://www.zybuluo.com/1234567890/note/515235 参考帖子: Tomcat(一):基础配置详解 Tomcat服务器中配置多个域名,访问不同的we ...

  4. Linux:apache目录结构和配置文件详解

    bin目录下的常见命令 conf目录 htdocs目录 logs目录 httpd.conf文件解析. 如果后期自己新创建了新的站点目录,就要重新增加对应的目录权限配置 extra/目录下配置文件解析 ...

  5. elasticsearch(三) 之 elasticsearch目录介绍和配置文件详解

    目录 elasticsearch 配置 目录详情 (config) 配置文件 elasticsearch.yml 配置集群名称(cluster.name) 配置 network.host 更改数据和储 ...

  6. net core体系-web应用程序-3项目结构、配置文件详解

    一.应用程序文件结构 如下图所示,相比于Asp.Net项目,在新建的Asp.Net Core项目中,没有了Global.asax以及Web.config这样的文件,但多了几个其他主要的文件,它们分别为 ...

  7. nginx应用场景,特性,目录结构,常用模块,内置变量,URL和URI,http状态码,配置文件详解

    1.nginx介绍 1丶俄罗斯人开发的,开源www服务软件 2丶软件一共780K 3丶nginx本身是一款静态(html,js,css,jpg等)www软件 4丶静态小文件高并发,同时占用的资源很少, ...

  8. Nginx配置配置文件详解

    文章目录 配置文件 nginx.conf配置文件详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 事件相关配置 Fastcgi相关配置参数 常需要调整的参数 nginx作 ...

  9. Nginx知多少系列之(三)配置文件详解

    目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...

  10. ubuntu nginx 安装以及配置文件详解

    1.到nginx官网下载源码包.最好下载稳定版本,nginx官网http://www.nginx.org/ 2.安装nginx依赖包运行命令: sudo apt-get install libssl- ...

随机推荐

  1. 2020-08-22:I/O多路复用中select/poll/epoll的区别?

    福哥答案2020-08-22: select,poll,epoll 都是 操作系统实现 IO 多路复用的机制. 我们知道,I/O 多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是 ...

  2. 【Java】GridBagLayout布局笔记

    参考博客: 样例解释:https://blog.csdn.net/wstz_5461/article/details/78067176 参数解释:https://blog.csdn.net/shiSh ...

  3. 各种版本的Linux 镜像下载网址

    今天发现Linux 镜像下载网址感觉很不错,分享给有需要的小伙伴们 访问地址 Linux操作系统各版本ISO镜像下载(包括oracle linux\redhat\centos\ubuntu\debia ...

  4. 分布式机器学习(Parameter Server)

    分布式机器学习中,参数服务器(Parameter Server)用于管理和共享模型参数,其基本思想是将模型参数存储在一个或多个中央服务器上,并通过网络将这些参数共享给参与训练的各个计算节点.每个计算节 ...

  5. javascript5 定时器功能

    定时器功能: 定时器功能是window对象方法,涉及到 定时器和延时器,具体 看代码 定时器 timer=setInterval(function (){},300) 清除定时器: clearInte ...

  6. odoo开发教程九:Odoo10 API

    一:纪录集API model中的数据是以集合的形式使用的,因此可以使用集合运算来操作. 集合运算符 record in set返回record是否在set中,record须为单条记录,record n ...

  7. kafka集群是如何选择leader,你知道吗?

    前言 kafka集群是由多个broker节点组成,这里面包含了许多的知识点,以下的这些问题你都知道吗? 你知道topic的分区leader是怎么选举的吗? 你知道zookeeper中存储了kafka的 ...

  8. Anaconda入门使用指南(一)

    python 是目前最流程的编程语言之一,但对于很多初学者而言,python 的包.环境以及版本的管理却是一个令人头疼的问题,特别是对于使用 Windows 的童鞋.为了解决这些问题,有不少发行版的 ...

  9. 【理论积累】Python中的Pandas库【一】

    Pandas库介绍 Pandas 是一个用于数据分析的 Python 第三方库,能够处理和分析不同格式的数据,例如:CSV.Excel.SQL 数据库等.Pandas 提供了两种数据结构,分别为 Se ...

  10. C++面试八股文:在C++中,你知道哪些运算符?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第11面: 面试官:在C++中,你都知道都哪些运算符? 二师兄:啥?运算符?+-*/=这些算吗? 面试官:嗯,还有其他的吗? 二师兄:当然还有,+=, ...