Nginx程序结构及核心配置

news/2025/10/26 15:22:59/文章来源:https://www.cnblogs.com/dataverse/p/19166896

Nginx程序结构及核心配置

1. 程序结构

$ sudo rpm -ql nginx
/etc/logrotate.d/nginx # 配置日志切割策略
/etc/nginx # nginx 主程序存放路径
/etc/nginx/conf.d # nginx 配置文件目录
/etc/nginx/conf.d/default.conf # nginx 默认配置文件
/etc/nginx/fastcgi_params # nginx 与 PHP 交换的内置变量
/etc/nginx/mime.types # 存放 http 响应报文中的回传的文件类型
/etc/nginx/modules # 存放 nginx 程序模块的目录
/etc/nginx/nginx.conf # nginx 主配置文件
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params # 存放 nginx 与 uwsgi 交换的内置变量
/usr/lib/.build-id
/usr/lib/.build-id/10
/usr/lib/.build-id/10/306025303ca379141ac200de5441297009c52f
/usr/lib/.build-id/4a
/usr/lib/.build-id/4a/99e5d711e64184b60a7c34a54c7b62b4a55ba1
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service # nginx 服务启停
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx # nginx 二进制文件,可执行命令,调用控制 nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.28.0
/usr/share/doc/nginx-1.28.0/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx # nginx 默认存放网站源码的位置
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx # 日志文件存储目录

2. 配置文件

2.1 nginx.conf 配置解析

2.1.1 nginx.conf 配置文件的结构

# 全局配置
...# events 模块:nginx 服务本身的配置
events {...
}# http 模块:处理用户请求中的报文信息
http {
...# server 模块:配置一个具体的网站的响应操作server {...# location:匹配 URIlocation {...}}server {...}
}

2.1.2 全局配置

user  nginx; # 定义 Nginx 运行的用户和用户组
worker_processes  auto; # Nginx进程数,建议设置为等于CPU总核心数

说明:nginx 服务的进程分为 master 进程和 worker 进程

  • master process 不负责处理客户端连接请求,负责对 worker process 的监管,而 worker process 负责处理客户端请求。
  • Nginx 支持热加载和热升级,比如更新了配置文件后执行 reload 命令,master 会开出一个新进程去读取更新过的配置文件,而 worker 进程继续保持从旧请求的连接,直到旧进程死亡,新进程会与新请求连接。master process 由 root 启动,worker process 由设置的启动用户启动,权限较小。
$ ps -ef | grep nginx
root       29533       1  0 11:05 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx      29534   29533  0 11:05 ?        00:00:00 nginx: worker process
nginx      29535   29533  0 11:05 ?        00:00:00 nginx: worker process
nginx      29536   29533  0 11:05 ?        00:00:00 nginx: worker process
nginx      29537   29533  0 11:05 ?        00:00:00 nginx: worker process
nginx      29538   29533  0 11:05 ?        00:00:00 nginx: worker process
nginx      29539   29533  0 11:05 ?        00:00:00 nginx: worker process
nginx      29540   29533  0 11:05 ?        00:00:00 nginx: worker process
nginx      29541   29533  0 11:05 ?        00:00:00 nginx: worker process
error_log  /var/log/nginx/error.log notice; # 全局错误日志文件和日志打印级别,[ debug | info | notice | warn | error | crit ]
pid        /run/nginx.pid; # 进程 ID 文件

2.1.3 events 模块下的一些配置及其意义

# 参考事件模型:use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]
# epoll 模型是 Linux 2.6 以上版本内核中的高性能网络 I/O 模型
# 如果跑在 FreeBSD 上面,就用 kqueue 模型
use epoll;# 单个进程最大连接数(最大连接数 = 连接数 * 进程数)
# 假设 worker_processes 为 8
# 系统可以打开的最大文件数和内存大小成正比
# 查看自己的系统可以打开的最大文件数 cat /proc/sys/fs/file-max :97318
# 并发连接总数要小于系统可以打开的文件总数,这样就在操作系统可以承受的范围之内
# 假设选择最大连接数为 80000
# 在设置了反向代理的情况下,根据经验,最大连接数应该再除以 4,就是 20000
# 所以单个进程最大连接数为 20000/8 = 2500
# 同时应该调整系统的单个进程可以打开的文件数
# 使用 ulimit -a 查看到 open file = 1024
# 应该调整系统的单个进程最大打开文件数(该数值 * 进程数<=97318)
# 调整方法:ulimit -SHn 10000 :把当前 shell 及其子进程的最大文件描述符数 软限制和硬限制都设为 10000
worker_connections  1024;

