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

Nginx核心配置

一、看透 Nginx:不止是 “服务器”

1.1 核心优势拆解

Nginx 能成为行业标配,源于其贴合业务需求的技术特性:

  • 高性能底层逻辑:采用 “异步非阻塞 epoll 模型”,一个 Worker 进程可处理数千连接,内存占用仅为 Apache 的 1/5~1/10,支持 5 万 + 并发。
  • 零停机运维:支持热部署(版本升级不重启)、热重载配置(reload 不中断连接),适配 7×24 小时业务场景。
  • 模块化扩展:核心功能精简,通过模块(如 SSL、缓存、负载均衡)按需扩展,避免冗余。
  • 多场景适配:可作为静态服务器、反向代理、负载均衡器,甚至通过 OpenResty 扩展为 API 网关。

1.2 核心应用场景

结合实际业务理解 Nginx 作用:

  1. 静态资源托管:直接处理 HTML、图片、JS 等,通过缓存、Gzip 压缩、防盗链优化性能。
  2. 虚拟主机:单服务器部署多网站(如官网 + 后台系统),通过域名 / 端口区分。
  3. 反向代理与负载均衡:作为前端入口分发请求到后端集群,自动剔除故障节点,避免单点过载。
  4. 安全防护:拦截异常请求(IP 限制、防 SQL 注入、频率控制),降低后端攻击风险。

1.3 工作原理:Master-Worker 分工

Nginx 启动后生成两类进程,分工明确:

  • Master 进程(管理者):读取配置、初始化资源、创建 Worker 进程,接收外界信号(如重启 / 停止)并分发。
  • Worker 进程(执行者):独立处理用户请求,通过 epoll 模型异步处理多连接,单个 Worker 崩溃不影响整体。

例如执行 nginx -s reload 时,Master 先验证新配置,再创建新 Worker 处理新请求,旧 Worker 处理完现有连接后退出,实现 “零中断更新”。

二、Nginx 部署:两种安装方式对比

2.1 yum 安装(快速上手)

适用场景

无需自定义模块、追求快速部署,系统为 CentOS/RHEL。

操作步骤
  1. 安装 EPEL 源(Nginx 不在 CentOS 官方源):
    [root@server ~]# yum install -y epel-release
    
  2. 安装 Nginx:
    [root@server ~]# yum install -y nginx
    
  3. 验证与启动:
    # 查看版本
    [root@server ~]# nginx -v
    # 启动并设为开机自启
    [root@server ~]# systemctl start nginx && systemctl enable nginx
    
  4. 测试:浏览器输入服务器 IP,看到 “Welcome to nginx!” 即成功。

2.2 编译安装(自定义灵活)

适用场景

需启用特定模块(如 SSL)、指定安装路径、追求新版本。

操作步骤
  1. 安装依赖:
    [root@server ~]# yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel
    
  2. 下载源码包(官网稳定版):
    [root@server ~]# wget https://nginx.org/download/nginx-1.24.0.tar.gz
    
  3. 解压并配置编译参数:
    [root@server ~]# tar xf nginx-1.24.0.tar.gz && cd nginx-1.24.0
    [root@server nginx-1.24.0]# ./configure \
    --prefix=/opt/nginx \  # 安装路径
    --with-http_ssl_module \  # 启用 SSL
    --with-http_gzip_static_module  # 启用 Gzip 压缩
    
  4. 编译安装:
    [root@server nginx-1.24.0]# make && make install
    
  5. 命令优化(创建软链接):
    [root@server ~]# ln -s /opt/nginx/sbin/nginx /usr/sbin/
    
  6. 启动验证:
    [root@server ~]# nginx && ps -ef | grep nginx
    

2.3 目录结构对比

目录类型yum 安装路径编译安装路径(/opt/nginx)核心作用
配置文件目录/etc/nginx//opt/nginx/conf/存放 nginx.conf、虚拟主机配置
网站根目录/usr/share/nginx/html//opt/nginx/html/存放静态资源
日志目录/var/log/nginx//opt/nginx/logs/访问日志、错误日志
可执行文件目录/usr/sbin/nginx/opt/nginx/sbin/nginxNginx 命令

三、核心配置:从 “能跑” 到 “好用”

3.1 配置文件层级逻辑

Nginx 配置采用嵌套结构,核心层级:

# 1. 全局块:影响所有进程
user nginx;
worker_processes auto;# 2. events 块:网络连接配置
events {use epoll;worker_connections 10240;
}# 3. http 块:HTTP 协议配置(含多个 server)
http {include mime.types;# 4. server 块:虚拟主机配置(含多个 location)server {listen 80;server_name www.example.com;# 5. location 块:URL 路径匹配location / {root /opt/nginx/html;index index.html;}}
}

3.2 必学关键指令

(1)全局块
  • worker_processes auto;:Worker 数匹配 CPU 核心,避免资源浪费。
  • worker_rlimit_nofile 65535;:单个 Worker 最大文件句柄数,防止 “too many open files”。
(2)events 块
  • use epoll;:Linux 下启用最优 I/O 模型。
  • worker_connections 10240;:单个 Worker 最大并发连接,总并发≈Worker 数 × 此值。
(3)http 块
  • gzip on;:开启 Gzip 压缩,配合参数优化:
    gzip_min_length 1k;
    gzip_types text/css application/javascript image/png;
    
  • log_format main '...';:定义访问日志格式,包含客户端 IP、请求路径等信息。
(4)server 块
  • listen 80;:监听端口(HTTP 80,HTTPS 443)。
  • server_name www.example.com;:绑定域名,支持通配符(如 *.example.com)。
