nginx目录结构和配置文件
nginx目录结构
[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp # POST 大文件暂存目录
├── conf # Nginx所有配置文件的目录
│ ├── fastcgi.conf # fastcgi相关参数的配置文件
│ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件
│ ├── 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相关参数文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp # fastcgi临时数据目录
├── html # Nginx默认站点目录
│ ├── 50x.html # 错误页面优雅替代显示文件,例如出现502错误时会调用此页面
│ └── index.html # 默认的首页文件
├── logs # Nginx日志目录
│ ├── access.log # 访问日志文件
│ ├── error.log # 错误日志文件
│ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp # 临时目录
├── sbin # Nginx 可执行文件目录
│ └── nginx # Nginx 二进制可执行程序
├── scgi_temp # 临时目录
└── uwsgi_temp # 临时目录
配置文件结构
Nginx 的配置文件通常是 /etc/nginx/nginx.conf,它采用分块的结构,主要包括以下几个部分:
示例配置文件
# 全局块:配置全局参数
user www-data; # 运行 Nginx 的用户
worker_processes auto; # 工作进程数,auto 表示根据 CPU 核心数自动设置
error_log /var/log/nginx/error.log; # 错误日志路径# 事件块:配置事件驱动模型的参数
events {worker_connections 1024; # 每个工作进程的最大连接数
}# HTTP 块:配置 HTTP 相关的参数
http {include mime.types; # 包含 MIME 类型配置文件default_type application/octet-stream; # 默认的 MIME 类型sendfile on; # 启用高效文件传输模式keepalive_timeout 65; # 客户端连接保持时间(秒)# Server 块:配置虚拟主机server {listen 80; # 监听 80 端口server_name example.com; # 服务器域名# Location 块:配置请求的 URI 匹配规则location / {root /var/www/html; # 静态文件的根目录index index.html; # 默认首页文件}}
}
全局块:配置 Nginx 的全局参数,如运行用户、工作进程数、错误日志等。
事件块:配置事件驱动模型的参数,如每个工作进程的最大连接数。
HTTP 块:配置 HTTP 相关的参数,如 MIME 类型、文件传输模式、连接保持时间等。
Server 块:配置虚拟主机,定义监听的端口和域名。
Location 块:配置请求的 URI 匹配规则和处理逻辑。
另外一个案例
worker_processes 1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个events {#单个进程最大连接数(最大连接数=连接数*进程数)#根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。worker_connections 1024;
}http {#文件扩展名与文件类型映射表(是conf目录下的一个文件)include mime.types;#默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输default_type application/octet-stream;#sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。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;#/50x.html文件所在位置location = /50x.html {root html;}}}
静态文件服务
Nginx 可以高效地提供静态文件服务
server {listen 80; # 监听 80 端口server_name example.com; # 服务器域名location / {root /var/www/html; # 静态文件的根目录index index.html; # 默认首页文件}location /images/ {root /var/www; # 图片文件的根目录}
}
root /var/www/html;:指定静态文件的根目录为 /var/www/html。
index index.html;:当访问根路径时,默认返回 index.html 文件。
location /images/:匹配以 /images/ 开头的请求,从 /var/www/images 目录提供文件。
反向代理
Nginx 可以作为反向代理服务器,将客户端请求转发到后端服务器。
server {listen 80; # 监听 80 端口server_name example.com; # 服务器域名location / {proxy_pass http://localhost:8080; # 将请求转发到本地的 8080 端口proxy_set_header Host $host; # 设置请求头proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
proxy_pass http://localhost:8080;:将请求转发到本地的 8080 端口。
proxy_set_header:设置转发请求的头信息,确保后端服务器能获取正确的客户端信息。
负载均衡
Nginx 支持多种负载均衡算法,可以将请求分发到多个后端服务器。
# 定义后端服务器组
upstream backend {server backend1.example.com; # 后端服务器 1server backend2.example.com; # 后端服务器 2server backend3.example.com; # 后端服务器 3
}server {listen 80; # 监听 80 端口server_name example.com; # 服务器域名location / {proxy_pass http://backend; # 将请求转发到后端服务器组}
}
upstream backend:定义一组后端服务器。proxy_pass http://backend;:将请求转发到 backend 服务器组。Nginx 默认使用轮询(Round Robin)算法分发请求。
动静分离
动静分离 是一种常见的优化策略,将动态请求(如 API、PHP、Java 等)和静态资源(如
HTML、CSS、JS、图片等)分开处理。Nginx 可以通过配置实现动静分离,从而提高服务器的性能和可维护性。
动静分离的原理
静态资源:由 Nginx 直接处理并返回给客户端,无需经过后端应用服务器。
动态请求:由 Nginx 转发到后端应用服务器(如 Tomcat、Node.js、PHP-FPM 等)处理。
Nginx 动静分离配置
server {listen 80; # 监听 80 端口server_name example.com; # 服务器域名# 静态资源处理location /static/ {root /var/www; # 静态资源的根目录expires 7d; # 设置缓存过期时间为 7 天}# 动态请求处理location / {proxy_pass http://localhost:8080; # 将动态请求转发到后端服务器proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 其他静态资源(如图片、CSS、JS)location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ {root /var/www/static; # 静态资源的根目录expires 30d; # 设置缓存过期时间为 30 天}
}
配置详解
(1)静态资源处理
location /static/:匹配以 /static/ 开头的请求。root /var/www;:静态资源的根目录为 /var/www,因此实际文件路径为 /var/www/static/。expires 7d;:设置静态资源的缓存过期时间为 7 天,减少客户端请求。location ~* \.(jpg|jpeg|png|gif|css|js|ico)$:使用正则表达式匹配常见的静态资源文件(如图片、CSS、JS 等)。root /var/www/static;:静态资源的根目录为 /var/www/static。expires 30d;:设置缓存过期时间为 30 天。
动态请求处理
location /:匹配所有请求。proxy_pass http://localhost:8080;:将请求转发到后端服务器 localhost:8080。proxy_set_header:设置转发请求的头信息,确保后端服务器能获取正确的客户端信息。
性能优化
# 全局块
user www-data;
worker_processes auto; # 根据 CPU 核心数自动设置工作进程数
worker_rlimit_nofile 100000; # 每个工作进程的文件描述符限制# 事件块
events {worker_connections 4096; # 每个工作进程的最大连接数multi_accept on; # 同时接受多个连接use epoll; # 使用 epoll 事件驱动模型(Linux 专用)
}# HTTP 块
http {include mime.types;default_type application/octet-stream;sendfile on; # 启用高效文件传输模式tcp_nopush on; # 减少网络报文段的数量tcp_nodelay on; # 禁用 Nagle 算法,提高响应速度keepalive_timeout 65; # 客户端连接保持时间gzip on; # 启用 Gzip 压缩gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 压缩的文件类型
}
worker_processes auto;:根据 CPU 核心数自动设置工作进程数。worker_connections 4096;:每个工作进程可以处理的最大连接数。sendfile on;:启用高效文件传输模式,减少文件复制的开销。gzip on;:启用 Gzip 压缩,减少传输数据量。tcp_nopush on; 和 tcp_nodelay on;:优化 TCP 传输性能。
总结
配置文件结构:Nginx 的配置文件分为全局块、事件块、HTTP 块、Server 块和 Location 块。
静态文件服务:通过 root 和 index 指令提供静态文件服务。
反向代理:通过 proxy_pass 将请求转发到后端服务器。
负载均衡:通过 upstream 定义后端服务器组,并使用 proxy_pass 分发请求。
性能优化:通过调整工作进程数、连接数、启用 Gzip 压缩等方式提升性能。
相关文章:

nginx目录结构和配置文件
nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参…...

MacBook Pro(M1芯片)Qt环境配置
MacBook Pro(M1芯片)Qt环境配置 1、准备 试图写一个跨平台的桌面应用,此时想到了使用Qt,于是开始了搭建开发环境~ 在M1芯片的电脑上安装,使用brew工具比较方便 Apple Silicon(ARM/M1…...

Kotlin 使用 Springboot 反射执行方法并自动传参
在使用反射的时候,执行方法的时候在想如果Springboot 能对需要执行的反射方法的参数自动注入就好了。所以就有了下文。 知识点 获取上下文通过上下文获取 Bean通过上下文创建一个对象,该对象所需的参数由 Springboot 自己注入 创建参数 因为需要对反…...

网络安全技术简介
网络安全技术简介 随着信息技术的迅猛发展,互联网已经成为人们日常生活和工作中不可或缺的一部分。与此同时,网络安全问题也日益凸显,成为全球关注的焦点。无论是个人隐私泄露、企业数据被盗取还是国家信息安全受到威胁,都与网络…...

nginx 报错404
404:服务器无法正常解析页面,大多是配置问题(路径配置错误)、或访问页面不存在 如果你也是用nginx来转接服务的话,那你有可能碰到过这种情况,当你启动服务后,在本地打开页面,发现404,然后你找遍…...

【1.安装ubuntu22.04】
目录 参考文章链接电脑参数安装过程准备查看/更改引导方式查看/更改磁盘的分区格式关闭BitLocker加密压缩分区关闭独显直连制作Ubuntu安装盘下载镜像制作启动盘 进入BIOS模式进行设置Secure Boot引导项顺序try or install ubuntu 进入安装分区启动引导器个人信息和重启 参考文章…...

【设计模式-行为型】备忘录模式
一、什么是备忘录模式 来到备忘录模式了,这个模式我感觉相对简单一些,就是备份,或者快照。跟前面一样为了加深理解,我们引入一个电影情结来说明啥是备忘录模式,以来加深大家对备忘录模式的认识。那么,在电影…...

Linux环境下的Java项目部署技巧:安装 Mysql
查看 myslq 是否安装: rpm -qa|grep mysql 如果已经安装,可执行命令来删除软件包: rpm -e --nodeps 包名 下载 repo 源: http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm 执行命令安装 rpm 源(根据下载的…...

云原生(五十三) | SQL查询操作
文章目录 SQL查询操作 一、数据库DDL操作 1、登陆数据库 2、创建DB数据库 二、数据表DDL操作 1、创建数据表 2、RDS中SQL查询操作 三、SQL查询操作 1、RDS中SQL查询操作 SQL查询操作 一、数据库DDL操作 1、登陆数据库 2、创建DB数据库 创建一个普通账号,…...

【前端知识】常用CSS样式举例
文章目录 一、Flex盒子布局1. Flexbox 的基本概念2. Flex 容器的属性2.1 display2.2 flex-direction2.3 flex-wrap2.4 justify-content2.5 align-items2.6 align-content 3. Flex 项目的属性3.1 order3.2 flex-grow3.3 flex-shrink3.4 flex-basis3.5 flex3.6 align-self 4. 示例…...

硕成C语言1笔记
硕成C语言1笔记 这一节内容主要讲了进制转换 进制转换:十进制转其他进制用短除法,最后逆序输出十六进制的15表示的是F,255的十六进制是:FF其他进制转十进制:按权展开,从n的0次方开始,一直到最…...

[SAP ABAP] Debug Skill
SAP ABAP Debug相关资料 [SAP ABAP] DEBUG ABAP程序中的循环语句 [SAP ABAP] 静态断点的使用 [SAP ABAP] 在ABAP Debugger调试器中设置断点 [SAP ABAP] SE11 / SE16N 修改标准表(慎用)...

理解 InnoDB 如何处理崩溃恢复
在数据库领域,数据的一致性与可靠性至关重要。InnoDB 存储引擎的崩溃恢复机制是保障数据安全的核心,其中 Doublewrite Buffer 和 Redo Log 发挥着关键作用。下面,我们将详细探讨 InnoDB 从写入到崩溃恢复的全过程。 一、写入流程 修改页面&…...

UE5 蓝图学习计划 - Day 8:触发器与交互事件
在游戏开发中,触发器(Trigger) 和 交互事件(Interaction Events) 是实现游戏动态交互的关键。例如,当角色接近一扇门时,它可以自动打开,或者当玩家进入特定区域时,游戏触…...

根据接口规范封装网络请求和全局状态管理
封装通用页面接口网络请求 axios (request)封装见:https://blog.csdn.net/XiugongHao/article/details/143449863 /*** 封装通用页面的增删改查接口*/ export function postPageListData(pageName: string, queryInfo: any) {return request.…...

Unet 改进:在encoder和decoder间加入TransformerBlock
目录 1. TransformerBlock 2. Unet 改进 3. 完整代码 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. TransformerBlock TransformerBlock是Transformer模型架构的基本组件,广泛应用于机器翻译、文本摘要和情感分析等自然语言处理任务…...

work-stealing算法 ForkJoinPool
专栏系列文章地址:https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标: 重点是通过例子程序理解work-stealing算法原理 目录 work-stealing算法算法原理和优缺点介绍使用场景work-stealing例子代码 ForkJoinPoolnew ForkJoinPool(…...

DeepSeek Janus-Pro:多模态AI模型的突破与创新
近年来,人工智能领域取得了显著的进展,尤其是在多模态模型(Multimodal Models)方面。多模态模型能够同时处理和理解文本、图像等多种类型的数据,极大地扩展了AI的应用场景。DeepSeek(DeepSeek-V3 深度剖析:…...

STM32-时钟树
STM32-时钟树 时钟 时钟...

hot100_21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2 [] 输出:[…...

代码讲解系列-CV(一)——CV基础框架
文章目录 一、环境配置IDE选择一套完整复现安装自定义cuda算子 二、Linux基础文件和目录操作查看显卡状态压缩和解压 三、常用工具和pipeline远程文件工具版本管理代码辅助工具 随手记录下一个晚课 一、环境配置 pytorch是AI框架用的很多,或者 其他是国内的框架 an…...

C++ Primer 标准库类型string
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...

计算机网络安全与运维的关键 —— 常用端口全解析
目录 前言 常见端口分类及用途 20 端口(FTP 数据传输) 21 端口(FTP 消息控制) 22 端口(SSH) 23 端口(Telnet) 25 端口(SMTP) 53 端口(DNS&…...

Vue.js 的介绍与组件开发初步
Vue.js 的介绍与组件开发初步 Vue.js 的介绍与组件开发初步引言第一部分:Vue.js 基础入门1.1 什么是 Vue.js?1.2 搭建 Vue.js 开发环境安装 Node.js 和 npm安装 Vue CLI创建新项目运行示例 1.3 第一个 Vue.js 示例 第二部分:Vue.js 组件开发基…...

【仿12306项目】通过加“锁”,解决高并发抢票的超卖问题
文章目录 一. 测试工具二. 超卖现象演示三. 原因分析四. 解决办法方法一:加synchronized锁1. 单个服务节点情况2. 增加服务器节点,分布式环境synchronized失效演示 方法二:使用Redis分布式锁锁解决超卖问题1. 添加Redis分布式锁2. 结果 方法三…...

wow-agent---task4 MetaGPT初体验
先说坑: 1.使用git clone模式安装metagpt 2.模型尽量使用在线模型或本地高参数模型。 这里使用python3.10.11调试成功 一,安装 安装 | MetaGPT,参考这里的以开发模型进行安装 git clone https://github.com/geekan/MetaGPT.git cd /you…...

MVANet——小范围内捕捉高分辨率细节而在大范围内不损失精度的强大的背景消除模型
一、概述 前景提取(背景去除)是现代计算机视觉的关键挑战之一,在各种应用中的重要性与日俱增。在图像编辑和视频制作中有效地去除背景不仅能提高美学价值,还能提高工作流程的效率。在要求精确度的领域,如医学图像分析…...

94,【2】buuctf web [安洵杯 2019]easy_serialize_php
进入靶场 可以查看源代码 <?php // 从 GET 请求中获取名为 f 的参数值,并赋值给变量 $function // 符号用于抑制可能出现的错误信息 $function $_GET[f];// 定义一个名为 filter 的函数,用于过滤字符串中的敏感词汇 function filter($img) {// 定义…...

LabVIEW如何有效地进行数据采集?
数据采集(DAQ)是许多工程项目中的核心环节,无论是测试、监控还是控制系统,准确、高效的数据采集都是至关重要的。LabVIEW作为一个图形化编程环境,提供了丰富的功能来实现数据采集,确保数据的实时性与可靠性…...

6 [新一代Github投毒针对网络安全人员钓鱼]
0x01 前言 在Github上APT组织“海莲花”发布存在后门的提权BOF,通过该项目针对网络安全从业人员进行钓鱼。不过其实早在几年前就已经有人对Visual Studio项目恶意利用进行过研究,所以投毒的手法也不算是新的技术。但这次国内有大量的安全从业者转发该钓…...