1. Nginx 配置全攻略:从基础安装到高级应用
作为一名长期与 Nginx 打交道的运维工程师,我深知一个合理的 Nginx 配置对系统稳定性和性能的重要性。今天我将分享从基础安装到高级配置的完整实践指南,包含大量生产环境中验证过的实用技巧和避坑经验。
1.1 为什么选择 Nginx 作为 Web 服务器
Nginx 以其高性能、低资源消耗和模块化设计,已成为现代 Web 架构的核心组件。相比传统 Apache,Nginx 采用事件驱动架构,单个进程可处理数万并发连接,特别适合高并发场景。我在实际项目中测试过,相同硬件条件下,Nginx 的静态内容处理能力可达 Apache 的 2-3 倍。
提示:生产环境推荐使用 Nginx 作为前端反向代理,配合 Apache 或应用服务器处理后端动态请求,这种组合能充分发挥各自优势。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境准备与安装
2.1 依赖库安装最佳实践
PCRE(Perl Compatible Regular Expressions)是 Nginx 实现 location 匹配的核心依赖。虽然系统仓库可能提供旧版 PCRE(如 8.x),但建议从源码编译安装最新的 PCRE2:
bash复制# 下载最新 PCRE2(当前为 10.44)
wget https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.44/pcre2-10.44.tar.gz
# 解压并编译安装
tar -zxvf pcre2-10.44.tar.gz
cd pcre2-10.44
./configure --prefix=/usr/local/pcre2-10.44 \
--enable-jit \ # 启用Just-In-Time编译提升性能
--enable-unicode-properties # 支持Unicode属性
make && sudo make install
# 设置库文件路径
echo "/usr/local/pcre2-10.44/lib" | sudo tee /etc/ld.so.conf.d/pcre2.conf
sudo ldconfig
关键参数说明:
--enable-jit:可提升正则匹配性能30%以上--prefix:指定独立安装目录,便于多版本管理- 安装后需更新动态链接库缓存
2.2 防火墙配置要点
正确的防火墙设置是服务可访问的基础,但容易被忽视。以下是经过验证的配置方案:
bash复制# 永久开放80端口(HTTP)和443端口(HTTPS)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 或者直接指定端口协议
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
# 重载防火墙规则(不中断现有连接)
sudo firewall-cmd --reload
# 验证规则
sudo firewall-cmd --list-all
常见问题排查:
- 如果端口已开但无法访问,检查SELinux状态:
sudo setenforce 0(临时关闭) - 云服务器还需在安全组中放行相应端口
3. Nginx 核心配置解析
3.1 反向代理实战配置
反向代理是 Nginx 最常用的功能之一。以下是一个生产级配置示例:
nginx复制server {
listen 80;
server_name app.example.com;
# 全局性能调优
client_max_body_size 20m; # 文件上传大小限制
keepalive_timeout 75s; # 保持连接超时
location / {
proxy_pass http://localhost:3000;
# 标准代理头设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时与重试配置
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 120s; # 长轮询接口需延长
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 错误处理
proxy_next_upstream error timeout http_502 http_503;
proxy_intercept_errors on;
}
# 静态资源优化
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 365d;
add_header Cache-Control "public, immutable";
access_log off;
}
}
关键优化点:
proxy_next_upstream:指定在何种情况下尝试下一个后端服务器immutable缓存:避免304验证请求- 分离静态资源访问日志,减少磁盘IO
3.2 负载均衡策略深度对比
Nginx 提供多种负载均衡算法,各有适用场景:
3.2.1 轮询(默认)
nginx复制upstream backend {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
- 特点:请求均匀分配
- 适用场景:后端服务器性能相近的无状态服务
