Nginx深入:nginx功能模块、目录结构及配置文件详解

这篇具有很好参考价值的文章主要介绍了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设置

日志管理实操文章来源地址https://www.toymoban.com/news/detail-632472.html

# 查看日志
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功能模块、目录结构及配置文件详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Dubbo 模块探秘:深入了解每个组件的独特功能【二】

    欢迎来到我的博客,代码的世界里,每一行都是一个故事 在 Dubbo 的分布式舞台上,每个模块都是为了呈现最完美的表演。今天,我们将深入 Dubbo 的模块体系,解析每个组件的独特功能,为你揭开构建分布式服务的神秘面纱。让我们一同踏上这场 Dubbo 模块之旅,探寻分布式服

    2024年01月22日
    浏览(59)
  • Nginx下载和安装教程、Nginx目录结构、Nginx具体应用

    Nginx是一款轻量级的开源Web服务器软件,也是一种反向代理服务器。它以其高性能和灵活性而被广泛应用于互联网领域。本文将介绍Nginx的概述、下载和安装以及目录结构。 (1)Nginx介绍 Nginx最初由Igor Sysoev开发,目的是解决C10K问题,即同时处理成千上万个并发连接的需求。

    2024年02月15日
    浏览(54)
  • linux:nginx目录结构

    参考:         Nginx目录结构与配置文件详解         Nginx 目录结构详解_-纸短情长的博客-CSDN博客

    2024年02月13日
    浏览(44)
  • Nginx - 目录结构与配置文件详解

    目录 conf nginx.conf  worker_processes worker_connections include mime.types; default_type application/octet-stream; sendfile sendfile off;  sendfile on; keepalive_timeout  65; server {} location / {} error_page   500 502 503 504  /50x.html; html index.html 50x.html logs access.log error.log nginx.pid  sbin Nginx  Nginx的目录结构: 这里方便直

    2024年02月07日
    浏览(46)
  • 深入理解nginx的userid模块[下]

    深入理解nginx的userid模块[上] 深入理解nginx的userid模块[下] 4.1.1 ngx_http_userid_add_variables函数添加自定义变量   本函数是在preconfirguration阶段被调用的,用来向nginx框架注册 uid_got 、 uid_set 、 uid_reset 三个变量。 uid_got: cookie的名字和接收到的客户端的标识。 uid_set: cookie的名字和

    2024年04月22日
    浏览(62)
  • nginx简介与安装配置,目录结构和配置文件介绍,配置nginx的service管理

    目录 一.nginx简介 1.简介 2.特性 二.nginx安装 1.rpm包方式 (1)下载扩展源 (2)安装扩展rpm包,nginx -V查看配置参数,后面源码安装时要用到 (3)默认的配置文件位置和html存放位置 2.源码方式 (1)建议提前下好所需要的部分包 (2)下载tar.gz包 (3)建议将包解压到/usr/local

    2024年02月04日
    浏览(45)
  • Nginx常用内置模块, 实现目录索引+状态监控+IP访问控制+用户访问控制

    1.安装nginx 2.配置nginx扩展配置文件,实现自定义网页根目录 3.配置autoindex自动索引模块 4.配置nginx状态监控模块 5.配置nginx基于IP访问控制access模块 6.配置nginx基于用户访问控制auth模块 1.挂载光盘,进入nginx软件包目录 umount /dev/cdrom /mnt eject mount /dev/cdrom /mnt cd /mnt/nginx-rpm/ 2.使用

    2024年01月21日
    浏览(57)
  • ERP系统有哪些功能模块?

    现在市面上的管理软件有很多,不少企业都会去选择一些操作简单便捷的软件,优化工作流程,提高工作效率,其中ERP系统就是常见的一种,ERP是企业资源计划(Enterprise Resource Planning)的简称,是可以为企业员工及决策层提供决策手段的管理平台。ERP是一个庞大的数据库管理系

    2024年02月04日
    浏览(50)
  • 网易云音乐开发--search模块基本功能实现(除历史记录模块)

    老样子搭建一个search搜索页面  还有一块没有实现,那就是让输入框默认的文本变换颜色  微信小程序: input输入框placeholder样式的修改_微信小程序placeholder样式_酷伊奥的博客-CSDN博客  百度搜索了一下,找到了这个大佬的解决方案。很nice 查看文档 网易云音乐 NodeJS 版 API (b

    2024年02月06日
    浏览(79)
  • msf常用模块功能整理

    更新中 shell中直接输入msfconsole开始运行 use +模块路径 使用模块 search+模块 用来搜索模块 back 返回主界面 模块中: info 查看模块信息 show options 查看模块设置项 show targets 显示可选择的target(targert更像是给你选项,你去细化攻击细节,但是明明目标机器是64位系统,我选

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包