Nginx核心配置
一、看透 Nginx:不止是 “服务器”
1.1 核心优势拆解
Nginx 能成为行业标配,源于其贴合业务需求的技术特性:
- 高性能底层逻辑:采用 “异步非阻塞 epoll 模型”,一个 Worker 进程可处理数千连接,内存占用仅为 Apache 的 1/5~1/10,支持 5 万 + 并发。
- 零停机运维:支持热部署(版本升级不重启)、热重载配置(
reload
不中断连接),适配 7×24 小时业务场景。 - 模块化扩展:核心功能精简,通过模块(如 SSL、缓存、负载均衡)按需扩展,避免冗余。
- 多场景适配:可作为静态服务器、反向代理、负载均衡器,甚至通过 OpenResty 扩展为 API 网关。
1.2 核心应用场景
结合实际业务理解 Nginx 作用:
- 静态资源托管:直接处理 HTML、图片、JS 等,通过缓存、Gzip 压缩、防盗链优化性能。
- 虚拟主机:单服务器部署多网站(如官网 + 后台系统),通过域名 / 端口区分。
- 反向代理与负载均衡:作为前端入口分发请求到后端集群,自动剔除故障节点,避免单点过载。
- 安全防护:拦截异常请求(IP 限制、防 SQL 注入、频率控制),降低后端攻击风险。
1.3 工作原理:Master-Worker 分工
Nginx 启动后生成两类进程,分工明确:
- Master 进程(管理者):读取配置、初始化资源、创建 Worker 进程,接收外界信号(如重启 / 停止)并分发。
- Worker 进程(执行者):独立处理用户请求,通过 epoll 模型异步处理多连接,单个 Worker 崩溃不影响整体。
例如执行 nginx -s reload
时,Master 先验证新配置,再创建新 Worker 处理新请求,旧 Worker 处理完现有连接后退出,实现 “零中断更新”。
二、Nginx 部署:两种安装方式对比
2.1 yum 安装(快速上手)
适用场景
无需自定义模块、追求快速部署,系统为 CentOS/RHEL。
操作步骤
- 安装 EPEL 源(Nginx 不在 CentOS 官方源):
[root@server ~]# yum install -y epel-release
- 安装 Nginx:
[root@server ~]# yum install -y nginx
- 验证与启动:
# 查看版本 [root@server ~]# nginx -v # 启动并设为开机自启 [root@server ~]# systemctl start nginx && systemctl enable nginx
- 测试:浏览器输入服务器 IP,看到 “Welcome to nginx!” 即成功。
2.2 编译安装(自定义灵活)
适用场景
需启用特定模块(如 SSL)、指定安装路径、追求新版本。
操作步骤
- 安装依赖:
[root@server ~]# yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel
- 下载源码包(官网稳定版):
[root@server ~]# wget https://nginx.org/download/nginx-1.24.0.tar.gz
- 解压并配置编译参数:
[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 压缩
- 编译安装:
[root@server nginx-1.24.0]# make && make install
- 命令优化(创建软链接):
[root@server ~]# ln -s /opt/nginx/sbin/nginx /usr/sbin/
- 启动验证:
[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; }}# 禁止访问 .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 运维技巧
- 日志切割:避免单个日志文件过大,可通过
logrotate
工具按天切割日志。 - 性能优化:调整
worker_processes
为 CPU 核心数,worker_connections
设为 10240+,配合内核参数net.core.somaxconn = 65535
。 - 故障排查:通过
error.log
定位问题(如配置错误、后端服务不可达),通过access.log
分析请求异常(如 404、502 状态码)。