Nginx 的配置文件
核心概念:
-
指令 (Directives): 配置文件的基本构建块。每条指令以分号
;
结束。指令可以设置参数(如worker_processes auto;
)。 -
上下文 (Contexts): 指令被组织在特定的块(用花括号
{}
包围)中,称为上下文。上下文定义了指令的作用范围,并可以嵌套。不同上下文中的指令可以继承或覆盖外层上下文的值。 -
继承性: 内层上下文中的指令可以继承外层上下文的值(如果内层没有显式设置该指令)。内层指令的设置会覆盖外层指令的设置。
主要配置文件结构:
一个典型的 nginx.conf
文件遵循以下层次结构:
# 全局上下文 (Main Context) - 影响整个 Nginx 进程 user nginx; # 运行 worker 进程的用户和组 worker_processes auto; # 工作进程数,通常设为 CPU 核心数或 'auto' error_log /var/log/nginx/error.log warn; # 错误日志路径和级别 (debug, info, notice, warn, error, crit, alert, emerg) pid /run/nginx.pid; # 存储主进程 ID 的文件# 事件处理模型配置 (Events Context) - 配置网络连接处理 events {worker_connections 1024; # 每个工作进程的最大并发连接数(直接影响最大并发量)# multi_accept on; # 是否一次接受所有新连接 (默认 off)# use epoll; # 指定高效的事件模型 (Linux 下推荐 epoll) }# HTTP 核心配置 (HTTP Context) - 所有 HTTP 相关配置的根上下文 http {# 基础配置include /etc/nginx/mime.types; # 包含 MIME 类型定义文件default_type application/octet-stream; # 默认 MIME 类型# 日志格式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; # 启用高效文件传输 (sendfile 系统调用)tcp_nopush on; # 在 sendfile 开启时启用,优化网络包发送tcp_nodelay on; # 禁用 Nagle 算法,降低延迟keepalive_timeout 65; # 客户端保持连接的超时时间(秒)types_hash_max_size 2048; # 类型哈希表大小,影响性能# Gzip 压缩gzip on; # 启用 Gzip 压缩gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 压缩的文件类型gzip_min_length 1024; # 最小压缩文件大小gzip_comp_level 2; # 压缩级别 (1-9, 越高压缩率越高但越耗 CPU)gzip_vary on; # 根据客户端是否支持 Gzip 添加 Vary 头# 虚拟主机配置 (Server Context) - 定义一个网站或服务server {listen 80; # 监听端口 (常用 80 或 443)server_name example.com www.example.com; # 服务器名称(域名),用于区分不同虚拟主机# 根目录和索引文件root /var/www/example.com; # 网站文件的根目录index index.html index.htm; # 默认索引文件名(按顺序查找)# 位置块 (Location Context) - 匹配特定 URI 路径,进行精细化配置location / {# 尝试访问文件 $uri, 找不到则尝试目录 $uri/, 再找不到则返回 404try_files $uri $uri/ =404;}# 处理静态文件 (如图片、CSS、JS) 的 location 示例 (通常有性能优化)location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d; # 设置浏览器缓存过期时间 (30天)add_header Cache-Control "public"; # 添加缓存控制头access_log off; # 可选:关闭此 location 的访问日志以减少日志量}# 反向代理配置示例 (将请求转发给后端应用服务器)location /api/ {proxy_pass http://backend_server; # 定义在 upstream 块中的后端服务器组名或具体地址proxy_set_header Host $host; # 将原始请求的 Host 头发给后端proxy_set_header X-Real-IP $remote_addr; # 将客户端真实 IP 传给后端proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链信息proxy_set_header X-Forwarded-Proto $scheme; # 传递原始请求协议 (http/https)}# 错误页面自定义error_page 404 /404.html; # 自定义 404 错误页面location = /404.html {internal; # 该页面只能由 Nginx 内部重定向访问root /usr/share/nginx/html; # 错误页面的根目录}error_page 500 502 503 504 /50x.html; # 自定义 5xx 错误页面location = /50x.html {internal;root /usr/share/nginx/html;}}# HTTPS 服务器配置示例 (在 server 块内)server {listen 443 ssl http2; # 监听 443 端口,启用 SSL/TLS 和 HTTP/2server_name secure.example.com;# SSL 证书和密钥路径ssl_certificate /etc/nginx/ssl/example.com.crt; # 证书文件 (通常包含完整链)ssl_certificate_key /etc/nginx/ssl/example.com.key; # 私钥文件# SSL 协议和加密套件配置 (强调安全性和兼容性)ssl_protocols TLSv1.2 TLSv1.3; # 启用 TLS 1.2 和 1.3 (禁用不安全的 TLSv1, TLSv1.1)ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...'; # 推荐的安全加密套件列表ssl_prefer_server_ciphers on; # 优先使用服务器端提供的加密套件ssl_session_cache shared:SSL:10m; # 配置 SSL 会话缓存以提高性能ssl_session_timeout 10m; # SSL 会话超时时间# 其他配置 (root, location 等) 和 HTTP 服务器类似...# 通常会将 HTTP 请求重定向到 HTTPS}# 负载均衡配置 (Upstream Context) - 定义一组后端服务器upstream backend_server {# 负载均衡算法 (默认轮询 round-robin)# least_conn; # 最少连接数# ip_hash; # 基于客户端 IP 的哈希 (用于会话保持)# 定义后端服务器server backend1.example.com:8080 weight=3; # 服务器地址:端口, weight 设置权重 (越高被分配请求越多)server backend2.example.com:8080; # 默认权重为 1server backup.example.com:8080 backup; # 标记为备份服务器,主服务器不可用时才启用# server unix:/tmp/backend.sock; # 也可以使用 Unix 域套接字} }
相关文章:
Nginx 的配置文件
核心概念: 指令 (Directives): 配置文件的基本构建块。每条指令以分号 ; 结束。指令可以设置参数(如 worker_processes auto;)。 上下文 (Contexts): 指令被组织在特定的块(用花括号 {} 包围)中,称为上下文…...

