当前位置: 首页 > article >正文

Nginx 的配置文件

核心概念:

  1. 指令 (Directives): 配置文件的基本构建块。每条指令以分号 ; 结束。指令可以设置参数(如 worker_processes auto;)。

  2. 上下文 (Contexts): 指令被组织在特定的块(用花括号 {} 包围)中,称为上下文。上下文定义了指令的作用范围,并可以嵌套。不同上下文中的指令可以继承或覆盖外层上下文的值。

  3. 继承性: 内层上下文中的指令可以继承外层上下文的值(如果内层没有显式设置该指令)。内层指令的设置会覆盖外层指令的设置。

主要配置文件结构:

一个典型的 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 域套接字}
}
http://www.lryc.cn/news/2398946.html

相关文章:

  • Redis:安装与常用命令
  • [原创](Windows使用技巧): Windwos11如何设置局域网共享访问? (多图详解)
  • Mac 芯片系列 安装cocoapod 教程
  • 智启未来:AI重构制造业供应链的五大革命性突破
  • Linux进程间通信----简易进程池实现
  • 解锁Java多级缓存:性能飞升的秘密武器
  • (纳芯微)NCA9548- DTSXR 具有复位功能的八通道 I²C 开关、所有I/O端子均可承受5.5V输入电压
  • 013旅游网站设计技术详解:打造一站式旅游服务平台
  • 2024 CKA模拟系统制作 | Step-By-Step | 12、题目搭建-创建多容器Pod
  • 优化 Spring Boot API 性能:利用 GZIP 压缩处理大型有效载荷
  • PostgreSQL 修改表结构卡住不动
  • 【C盘瘦身】给DevEco Studio中HarmonyOSEmulator(鸿蒙模拟器)换个地方,一键移动给C盘瘦身
  • AutoCompose - 携程自动编排【开源】
  • mybatis和hibernate区别
  • ORACLE 缺失 OracleDBConsoleorcl服务导致https://xxx:port/em 不能访问
  • unix/linux source 命令,其历史争议、兼容性、生态、未来展望
  • day42 简单CNN
  • VScode自动添加指定内容
  • Ubuntu 22.04 安装 Nacos 记录
  • 终极陷阱:Java序列化漏洞的内爆原理与防御体系重建
  • Git 中移除已追踪的文件
  • 相机--RGBD相机
  • Flask中secret_key设置解析
  • 事件不触发、交互失效?基于 WebDebugX 的移动端事件调试实战总结
  • 记一次idea中lombok无法使用的解决方案
  • 【Redis】笔记|第7节|大厂生产级Redis高并发分布式锁实战(二)
  • WebRTC中sdp多媒体会话协议报文详细解读
  • 贪心算法应用:硬币找零问题详解
  • 深入理解 x86 汇编中的重复前缀:REP、REPZ/REPE、REPNZ/REPNE(进阶详解版)
  • 计算机网络全维度解析:架构协议、关键设备、安全机制与新兴技术深度融合