一、Nginx环境搭建与基础配置
1.1 系统环境预处理
在Linux系统上部署Nginx前,需完成基础环境配置。首先执行系统更新并安装编译工具链:
# 更新软件包索引sudo apt update# 安装编译依赖(GCC、make等)及开发库sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
建议额外安装网络诊断工具curl和版本管理工具git,为后续配置管理提供便利。
1.2 源码编译安装流程
相较于预编译包,源码安装可精准控制功能模块。创建自动化安装脚本时需注意:
#!/bin/bash# 创建专用用户(禁止登录)sudo groupadd -r nginxsudo useradd -r -g nginx -s /sbin/nologin nginx# 下载源码(建议从官网获取最新稳定版)cd /tmpwget http://nginx.org/download/nginx-1.24.0.tar.gztar -zxvf nginx-*.tar.gzcd nginx-*# 关键编译参数说明./configure \--prefix=/usr/local/nginx \ # 安装目录--with-http_ssl_module \ # SSL支持--with-http_v2_module \ # HTTP/2协议--with-stream \ # TCP/UDP代理--with-threads \ # 多线程支持--with-file-aio \ # 异步文件I/O--with-http_realip_module \ # 真实IP获取--with-http_stub_status_module # 监控状态页
编译完成后需创建systemd服务单元文件,特别注意PID文件路径需与nginx.conf配置保持一致。建议添加ExecStartPre参数进行配置校验,避免服务启动失败。
二、静态资源服务实战
2.1 目录结构规范
遵循FHS标准构建目录体系:
/var/www/├── static-site/ # 站点根目录│ ├── html/ # 静态文件│ ├── logs/ # 访问日志│ └── conf.d/ # 虚拟主机配置└── backup/ # 配置备份
权限设置需遵循最小权限原则:
sudo chown -R nginx:nginx /var/www/static-sitesudo chmod -R 750 /var/www/static-site # 所有者读写执行,组读执行
2.2 基础配置示例
核心配置文件nginx.conf应包含:
http {include /etc/nginx/mime.types;default_type application/octet-stream;# 日志格式定义log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 静态站点配置server {listen 80;server_name example.com;access_log /var/www/static-site/logs/access.log main;error_log /var/www/static-site/logs/error.log warn;root /var/www/static-site/html;index index.html index.htm;# 静态资源缓存配置location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public";}}}
三、反向代理与负载均衡
3.1 反向代理配置
处理动态请求时需配置upstream模块:
upstream backend_pool {server 10.0.0.1:8080 weight=5;server 10.0.0.2:8080 max_fails=3 fail_timeout=30s;server 10.0.0.3:8080 backup; # 备用服务器keepalive 32; # 长连接数least_conn; # 最少连接调度算法}server {location /api/ {proxy_pass http://backend_pool;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_connect_timeout 5s;proxy_read_timeout 30s;}}
3.2 负载均衡策略对比
| 策略类型 | 适用场景 | 配置参数 |
|---|---|---|
| 轮询(默认) | 后端服务器性能相近 | 无特殊配置 |
| 加权轮询 | 服务器性能不均 | weight=数字 |
| IP哈希 | 需要会话保持 | ip_hash |
| 最少连接 | 长连接场景 | least_conn |
| 最短响应时间 | 对响应速度敏感 | fair(需第三方模块) |
四、生产环境优化实践
4.1 性能调优参数
worker_processes auto; # 自动匹配CPU核心数worker_rlimit_nofile 65535; # 打开文件数限制events {worker_connections 4096; # 单worker最大连接数use epoll; # Linux高效事件模型multi_accept on; # 批量接受连接}http {sendfile on; # 零拷贝技术tcp_nopush on; # 减少网络包数量tcp_nodelay on; # 禁用Nagle算法keepalive_timeout 65; # 长连接超时client_header_timeout 10; # 请求头超时client_body_timeout 10; # 请求体超时}
4.2 安全加固方案
# 限制访问方法if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 405;}# 防止目录遍历location / {autoindex off;}# 防XSS攻击add_header X-XSS-Protection "1; mode=block";add_header X-Content-Type-Options "nosniff";# 限制IP访问geo $limited_ip {default 1;192.168.1.100 0;}map $limited_ip $limit_class {0 "";1 "$binary_remote_addr";}limit_conn_zone $limit_class zone=addr:10m;server {limit_conn addr 10;}
五、监控与故障排查
5.1 状态监控模块
启用stub_status获取实时指标:
location /nginx_status {stub_status on;allow 127.0.0.1;deny all;}
返回数据示例:
Active connections: 291server accepts handled requests16630948 16630948 31070465Reading: 6 Writing: 179 Waiting: 106
5.2 常见问题处理
- 502 Bad Gateway:检查后端服务是否存活,代理超时设置是否合理
- 连接数过高:调整
worker_connections和multi_accept参数 - 内存泄漏:检查是否有未释放的共享内存区,升级到稳定版本
- 证书过期:使用
openssl x509 -noout -dates -in cert.pem检查有效期
通过系统化的配置管理和性能优化,Nginx可支撑百万级并发连接。建议结合日志分析工具(如ELK)和APM系统构建完整监控体系,实现故障的快速定位与自愈。对于超大规模部署场景,可考虑使用容器编排平台实现动态扩缩容,进一步提升服务可用性。