Redis:安装与常用命令
🌈 个人主页:Zfox_ 🔥 系列专栏:Redis 🔥 安装 Redis 使⽤apt安装 apt install redis -y⽀持远程连接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1 为 bind 0.0.0.0 修改 protected-mode yes 为 protected-mo…...
[原创](Windows使用技巧): Windwos11如何设置局域网共享访问? (多图详解)
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...

Mac 芯片系列 安装cocoapod 教程
安装声明: 本人是在搭梯子的环境下安装成功,前提是必须安装好安装homebrew环境。 1.检测rudy的源 2.查看源(目的:检测rudy的源) gem sources - l 3.移除源(目的:移除rudy自带的源) gem sources --remove https://rubygems.org/ 4.更换源(目的:替换成国…...

智启未来:AI重构制造业供应链的五大革命性突破
一、需求预测:让供应链“未卜先知” 1.1 从经验判断到数据预言 传统供应链依赖人工分析历史数据,但面对市场波动、设备突发故障等不确定性,往往反应滞后。AI通过整合工业物联网(IIoT)传感器数据、生产排程、供应商交…...

Linux进程间通信----简易进程池实现
进程池的模拟实现 1.进程池的原理: 是什么 进程池是一种多进程编程模式,核心思想是先创建好一定数量的子进程用作当作资源,这些进程可以帮助完成任务并且重复利用,避免频繁的进程的创建和销毁的开销。 下面我们举例子来帮助理…...

解锁Java多级缓存:性能飞升的秘密武器
一、引言 文末有彩蛋 在当今高并发、低延迟的应用场景中,传统的单级缓存策略往往难以满足性能需求。随着系统规模扩大,数据访问的瓶颈逐渐显现,如何高效管理缓存成为开发者面临的重大挑战。多级缓存架构应运而生,通过分层缓存设…...

(纳芯微)NCA9548- DTSXR 具有复位功能的八通道 I²C 开关、所有I/O端子均可承受5.5V输入电压
深圳市润泽芯电子有限公司 推荐NOVOSENSE(纳芯微)品牌 NCA9548- DTSXR TSSOP-24封装 NCA9548- DTSXR 具有复位功能的八通道 IC 开关、所有I/O端子均可承受5.5V输入电压 产品描述 NCA9548是通过I2C总线控制的八路双向转换开关。 SCL / SDA上行数据分散到八对下行数据或通道。…...

