LNMP架构中Nginx配置文件详解
小樊
37
2025-12-14 01:50:22
一 配置文件结构与语法
- 配置文件由若干块组成:全局块(Main)、events 块、http 块,其中 http 块内可包含多个 server 块(虚拟主机),每个 server 内包含多个 location 块用于按 URI 匹配处理请求。
- 基本语法:指令以分号 ;结尾;块用大括号 {}包围;支持# 注释;块可嵌套,内层块会继承外层块的配置。
- 典型顶层结构示例:
- 全局:user、worker_processes、error_log、pid
- events:worker_connections、use(如 Linux 推荐 epoll)
- http:include、default_type、log_format、access_log、sendfile、keepalive_timeout、include 虚拟主机目录
- 主配置文件常见路径:/etc/nginx/nginx.conf;虚拟主机常通过 include /etc/nginx/conf.d/*.conf; 或 include vhost/*.conf; 引入。
二 核心参数与推荐值
- 全局与性能
- worker_processes:建议设为 auto(按 CPU 核心数自动);
- worker_rlimit_nofile:单个 worker 可打开的最大文件描述符,建议与系统 ulimit -n 一致(如 65535);
- worker_connections:每个 worker 的最大并发连接数(如 65535);
- use epoll(Linux);
- sendfile on:启用高效零拷贝传输;
- keepalive_timeout 65:长连接超时(秒)。
- 日志与 MIME
- error_log /var/log/nginx/error.log warn;
- log_format main 定义访问日志格式;access_log /var/log/nginx/access.log main;
- include mime.types; default_type application/octet-stream;。
- 文件与缓存优化
- open_file_cache max=65535 inactive=60s; open_file_cache_valid 80s; open_file_cache_min_uses 1; open_file_cache_errors on;
- 静态资源建议开启缓存过期并关闭访问日志以减轻 I/O。
三 虚拟主机与 Location 匹配
- server 块要点
- listen 80; 或 listen 443 ssl;
- server_name example.com www.example.com;
- root /var/www/example.com; index index.html;
- 错误页:error_page 500 502 503 504 /50x.html; 并在对应 location 指定 root。
- location 匹配规则与优先级
- =:精确匹配;^~:前缀匹配且不再做正则;~:区分大小写正则;~:不区分大小写正则;/* 通用前缀;正则按首次匹配生效。
- 常用指令
- root vs alias:root 将 location 路径附加到指定目录;alias 将 location 路径替换为指定目录(正则内 alias 需使用捕获组)。
- try_files $uri $uri/ =404;:按顺序查找文件或目录,未命中返回 404。
- rewrite 与 return:用于跳转与重写(如将 /old/(.*) 重写为 /new/$1)。
四 LNMP场景常用配置
- 反向代理与 PHP-FPM(FastCGI)
- 反向代理示例:
- location /api/ { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
- PHP 处理(FastCGI 常用参数):
- location ~ .php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; fastcgi_read_timeout 120s; }
- 负载均衡
- upstream backend { server 10.0.0.11:8080 weight=3; server 10.0.0.12:8080; server 10.0.0.13:8080 backup; }
- location / { proxy_pass http://backend; }
- 静态资源缓存与防盗链
- 缓存:location ~* .(jpg|jpeg|png|gif|css|js)$ { expires 30d; access_log off; }
- 防盗链:location /images/ { valid_referers none blocked example.com; if ($invalid_referer) { return 403; } }
- 安全与访问控制
- 目录密码认证:location /admin/ { auth_basic “Restricted”; auth_basic_user_file /etc/nginx/.htpasswd; }
- 跨域(按需开启):add_header ‘Access-Control-Allow-Origin’ ‘*’; add_header ‘Access-Control-Allow-Methods’ ‘GET,POST,OPTIONS’; add_header ‘Access-Control-Allow-Credentials’ ‘true’;
- 监控与健康检查
- 状态页:location /status { stub_status on; access_log off; allow 127.0.0.1; deny all; }(需编译时启用 –with-http_stub_status_module)
五 HTTPS 与运维命令
- HTTPS/TLS 建议配置
- 证书与协议:
- ssl_certificate /etc/ssl/certs/example.com.crt; ssl_certificate_key /etc/ssl/private/example.com.key;
- ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
- ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
- ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
- HTTP→HTTPS 跳转:
- server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
- 可使用 Mozilla SSL 配置生成器生成安全基线。
- 常用运维命令
- 语法检查:nginx -t;启动:nginx;优雅停止:nginx -s quit;热加载:nginx -s reload;
- 重新打开日志(配合日志切割):nginx -s reopen;版本与编译参数:nginx -v / nginx -V;
- 日志切割示例:
- mv /var/log/nginx/access.log /var/log/nginx/access_$(date +%Y%m%d).log && nginx -s reopen。