一、Nginx安装与基础环境准备
在主流Linux发行版中,推荐通过包管理器安装稳定版本。以CentOS为例:
# 添加EPEL仓库(如未配置)sudo yum install epel-release -y# 安装Nginx主程序sudo yum install nginx -y# 启动服务并设置开机自启sudo systemctl start nginxsudo systemctl enable nginx
对于需要特定版本或自定义编译的场景,建议从官方托管仓库获取源码包,编译时可通过--with-http_ssl_module等参数启用TLS支持。安装完成后需验证服务状态:
nginx -V # 查看编译参数nginx -t # 测试配置文件语法
二、全局配置优化(main块)
核心参数配置位于nginx.conf的主上下文,直接影响服务性能:
-
worker进程管理
worker_processes参数决定工作进程数量,建议设置为物理CPU核心数。对于NUMA架构服务器,可通过worker_cpu_affinity绑定CPU亲和性:worker_processes auto;worker_cpu_affinity 0001 0010 0100 1000; # 4核绑定示例
-
日志系统配置
错误日志级别从高到低依次为debug、info、notice、warn、error、crit。生产环境建议使用warn级别,调试时可临时开启debug:error_log /var/log/nginx/error.log warn;
日志轮转推荐使用
logrotate工具,避免日志文件无限增长。 -
PID文件路径
指定进程ID存储位置,便于服务管理:pid /var/run/nginx.pid;
三、事件驱动模型配置(events块)
高并发场景下的事件处理优化至关重要:
-
连接数调优
worker_connections定义单个工作进程的最大连接数,计算公式为:
最大连接数 = worker_processes × worker_connections
建议根据服务器内存调整,每个连接约消耗2-8KB内存:events {worker_connections 8192; # 8GB内存服务器典型值}
-
I/O模型选择
- Linux系统推荐
epoll模型,支持海量连接 - FreeBSD系统使用
kqueue - Windows系统默认
select(性能较差)use epoll; # 显式指定I/O模型
- Linux系统推荐
-
多核调度优化
启用multi_accept参数让工作进程批量接受新连接,减少上下文切换:multi_accept on;
四、HTTP服务核心配置(http块)
包含MIME类型定义、日志格式、Gzip压缩等关键功能:
-
MIME类型管理
通过include指令引入标准MIME类型文件:include /etc/nginx/mime.types;default_type application/octet-stream;
-
自定义日志格式
记录客户端IP、请求方法、响应状态等关键信息:log_format combined_plus '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" ''$request_time $upstream_response_time';access_log /var/log/nginx/access.log combined_plus;
-
Gzip压缩配置
对文本类资源启用压缩,减少网络传输量:gzip on;gzip_types text/plain text/css application/json application/javascript;gzip_min_length 1k;gzip_comp_level 6; # 压缩级别1-9,平衡CPU与压缩率
五、虚拟主机与反向代理实战(server块)
-
基础虚拟主机配置
通过server_name实现多域名绑定:server {listen 80;server_name example.com www.example.com;root /var/www/html;index index.html;location / {try_files $uri $uri/ =404;}}
-
反向代理配置要点
转发请求时需保留原始客户端信息:location /api/ {proxy_pass http://backend_cluster;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_http_version 1.1;proxy_connect_timeout 60s;proxy_read_timeout 300s;}
-
负载均衡策略
支持轮询、权重、IP哈希等多种算法:upstream backend_cluster {server 10.0.0.1:8080 weight=3;server 10.0.0.2:8080;server 10.0.0.3:8080 backup; # 备用服务器}
六、性能监控与调优建议
-
连接状态监控
通过stub_status模块获取实时指标:location /nginx_status {stub_status on;allow 127.0.0.1;deny all;}
-
慢请求日志
记录超过指定时间的请求,便于定位性能瓶颈:location / {limit_req_log_level warn;limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;limit_req zone=one burst=5;}
-
缓存配置优化
对静态资源启用浏览器缓存:location ~* \.(jpg|jpeg|png|css|js)$ {expires 30d;add_header Cache-Control "public";}
七、安全加固实践
-
隐藏版本信息
修改nginx.h文件或通过server_tokens指令:server_tokens off;
-
限制请求方法
仅允许必要的HTTP方法:if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 405;}
-
防DDoS配置
限制单个IP的并发连接数:http {limit_conn_zone $binary_remote_addr zone=addr:10m;server {limit_conn addr 100; # 单IP最大100连接}}
通过系统化的配置优化,Nginx可轻松支撑万级并发连接。建议结合监控系统持续观察各项指标,根据实际负载动态调整参数。对于超大规模部署场景,可考虑使用动态模块机制实现功能扩展,或结合容器化技术提升运维效率。