013旅游网站设计技术详解:打造一站式旅游服务平台
旅游网站设计技术详解:打造一站式旅游服务平台 在互联网与旅游业深度融合的时代,旅游网站成为人们规划行程、预订服务的重要工具。一个功能完备的旅游网站,通过用户管理、订单管理等核心模块,实现用户与管理员的高效交互。本文将…...

2024 CKA模拟系统制作 | Step-By-Step | 12、题目搭建-创建多容器Pod
目录 免费获取题库配套 CKA_v1.31_模拟系统 一、题目 二、考点分析 1. 多容器 Pod 的理解 2. YAML 配置规范 3. 镜像版本控制 三、考点详细讲解 1. 多容器 Pod 的工作原理 2. 容器端口冲突处理 3. 资源隔离机制 四、实验环境搭建步骤 总结 免费获取题库配套 CKA_v…...

优化 Spring Boot API 性能:利用 GZIP 压缩处理大型有效载荷
引言 在构建需要处理和传输大量数据的API服务时,响应时间是一个关键的性能指标。一个常见的场景是,即使后端逻辑和数据库查询已得到充分优化,当API端点返回大型数据集(例如,数千条记录的列表)时࿰…...
PostgreSQL 修改表结构卡住不动
[] 查找卡住的进程 ID(PID) -- 查看当前所有数据库连接及进程信息 SELECTpid,usename,query,age(clock_timestamp(), query_start) AS query_duration FROMpg_stat_activity WHEREquery LIKE %ALTER TABLE%; -- 过滤出正在执行 ALTER TABLE 的语句今天遇…...

