Nginx 配置完全指南:从基础到高阶优化

Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛应用于 Web 服务、负载均衡和静态资源托管。其配置文件通常位于 /etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf,配置结构清晰,模块化设计便于管理。


配置文件结构

Nginx 配置文件主要由全局块、events 块和 http 块组成。全局块配置影响整个服务器的运行,events 块配置与网络连接相关,http 块包含服务器和代理相关配置。

全局块示例:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

  • user 指定运行 Nginx 的用户和组。
  • worker_processes 定义工作进程数,通常设置为 CPU 核心数。
  • error_log 配置错误日志路径。
  • pid 指定进程 ID 文件路径。

events 块示例:

events {
    worker_connections 1024;
    use epoll;
}

  • worker_connections 定义每个工作进程的最大连接数。
  • use 指定事件模型,如 epoll 用于高效处理高并发连接。

HTTP 块配置

http 块是 Nginx 配置的核心,包含 server 块和 location 块,用于定义虚拟主机和请求处理规则。

基本 HTTP 配置示例:

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    gzip on;
}

  • include 加载 MIME 类型文件,用于识别文件类型。
  • default_type 设置默认响应类型。
  • sendfile 启用高效文件传输。
  • keepalive_timeout 定义长连接超时时间。
  • gzip 开启压缩以减小传输数据量。

Server 块配置

server 块定义虚拟主机,每个 server 块对应一个域名或 IP 的配置。

简单 server 块示例:

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.html;
}

  • listen 指定监听的端口。
  • server_name 设置域名,多个域名可用空格分隔。
  • root 定义网站根目录。
  • index 指定默认首页文件。

HTTPS 配置示例:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    root /var/www/html;
}

  • ssl_certificatessl_certificate_key 分别指定 SSL 证书和私钥路径。

Location 块配置

location 块用于匹配 URI,定义请求的处理规则。

常见 location 配置示例:

location / {
    try_files $uri $uri/ /index.html;
}

location /images/ {
    alias /data/images/;
}

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
}

  • / 匹配所有请求,try_files 尝试按顺序查找文件。
  • /images/ 使用 alias 映射到指定目录。
  • ~ \.php$ 使用正则匹配 PHP 文件,通过 FastCGI 处理。

反向代理配置

Nginx 常用作反向代理,将请求转发到后端服务器。

反向代理示例:

location /api/ {
    proxy_pass http://backend_server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

  • proxy_pass 指定后端服务器地址。
  • proxy_set_header 设置请求头,传递客户端信息。

负载均衡示例:

upstream backend {
    server 192.168.1.1:8080;
    server 192.168.1.2:8080;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

  • upstream 定义后端服务器组,Nginx 默认使用轮询策略分发请求。

日志配置

Nginx 支持访问日志和错误日志,用于监控和调试。

日志配置示例:

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /var/log/nginx/access.log main;
}

  • log_format 定义日志格式,包含客户端 IP、请求时间、状态码等信息。
  • access_log 指定访问日志路径和格式。

性能优化配置

通过调整参数可提升 Nginx 性能。

优化示例:

http {
    client_max_body_size 20M;
    tcp_nopush on;
    tcp_nodelay on;
}

  • client_max_body_size 限制客户端上传文件大小。
  • tcp_nopushtcp_nodelay 优化 TCP 传输效率。

安全配置

增强安全性可防止常见攻击。

安全配置示例:

server {
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";
}

  • X-Frame-Options 防止点击劫持。
  • X-Content-Type-Options 阻止 MIME 类型嗅探。
  • X-XSS-Protection 启用 XSS 过滤器。

常见问题排查

  1. 配置测试:修改配置后运行 nginx -t 测试语法是否正确。
  2. 重载配置:使用 nginx -s reload 重新加载配置而不中断服务。
  3. 日志查看:通过 tail -f /var/log/nginx/error.log 实时监控错误日志。

你可能感兴趣的:(Nginx 配置完全指南:从基础到高阶优化)