一、过滤配置注释 / 空行命令解析
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;
}
配套系统优化(完整流程案例)
- 查看当前系统单进程最大文件打开数
bash
运行
ulimit -n
# 默认一般1024,并发高会报 too many open files
- 临时调高(重启失效)
bash
运行
ulimit -n 65535
- 永久生效修改
/etc/security/limits.conf,文件末尾添加:
conf
* soft nofile 65535
* hard nofile 65535
- 计算理论最大并发:
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 映射案例:
- Linux /etc/hosts 添加
plaintext
192.168.91.146 www.test.com blog.test.com
- Windows
C:\Windows\System32\drivers\etc\hosts同样添加上面一行 - 测试访问:
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 |
案例场景:
- ping 通、telnet 不通 → 服务器防火墙 / 安全组拦截 80 端口
- ping、telnet 都通,curl 返回 403/404 → nginx 配置 / 网页目录权限问题