Nginx配置文件 的主要组件详细讲解

  1. 全局配置:设置用户、工作进程数和错误日志等基本参数。
  2. 事件模块:配置连接处理方式,优化并发性能。
  3. HTTP 核心模块:设置 MIME 类型、日志格式、压缩和文件缓存等。
  4. 虚拟主机配置:包括 HTTP 和 HTTPS 两种虚拟主机的配置示例。
  5. 负载均衡配置:展示了如何配置多个后端服务器的负载均衡。
# Nginx 主配置文件

# 运行 Nginx 服务的用户和用户组
user www-data;

# 工作进程数,通常设置为 CPU 核心数
worker_processes auto;

# 错误日志路径和日志级别
error_log /var/log/nginx/error.log warn;

# 进程 ID 存储路径
pid /run/nginx.pid;

# 事件模块配置
events {
    # 每个工作进程允许的最大连接数
    worker_connections 1024;
    
    # 使用高效的事件处理模型(epoll 是 Linux 系统上的最优选择)
    use epoll;
    
    # 允许多个进程同时接受新连接,提高并发处理能力
    multi_accept on;
}

# HTTP 核心模块配置
http {
    # 包含 MIME 类型映射文件
    include /etc/nginx/mime.types;
    
    # 默认 MIME 类型
    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"';
    
    # 访问日志路径和使用的日志格式
    access_log /var/log/nginx/access.log main;
    
    # 文件描述符缓存大小
    open_file_cache max=1000 inactive=20s;
    
    # 文件属性缓存时间
    open_file_cache_valid 30s;
    
    # 缓存中最少使用次数
    open_file_cache_min_uses 2;
    
    # 错误发生时是否记录错误日志
    open_file_cache_errors on;
    
    # 客户端请求头缓冲区大小
    client_header_buffer_size 1k;
    
    # 客户端请求头大缓冲区大小和数量
    large_client_header_buffers 4 8k;
    
    # 客户端最大请求体大小,防止过大请求导致服务器问题
    client_max_body_size 10m;
    
    # 服务器名称哈希表大小
    server_names_hash_bucket_size 64;
    
    # 防止处理畸形请求
    server_tokens off;
    
    # 启用长连接
    keepalive_timeout 65;
    
    # 长连接请求数限制
    keepalive_requests 100;
    
    # 启用 gzip 压缩
    gzip on;
    
    # 压缩级别(1-9),9 为最高压缩率但最消耗 CPU
    gzip_comp_level 5;
    
    # 压缩最小文件大小
    gzip_min_length 256;
    
    # 压缩类型
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    # 禁用对 IE6 的压缩
    gzip_disable "msie6";
    
    # 包含所有服务器配置文件
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

# 虚拟主机配置示例
server {
    # 监听端口
    listen 80;
    
    # 服务器名称,可以有多个,用空格分隔
    server_name example.com www.example.com;
    
    # 字符集设置
    charset utf-8;
    
    # 访问日志设置
    access_log /var/log/nginx/example.access.log main;
    error_log /var/log/nginx/example.error.log;
    
    # 根目录设置
    root /var/www/html;
    
    # 默认首页文件
    index index.html index.htm index.php;
    
    # 静态文件缓存时间设置
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 7d;
        log_not_found off;
        access_log off;
    }
    
    # PHP 处理配置
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;  # PHP-FPM 套接字路径
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    # 错误页面配置
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    
    # 自定义错误页面
    location = /50x.html {
        root /var/www/html;
    }
    
    # 防止目录浏览
    location / {
        try_files $uri $uri/ =404;
    }
    
    # 禁止访问 .htaccess 文件
    location ~ /\.ht {
        deny all;
    }
}

# HTTPS 虚拟主机配置示例
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;
    
    root /var/www/html;
    index index.html index.htm index.php;
    
    # SSL 证书配置
    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;
    
    # SSL 协议和密码套件配置
    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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    
    # SSL 会话缓存和超时设置
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    # HSTS 头部设置,增强安全性
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    
    # 其他配置与 HTTP 服务器类似
    include /etc/nginx/snippets/ssl-params.conf;
}

# 负载均衡配置示例
upstream backend_servers {
    # 定义后端服务器列表
    server backend1.example.com weight=5;  # 权重为 5
    server backend2.example.com;           # 默认权重为 1
    server backend3.example.com backup;    # 备份服务器,只有其他服务器不可用时才会启用
    
    # 负载均衡算法
    ip_hash;  # 基于客户端 IP 地址的哈希算法,确保同一客户端始终访问同一服务器
    
    # 健康检查设置
    check interval=3000 rise=2 fall=5 timeout=1000 type=http;
    check_http_send "HEAD /health_check HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}

server {
    listen 80;
    server_name loadbalancer.example.com;
    
    location / {
        proxy_pass http://backend_servers;
        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_set_header X-Forwarded-Proto $scheme;
    }
}

你可能感兴趣的:(nginx)