2.1.4 http 模块下的一些配置及其意义

# 引用文件中的内容,文件扩展名与文件类型映射表
include       /etc/nginx/mime.types;# 默认文件类型,当 nginx 无法识别当前访问页面内容时,触发下载动作
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 指令指定 nginx 是否调用s endfile 函数来输出文件,对于普通应用设为 on
# 如果用来进行下载等应用,磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载。
# 注意:如果图片显示不正常把这个改成off,原理,比如 Nginx 接受用户对某文件的请求,nginx 不能直接读取磁盘的内容,需要经过内核的调用,
# nginx 告诉内核需要读取 x 文件,内核会读取 x 文件到内核的内存中,在把这个文件 copy 到 nginx 的内存堆中,
# nginx 得知数据已经准备好,会再把这个文件发给内核,内核切片之后发送给用户。
# 当并发数过大时太耗费资源,所以这个选项的存在是为了减少文件在两个内存之间的 copy,提高效率。
sendfile        on; # 长连接超时时间,单位是秒(与 keeplived 软件无关),建立 TCP 连接后,65 秒没有请求动作,就断开连接
keepalive_timeout  65;# 开启 gzip 压缩输出
#gzip  on;# 引用其他配置文件
include /etc/nginx/conf.d/*.conf;# 设置编码字符集
charset utf-8;

2.2 子配置文件

比如:/etc/nginx/conf.d/default.conf

2.2.1 server 模块下的一些配置及其意义

# 监听的 IP 和端口
listen       80;
# 设置服务的域名
server_name  www.bbb.com; # location 后配置访问的 uri
# http://www.bbb.com:80/update/id=1 这是一个 url
# 其中的 /update/id=1 是 uri
# location / 意味着反问 http://www.bbb.com:80 就会读取此处的配置
location / {# 网页文件存放的目录root   /opt;# 默认首页文件,顺序从小到右,如果找不到 index.html,则 index.htm 为首页index index.html index.htm;# 开启目录列表访问,适合下载服务器,默认关闭。autoindex on;
}

3. 编写配置文件的注意事项

  • 注意缩进与对齐
  • 每个配置必须以;结尾
  • 确保配置文件中引用的目录或者文件要存在

4. 检查配置命令

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

事倍功半是蠢蛋57 typora相对路径图片上传到github

3️⃣ Typora 中设置图片自动复制(推荐) 打开 Typora → 文件(File) → 偏好设置(Preferences) → 图像(Images): 插入图片时:选择 “复制图片到指定路径” 指定路径:./images 插入时使用:相对路径 以后你在 Typ…

Nginx部署星益小游戏平台(静态页面)

Nginx部署星益小游戏平台(静态页面)1. 星益小游戏平台部署 源码下载:https://c1026.dmpdmp.com/e01306e2fdcd92aac114784572ec6e20/68a424b6/2019/08/17/f1aac2083a4d2e76196e57e68aed173f.zip?fn=%E6%98%9F%E7%9B…

hadoop应用遇到的问题

当遇到如下问题,大致是安装包有问题,需要重新下载安装包,但是直接用命令行下载需要十个小时,这边在widows上下载好在传送到虚拟机 接着按照以下步骤 结合你当前hdfs命令功能受限的问题,以下是彻底修复Hadoop环境的…

企业级Nginx安装部署

企业级Nginx安装部署1. Nginx 安装方式编译安装:使用源码,根据企业业务需求,需要什么功能,编译时添加什么模块,但是安装过程较为繁琐 自动化安装:配置好安装源,直接通过自动化工具安装即可 二进制安装:解压即用…

2025 年 10 月门窗十大品牌综合实力权威推荐榜单,聚焦产能、专利与环保的实力品牌深度解析

2025 年 10 月门窗十大品牌综合实力权威推荐榜单由中国建筑金属结构协会、全国工商联家具装饰业商会联合发布。本次榜单以 “产能保障 + 专利技术 + 环保标准” 为核心评估体系,突破传统单一性能评选局限:产能维度考…

以“听”为基,以“做”为翼

原文:Scalers:大学生上课为什么一定要认真听讲? https://www.scalerstalk.com/816-attention 读《大学生上课为什么一定要认真听讲?》,我对课堂学习的重要性有了更为深刻的体悟。 课堂是知识传递的核心阵地,老师…

序列密码基本模型

随机序列 基本概念 https://www.cnblogs.com/luminescence/p/18938331 最终周期序列 设\(\{s_i\}^{\infty}_{i=1}\)是一条序列,假如存在正整数\(t\)和\(r\),使得对于任意\(i>=t\)都有\(s_{i+r} = s_i\) 则最小整数…

企业级Web应用及Nginx介绍

企业级Web应用及Nginx介绍1. Nginx 简介 Nginx("engine x")是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以…

2025 年 10 月门窗十大品牌综合实力权威推荐榜单,精准检测与稳定性能兼具的行业优选解析

2025 年 10 月门窗十大品牌综合实力权威推荐榜单由中国建筑金属结构协会、全国工商联家具装饰业商会联合发布。本次榜单以 “精准检测认证 + 长期稳定性能” 为核心评估逻辑,突破传统评选单一性:检测维度严格执行《铝…

11种排序算法的Python代码实现

一、算法信息直接插入排序 O(n^2),O(1),稳定 折半插入排序 O(n^2),O(1),稳定 希尔排序 时间复杂度与增量序列有关,O(1) 冒泡排序 O(n^2),O(1),稳定 快速排序 O(nlogn),O(1),不稳定 简单选择排序 O(n^2),O(1),不稳定 堆…

解码Linux文件IO之中文字库原理与应用

中文字库核心概念 在嵌入式项目中显示汉字,需解决 “计算机如何存储和识别汉字” 的问题 —— 早期 ANSI 字符集仅收录 256 个字符(无中文),因此中国制定了GB2312 简体中文字符集,成为嵌入式中文显示的核心标准。…

完整教程:突破NER性能瓶颈:BERT与LLM协同的混合架构实践

完整教程:突破NER性能瓶颈:BERT与LLM协同的混合架构实践2025-10-26 15:00 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

使用EasyBlogImageForTypora将Typora上传图床改为博客园——2025/10/26最新

使用Typora写作,图片即时同步到博客网站,无需第三方图床,写完可直接粘贴。支持网络图片上传。目前的使用方法和之前的教程有部分差异,所以重新写一篇使用说明 安装 EasyBlogImageForTypora 下载程序: https://git…

AVCodecContext,AVFormatContext区别

AVCodecContext,AVFormatContext区别1.AVFormatContext: 容器/流级别 核心信息: 封装格式(如.mp4,.mkv,.flv) 流的数量和类型 元数据(Metadata,如作者标题) 时长,比特率 I/O上下文(用于读写数据) 2.AVCodecCon…

题解:P5853 [USACO19DEC] Tree Depth P

题意:对于逆序对数为 \(k\) 的长为 \(n\) 的排列,建出笛卡尔树,求对于每个点 \(i\) 在所有树中的深度之和。 做法: 首先不考虑笛卡尔树的事情,我们只算满足条件的排列个数,这个是经典的可以 \(O(n^3)\) 解决的问…

2025 年 10 月门窗十大品牌综合实力权威推荐榜单,聚焦高端定制需求与全案交付能力

2025 年 10 月门窗十大品牌综合实力权威推荐榜单由中国建筑金属结构协会、全国工商联家具装饰业商会联合发布。本次榜单针对高端市场需求,以 “高端定制 + 全案交付” 为核心评选维度,突破传统评选框架:定制维度评估…

idea或pycharm工具报python packaging tools not found. install packaging tools

这时候,我们找到需要添加的解释器的位置,我这里是以自己添加的为例(位置是:D:\AdvancedSoftware\python3.13.2\install),点击进入这个目录,然后在目录栏输入cmd,并回车进入命令终端打开cmd窗口输入命令: 01:…

力扣 第473场周赛(A~D)

力扣 第473场周赛(A~D)$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");A:3726. 移除十进制表示中的所有零简单题,转str后去掉所有0。1 class Solution: 2…

Java学习与工作汇报总结

一、学习与工作概况 过去一年中,我系统学习了Java核心技术,并参与了多个项目开发实践。通过理论学习和实际应用,掌握了Java面向对象编程、集合框架、多线程、IO流等核心知识,同时熟悉了Spring Boot、MyBatis等主流…

Alibaba Cloud Linux 4 镜像备份到自己的 OSS 中,并同时使用该镜像部署

Alibaba Cloud Linux 4 镜像备份到自己的 OSS 中,并同时使用该镜像部署使用 OSS 直接存储镜像文件 #!/bin/bash# backup-to-oss.sh - 镜像备份到 OSS IMAGE_NAME="portainer/portainer-ce:latest"LOCAL_TAR=…