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/nginx Nginx 命令

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

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; }
        }

        # 禁止访问 .txt
        location ~* \.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;  # 权重 5
        server 192.168.1.102:8080 weight=3;  # 权重 3
        server 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 跳转 HTTPS
    server {
        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 状态码)。
相关推荐
七夜zippoe7 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6488 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满8 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠8 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9039 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技10 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀10 小时前
Linux环境变量
linux·运维·服务器
zzzsde10 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º12 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~12 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化