Nginx 安装与配置全攻略:从基础到高阶实践

一、Nginx安装与基础环境准备

1.1 安装方式选择

Nginx支持源码编译与二进制包两种安装方式。对于生产环境,推荐使用操作系统官方仓库的稳定版本(如CentOS的yum install nginx或Ubuntu的apt install nginx),可自动处理依赖关系并简化维护流程。若需定制模块,则需下载源码包执行./configure --prefix=/usr/local/nginx --with-http_ssl_module等参数编译。

1.2 目录结构解析

安装完成后需熟悉关键目录:

  • /etc/nginx/:主配置文件目录
  • /usr/share/nginx/html/:默认静态文件根目录
  • /var/log/nginx/:日志存储目录
  • /var/run/nginx.pid:进程ID文件

建议通过nginx -V命令验证安装模块,确保包含--with-http_ssl_module等必要模块。

二、核心配置模块详解

2.1 全局配置(main块)

  1. user nginx; # 运行用户
  2. worker_processes auto; # 自动匹配CPU核心数
  3. error_log /var/log/nginx/error.log warn; # 日志级别建议生产环境用warn
  4. pid /var/run/nginx.pid;

关键参数说明

  • worker_processes:建议设置为auto或物理核心数,例如4核CPU配置为worker_processes 4;
  • worker_rlimit_nofile:可配合ulimit -n调整单个进程最大文件描述符数量,高并发场景建议设置为65535

2.2 事件驱动配置(events块)

  1. events {
  2. worker_connections 4096; # 单进程最大连接数
  3. use epoll; # Linux系统推荐模型
  4. multi_accept on; # 启用批量连接接受
  5. }

性能调优要点

  • 理论最大连接数计算:worker_processes * worker_connections
  • 针对百万级并发场景,需结合sysctl.conf优化内核参数:
    1. net.ipv4.tcp_max_syn_backlog = 65536
    2. net.core.somaxconn = 65535

2.3 HTTP服务配置(http块)

2.3.1 MIME类型定义

通过include mime.types;加载200+种文件类型映射,也可自定义扩展:

  1. types {
  2. application/wasm wasm; # 添加WebAssembly支持
  3. text/markdown md; # 添加Markdown支持
  4. }

2.3.2 日志格式定制

  1. log_format json_combined escape=json '{'
  2. '"time_local":"$time_local",'
  3. '"remote_addr":"$remote_addr",'
  4. '"request":"$request",'
  5. '"status":"$status",'
  6. '"request_time":$request_time,'
  7. '"upstream_time":"$upstream_response_time"'
  8. '}';
  9. access_log /var/log/nginx/access.log json_combined;

优势:结构化日志便于ELK等日志系统分析,escape=json参数可自动转义特殊字符。

三、虚拟主机与反向代理实战

3.1 基础虚拟主机配置

  1. server {
  2. listen 80;
  3. server_name api.example.com;
  4. location / {
  5. root /usr/share/nginx/api;
  6. index index.html index.htm;
  7. }
  8. error_page 404 /404.html;
  9. error_page 500 502 503 504 /50x.html;
  10. }

关键配置项

  • server_name支持通配符(如*.example.com)和正则表达式
  • location优先级规则:= > ^~ > ~ > ~* > 普通路径

3.2 反向代理高级配置

  1. upstream backend_pool {
  2. zone backend_zone 64k; # 共享内存区域
  3. least_conn; # 最少连接调度算法
  4. server 10.0.0.1:8080 weight=3;
  5. server 10.0.0.2:8080;
  6. keepalive 32; # 长连接数
  7. }
  8. server {
  9. listen 443 ssl;
  10. server_name api.example.com;
  11. ssl_certificate /etc/nginx/ssl/api.crt;
  12. ssl_certificate_key /etc/nginx/ssl/api.key;
  13. location / {
  14. proxy_pass http://backend_pool;
  15. proxy_set_header Host $host;
  16. proxy_set_header X-Real-IP $remote_addr;
  17. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18. proxy_http_version 1.1;
  19. proxy_connect_timeout 60s;
  20. proxy_read_timeout 300s;
  21. }
  22. }

性能优化技巧

  1. 启用proxy_buffering off减少内存占用(适用于大文件下载场景)
  2. 通过proxy_cache配置静态资源缓存
  3. 使用ssl_session_cache shared:SSL:10m加速TLS握手

四、安全加固与最佳实践

4.1 安全配置要点

  1. # 隐藏Nginx版本信息
  2. server_tokens off;
  3. # 限制请求方法
  4. if ($request_method !~ ^(GET|HEAD|POST)$ ) {
  5. return 444;
  6. }
  7. # 防止目录遍历攻击
  8. autoindex off;
  9. # XSS防护
  10. add_header X-XSS-Protection "1; mode=block";

4.2 性能监控方案

  1. 基础监控:通过stub_status模块获取实时状态
    1. location /nginx_status {
    2. stub_status on;
    3. allow 127.0.0.1;
    4. deny all;
    5. }
  2. 高级监控:集成Prometheus + Grafana方案
    • 使用nginx-prometheus-exporter暴露指标
    • 关键监控指标:
      • nginx_connections_active:活跃连接数
      • nginx_http_requests_total:请求总数
      • nginx_upstream_response_time_seconds:后端响应时间

五、故障排查与常见问题

5.1 启动失败排查流程

  1. 检查语法错误:nginx -t
  2. 查看错误日志:tail -f /var/log/nginx/error.log
  3. 验证端口占用:netstat -tulnp | grep :80
  4. 检查SELinux状态:getenforce(CentOS系统)

5.2 502 Bad Gateway问题

常见原因及解决方案:

  • 后端服务崩溃:检查后端服务日志
  • 连接超时:调整proxy_connect_timeout参数
  • 端口不匹配:确认proxy_pass地址与后端服务监听端口一致

通过系统化的配置管理与性能优化,Nginx可轻松支撑百万级并发场景。建议结合具体业务需求,参考本文提供的配置模板进行定制化调整,并定期进行压力测试验证配置效果。对于超大规模部署场景,可考虑使用Nginx Plus或行业常见技术方案提供的动态配置管理能力。