(5)location 块
  • root /opt/nginx/html;:静态资源根目录。
  • proxy_pass http://192.168.1.100:8080;:反向代理到后端服务,配合参数传递真实信息:
    location /api {proxy_pass http://192.168.1.100:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;
    }
    
  • allow/deny:IP 访问控制,如限制内网访问后台:
    location /admin {allow 192.168.1.0/24;deny all;
    }
    

四、实战案例:解决实际业务问题

4.1 案例 1:静态资源服务器(官网部署)

需求
  • 域名 www.company.com,资源存于 /opt/company/html
  • 开启 Gzip,图片缓存 7 天、JS/CSS 缓存 30 天;
  • 禁止访问 *.txt 文件。
配置代码
http {gzip on;gzip_min_length 1k;gzip_types text/html text/css application/javascript image/png;log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';server {listen 80;server_name www.company.com;access_log /var/log/nginx/company-access.log main;location / {root /opt/company/html;index index.html;# 按文件类型设缓存if ($request_filename ~* \.(png|jpg|jpeg)) { expires 7d; }if ($request_filename ~* \.(js|css)) { expires 30d; }}# 禁止访问 .txtlocation ~* \.txt$ {deny all;}}
}

4.2 案例 2:反向代理 + 负载均衡(后端集群)

需求
  • 后端 3 台 Tomcat(192.168.1.101~103:8080);
  • 域名 api.company.com 转发请求,权重 101:5、102:3,103 为备用;
  • 配置健康检查,剔除故障节点。
配置代码
http {# 定义后端集群upstream tomcat_cluster {server 192.168.1.101:8080 weight=5;  # 权重 5server 192.168.1.102:8080 weight=3;  # 权重 3server 192.168.1.103:8080 backup;    # 备用节点# 健康检查(需 ngx_http_upstream_check_module 模块)check interval=3000 rise=2 fall=3 timeout=1000;}server {listen 80;server_name api.company.com;location / {proxy_pass http://tomcat_cluster;  # 转发到集群proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_connect_timeout 5s;  # 连接超时proxy_read_timeout 10s;    # 读取超时}}
}

4.3 案例 3:HTTPS 部署(安全加密)

需求
  • 官网启用 HTTPS,域名 www.company.com
  • 配置 SSL 证书(cert.pem 公钥、cert.key 私钥);
  • HTTP 请求自动跳转 HTTPS。
配置代码
http {# HTTP 跳转 HTTPSserver {listen 80;server_name www.company.com;return 301 https://$host$request_uri;  # 永久重定向}# HTTPS 配置server {listen 443 ssl;server_name www.company.com;# SSL 证书路径ssl_certificate /opt/nginx/conf/cert.pem;ssl_certificate_key /opt/nginx/conf/cert.key;# SSL 优化配置ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;  # 高强度加密套件ssl_prefer_server_ciphers on;# 静态资源托管location / {root /opt/company/html;index index.html;}}
}

五、常用命令与运维技巧

5.1 核心命令

命令作用
nginx -t检查配置文件合法性
nginx -s reload热重载配置(不中断服务)
nginx -s stop快速停止 Nginx
nginx -s quit优雅停止(处理完现有连接后退出)
systemctl status nginx查看 Nginx 运行状态(yum 安装)

5.2 运维技巧

  1. 日志切割:避免单个日志文件过大,可通过 logrotate 工具按天切割日志。
  2. 性能优化:调整 worker_processes 为 CPU 核心数,worker_connections 设为 10240+,配合内核参数 net.core.somaxconn = 65535
  3. 故障排查:通过 error.log 定位问题(如配置错误、后端服务不可达),通过 access.log 分析请求异常(如 404、502 状态码)。
http://www.dtcms.com/a/394825.html

相关文章:

  • 医院不良事件管理系统:提升医疗安全的智能化解决方案
  • 【$.post回调函数未被执行的原因分析】,第048篇
  • 远程连接服务器的远程重启办法shutdown -r -t 0
  • 【js】关于JWT的前端存储新思路
  • Unity官方Dots范例工程学习——Jobs101
  • 如何在SQLite中实现事务处理?
  • 广东省省考备考(第一百零四天9.22)——判断推理(强化训练)
  • k8s 常用命令
  • windows远程桌面服务安全加固的配置指南
  • datawhale玩转通义四大新模型 202509 第4次作业
  • MySQL 表约束实战指南:从概念到落地,守护数据完整性
  • 64位整型变量错误使用int类型对应的格式化符%d导致软件崩溃问题的排查与分析(借助deepseek辅助分析)
  • 【Linux操作系统】简学深悟启示录:Ext系列文件系统
  • 第8节-PostgreSQL数据类型-UUID
  • S2多维可视分析表格解析
  • 面经分享--百度开发一面
  • 第15讲 机器学习的数学
  • NestJS-身份验证JWT的使用以及登录注册
  • ChatGPT “影子泄露” 漏洞:黑客可隐秘窃取电子邮件数据
  • Coze Stdio模型配置
  • DSC 参数ARCH_HANG_FLAG对集群的影响
  • Android Jetpack Compose 从入门到精通
  • 【数据结构与算法-Day 31】图的遍历:深度优先搜索 (DFS) 详解,一条路走到黑的智慧
  • C#练习题——LinkedList 的进阶应用与测试
  • 手机CPU型号
  • jdbc相关知识
  • yolov12 导出onnx
  • Linux 环境变量与程序地址空间
  • LeetCode:48.路径总和Ⅲ
  • 计算机网络的性能