【C盘瘦身】给DevEco Studio中HarmonyOSEmulator(鸿蒙模拟器)换个地方,一键移动给C盘瘦身
文章目录 一、HarmonyOSEmulator的安装路径二、修改路径 一、HarmonyOSEmulator的安装路径 之前安装了华为的DevEco Studio,当时没注意,后来C盘告急,想着估计是鸿蒙的模拟器占用空间比较大,一检查还真是躺在C盘。路径如下&#x…...
AutoCompose - 携程自动编排【开源】
AutoCompose - 携程自动编排【开源】 AutoCompose是一款单事件驱动(无状态)的流程引擎。使用本框架,能够轻松实现复杂服务的自动化编排【零配置、零编码】,能够显著提高开发维护效率。支持同步编程、异步编程(已支持Co…...
mybatis和hibernate区别
MyBatis 和 Hibernate 都是 Java 生态中主流的持久层框架,但设计理念和适用场景有显著区别。以下是核心对比: 1. 本质区别 特性HibernateMyBatis框架类型全自动 ORM(对象关系映射)框架半自动 SQL 映射框架核心思想对象优先&#…...

ORACLE 缺失 OracleDBConsoleorcl服务导致https://xxx:port/em 不能访问
这个原因是,操作过一下 ORCL的服务配置变更导致的。 再PATH中添加个环境变量,路径如下 管理员权限运行cmd 等待创建完成 大概3分钟 查看服务 点击第一个访问,下图登录后的截图...
unix/linux source 命令,其历史争议、兼容性、生态、未来展望
现在把目光投向unix/linux source命令的历史争议、兼容性、生态和未来展望,这能让我们更全面地理解一个技术点在更广阔的图景中所处的位置。 一、历史争议与设计权衡 虽然 source (或 .) 命令功能强大且不可或缺,但在其发展和使用过程中,也存在一些微妙的争议或设计上的权衡…...
day42 简单CNN
目录 一、从图像分类任务谈起 二、CNN架构解剖实验室 2.1 卷积层:空间特征的魔法师 2.2 归一化层:加速收敛的隐形推手 2.3 激活函数:非线性的灵魂 三、工程实践避坑指南 3.1 数据增强工程 3.2 调度器工程实战 四、典型问题排查手册 …...

VScode自动添加指定内容
在 VS Code 中,可以通过配置 用户代码片段(User Snippets) 或使用 文件模板扩展 来实现新建指定文件类型时自动添加指定内容。以下是具体方法: 方法 1:使用 VS Code 内置的「用户代码片段」 适用场景:适用…...

Ubuntu 22.04 安装 Nacos 记录
Ubuntu 22.04 安装 Nacos 记录 本文记录了在 Ubuntu 22.04 系统上安装 Nacos 的完整过程,适用于本地测试或生产部署的基础搭建。 一、官方资源 官网下载地址:https://nacos.io/download/nacos-server/官网文档:https://nacos.io/docs/lates…...
终极陷阱:Java序列化漏洞的内爆原理与防御体系重建
引言:被遗忘的后门 2019年Equifax公司因Java反序列化漏洞导致1.43亿用户数据泄露,最终以7亿美元达成和解。令人震惊的是,问题源头竟是一个简单的序列化接口: public class UserSession implements Serializable {private String…...
Git 中移除已追踪的文件
你已经成功提交了部分文件到 Git,但 sqlserver/data/ 目录下的一些日志文件(如 .xel 和 machine-key)仍然被追踪或未被忽略。你想 彻底忽略整个 sqlserver/data/* 目录下的所有内容。 ✅ 目标 让 Git 忽略以下路径: sqlserver/d…...

相机--RGBD相机
教程 分类原理和标定 原理 视频总结 双目相机和RGBD相机原理 作用 RGBD相机RGB相机深度; RGB-D相机同时获取两种核心数据:RGB彩色图像和深度图像(Depth Image)。 1. RGB彩色图像 数据格式: 标准三通道矩阵&#…...
Flask中secret_key设置解析
app.secret_key os.urandom(24) 在 Flask 中,app.secret_key os.urandom(24) 这行代码用于生成并设置一个安全的随机密钥(Secret Key),这是 Flask 应用中非常重要的配置之一。以下是详细解析: 1. app.secret_key …...
事件不触发、交互失效?基于 WebDebugX 的移动端事件调试实战总结
在移动端开发中,“点击没反应”“滑动卡住”“长按无效”等事件类问题时常困扰开发者。这类问题不仅和逻辑代码有关,更常见的是出现在浏览器事件模型与设备行为之间的不一致,特别是在 WebView 环境下尤为显著。 本文结合多个真实案例&#x…...

记一次idea中lombok无法使用的解决方案
在注解处理器下,一般 Default 为“启用注解处理”和“从项目类路径获取处理器”,但是我的项目中的为选择“处理器路径”,导致了无法识别lombok,因此,需要改为使用“从项目类路径获取处理器”这个选项。如下图所示&…...
【Redis】笔记|第7节|大厂生产级Redis高并发分布式锁实战(二)
一、Redis主从架构锁失效问题解析 1. 核心问题背景 在Redis主从架构中,分布式锁失效的核心风险源于主从复制的异步特性和主节点故障后的角色切换。即使客户端仅操作主节点写入,主节点宕机时未同步的锁数据可能导致新主节点允许重复加锁。 2. 主从切换…...
WebRTC中sdp多媒体会话协议报文详细解读
sdp介绍 在WebRTC(Web实时通信)中,SDP(Session Description Protocol)是用来描述和协商多媒体会话的协议。它定义了会话的参数和媒体流的信息,如音视频编码格式、传输方式、网络地址等。SDP是WebRTC中一个…...

贪心算法应用:硬币找零问题详解
贪心算法与硬币找零问题详解 贪心算法(Greedy Algorithm)在解决优化问题时表现出简洁高效的特点,尤其适用于特定结构的组合优化问题。本文将用2万字篇幅,深入探讨贪心算法在硬币找零问题中的应用,覆盖算法原理、正确性…...

深入理解 x86 汇编中的重复前缀:REP、REPZ/REPE、REPNZ/REPNE(进阶详解版)
一、重复前缀:串操作的 “循环加速器” 如果你写过汇编代码,一定遇到过需要重复处理大量数据的场景: 复制 1000 字节的内存块比较两个长达 200 字符的字符串在缓冲区中搜索特定的特征值 手动用loop指令编写循环?代码冗长不说&a…...