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 状态码)。
相关推荐
Panda__Panda24 分钟前
docker项目打包演示项目(数字排序服务)
运维·javascript·python·docker·容器·c#
xx.ii25 分钟前
Docker监控
运维·docker·容器
板鸭〈小号〉29 分钟前
Socket网络编程(2)-command_server
运维·服务器
用户311879455921840 分钟前
nginx-1.16.1-2.p01.ky10.sw_64.rpm 安装教程(详细步骤,适用于Kylin V10/申威SW64架构)
nginx
维尔切1 小时前
Docker 存储与数据共享
运维·docker·容器
温柔一只鬼.1 小时前
Docker快速入门——第四章Docker镜像
运维·docker·容器
温柔一只鬼.2 小时前
Docker快速入门——Windowns系统下Docker安装(2025最新理解与完整,附带WSL1如何升级为WSL2)
运维·docker·容器
何朴尧3 小时前
centos/cuos如何开启软件源
linux·运维·centos
csdn_Hzx4 小时前
Linux添加一个系统服务
linux·运维·服务器
重生之我在20年代敲代码4 小时前
【Linux】初始线程
linux·运维·服务器