Nginx 核心配置、多业务区分、系统优化完整整理笔记(纠错 + 案例补充)

一、过滤配置注释 / 空行命令解析

bash

运行

复制代码
grep -Ev "^$|#" nginx.conf

参数释义

  • -E:开启扩展正则匹配
  • -v:反向过滤,输出不匹配的行
  • ^$:匹配空行;#:匹配注释行

作用案例

直接输出干净、无注释、无空行的有效 nginx 配置,方便快速查看生效参数

bash

运行

复制代码
# 实操示例
grep -Ev "^$|#" /usr/local/nginx/conf/nginx.conf

二、nginx.conf 主配置分段详解(带纠错 + 实操案例)

1. 全局段:worker 进程配置

nginx

复制代码
# worker进程数量,和CPU物理核心数匹配
# 最优规范:CPU几核就填几;多核CPU可设为 auto 自动识别
worker_processes  1;
补充说明 & 案例
  • 4 核 CPU 推荐:worker_processes 4;
  • 自动适配写法:worker_processes auto;
  • 错误点:不要设置远超 CPU 核心数,会造成 CPU 频繁切换,性能下降

2. events 事件模块(并发文件句柄优化)

nginx

复制代码
events {
    # 单个worker进程最大并发连接数,上限理论65535
    # 仅改此处不生效,必须同步修改系统ulimit文件句柄限制
    worker_connections  1024;
}
配套系统优化(完整流程案例)
  1. 查看当前系统单进程最大文件打开数

bash

运行

复制代码
ulimit -n
# 默认一般1024,并发高会报 too many open files
  1. 临时调高(重启失效)

bash

运行

复制代码
ulimit -n 65535
  1. 永久生效修改 /etc/security/limits.conf,文件末尾添加:

conf

复制代码
*                soft  nofile    65535
*                hard  nofile    65535
  1. 计算理论最大并发:worker_processes × worker_connections 案例:4 核 CPU,worker_connections=65535,理论最大并发 4×65535=262140

3. http 全局网站模块

nginx

复制代码
http {
    # 引入mime类型文件,定义不同后缀资源的浏览器解析格式(图片、js、css等)
    include       mime.types;
    # 未匹配类型的默认资源格式
    default_type  application/octet-stream;
    # 页面编码,解决中文乱码
    charset  utf8;
    # 开启零拷贝高效文件传输,大幅提升静态资源速度
    sendfile        on;
    # HTTP长连接保持超时时间,65秒无新请求自动断开TCP连接
    keepalive_timeout  65;

    # 一个server{}块代表一套独立网站业务
    server {
        # 监听指定IP+80端口,仅允许该IP访问本业务
        listen       192.168.91.146:80;
        # 绑定业务域名
        server_name  localhost;

        # 匹配所有请求路径
        location / {
            # 网站根目录,相对编译安装路径/usr/local/nginx,完整路径 /usr/local/nginx/html
            root   html;
            # 默认首页文件,按顺序匹配
            index  index.html index.htm;
        }
    }
}

三、三种区分多业务的配置方案(配套实操案例)

方案 1:不同端口区分业务

同一 IP,不同端口跑不同网站

nginx

复制代码
# 业务1:80端口 官网
server {
    listen 80;
    server_name localhost;
    location / {
        root html/www;
        index index.html;
    }
}
# 业务2:8080端口 后台管理
server {
    listen 8080;
    server_name localhost;
    location / {
        root html/admin;
        index index.html;
    }
}

访问案例: curl 192.168.91.146:80 访问官网 curl 192.168.91.146:8080 访问后台

方案 2:不同域名区分业务(主流生产用法)

同一 IP 同一端口,靠域名区分站点,需要修改 hosts 做本地解析测试

nginx

复制代码
# 站点A:www.test.com
server {
    listen 80;
    server_name www.test.com;
    location / {
        root html/test;
        index index.html;
    }
}
# 站点B:blog.test.com
server {
    listen 80;
    server_name blog.test.com;
    location / {
        root html/blog;
        index index.html;
    }
}

本地 hosts 映射案例:

  1. Linux /etc/hosts 添加

plaintext

复制代码
192.168.91.146 www.test.com blog.test.com
  1. Windows C:\Windows\System32\drivers\etc\hosts 同样添加上面一行
  2. 测试访问:curl www.test.com

方案 3:不同 IP 区分业务

单网卡临时多 IP,listen 绑定不同 IP 区分业务

nginx

复制代码
# 绑定192.168.91.146 业务A
server {
    listen 192.168.91.146:80;
    server_name localhost;
    root html/a;
}
# 绑定192.168.91.147 业务B
server {
    listen 192.168.91.147:80;
    server_name localhost;
    root html/b;
}

临时添加网卡子 IP 案例(重启网卡失效)

bash

运行

复制代码
# eth0为主网卡,添加同网段辅助IP
ifconfig eth0:0 192.168.91.147 netmask 255.255.255.0 up

四、Nginx 配置校验 & 访问测试工具

1. 修改配置必须先校验(禁止直接重启)

bash

运行

复制代码
# 校验配置语法,输出successful代表无错误
nginx -t

⚠️ 错误风险:配置写错直接重启会导致 nginx 服务宕机,业务中断

2. 三种访问测试工具区别

表格

工具 作用 适用场景 案例
ping 仅测试三层网络连通性,测试 ICMP 数据包,无法检测端口服务 判断服务器网络通不通 ping 192.168.91.146
telnet 四层端口连通测试,检测目标 IP 端口是否开放,无 HTTP 解析 排查端口防火墙拦截 telnet 192.168.91.146 80
curl 完整 HTTP 请求工具,发送网页请求,返回页面完整内容 测试网站业务是否正常、返回页面内容 curl 192.168.91.146

案例场景:

  1. ping 通、telnet 不通 → 服务器防火墙 / 安全组拦截 80 端口
  2. ping、telnet 都通,curl 返回 403/404 → nginx 配置 / 网页目录权限问题