Nginx优化
# 用户和组
user www www; # 指定 Nginx 运行的用户和组
# 隐藏服务器版本号
server_tokens off; # 关闭服务器版本号显示,增强安全性
# 进程数设置为 CPU 核心数
worker_processes auto; # 自动检测 CPU 核心数并设置相应的工作进程数
# CPU 亲和力设置
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; # 将每个工作进程绑定到特定的 CPU 核心上,减少上下文切换
# 最大打开文件数,与 ulimit -n 保持一致
worker_rlimit_nofile 65535; # 设置每个工作进程可以打开的最大文件描述符数
# 错误日志定义
error_log /var/log/nginx/error.log warn; # 设置错误日志的路径和级别
# 进程文件
pid /var/run/nginx.pid; # 设置 Nginx 进程 ID 文件的路径
# 事件模块配置
events {
use epoll; # 使用 epoll 事件模型,适用于 Linux 系统
worker_connections 65535; # 每个工作进程可以处理的最大连接数
}
# HTTP 模块配置
http {
include mime.types; # 包含 MIME 类型定义文件
default_type application/octet-stream; # 设置默认的 MIME 类型
charset utf-8; # 设置默认字符集为 UTF-8
# 优化 Nginx 处理客户端请求的能力,特别是在处理大请求头和大请求体时
server_names_hash_bucket_size 128; # 设置 server_name 哈希表的桶大小,防止哈希冲突
client_header_buffer_size 4k; # 设置读取客户端请求头的缓冲区大小
large_client_header_buffers 4 64k; # 设置读取大型客户端请求头的缓冲区数量和大小
client_max_body_size 8m; # 设置客户端请求体的最大大小
# 开启目录列表访问(仅在特定目录)
location /public/ {
autoindex on; # 开启目录列表访问
autoindex_exact_size on; # 显示文件的确切大小
autoindex_localtime on; # 显示文件的本地时间
}
# 发送文件优化
sendfile on; # 启用 sendfile 优化,提高文件传输效率
tcp_nopush on; # 启用 TCP_NOPUSH 选项,减少网络拥塞
tcp_nodelay on; # 启用 TCP_NODELAY 选项,减少延迟
# 连接超时时间
keepalive_timeout 120; # 设置保持连接的超时时间
# 客户端请求头部的缓冲区大小
client_header_buffer_size 32k; # 设置读取客户端请求头的缓冲区大小
# 打开文件缓存
open_file_cache max=102400 inactive=20s; # 设置打开文件缓存的最大文件数和缓存时间
open_file_cache_valid 30s; # 设置验证缓存有效性的频率
open_file_cache_min_uses 1; # 设置文件至少被访问的次数才被缓存
# Gzip 压缩优化
gzip on; # 启用 Gzip 压缩
gzip_min_length 256; # 设置压缩的最小文件长度
gzip_comp_level 5; # 设置压缩级别
gzip_types text/plain application/javascript application/json; # 设置需要压缩的 MIME 类型
# 定义限速 zone
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 定义限速区域,每个 IP 每秒最多 1 个请求
# 定义连接限制 zone
limit_conn_zone $binary_remote_addr zone=perip:10m; # 定义连接限制区域,每个 IP 最多 10 个并发连接
# 服务器块配置
server {
listen 80; # 监听 80 端口
server_name www.wenzi.com; # 设置服务器名称
# 静态资源配置
location / {
root /var/www/wwwroot/wenzi.com; # 设置网站根目录
index index.html index.htm; # 设置默认索引文件
}
# 设置静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 设置静态文件的缓存时间为 30 天
access_log off; # 关闭访问日志
add_header Cache-Control "public"; # 添加 Cache-Control 头
# 防盗链和防爬虫优化
valid_referers none blocked server_names ~\.(jpg|jpeg|png|gif|ico|css|js)$; # 设置有效的 Referer
if ($invalid_referer) {
return 403; # 如果 Referer 无效,返回 403 禁止访问
}
if ($http_user_agent ~* (bot|spider|crawl|slurp)) {
return 403; # 如果 User-Agent 匹配爬虫关键字,返回 403 禁止访问
}
}
# 禁止通过 IP 地址访问网站
if ($host = '') {
return 444; # 如果 Host 为空,返回 444 立即关闭连接
}
# 限制上传到资源目录的程序被访问
location ~* ^/uploads/.*\.php$ {
deny all; # 禁止访问 uploads 目录下的 PHP 文件
}
# FastCGI 参数优化
fastcgi_buffers 16 16k; # 设置 FastCGI 缓冲区数量和大小
fastcgi_buffer_size 32k; # 设置 FastCGI 缓冲区大小
fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=FASTCGI:10m max_size=1g inactive=60m; # 设置 FastCGI 缓存路径和参数
# 处理 PHP 请求
location ~ \.php$ {
include fastcgi_params; # 包含 FastCGI 参数文件
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 设置 FastCGI 代理地址
fastcgi_index index.php; # 设置默认的 PHP 索引文件
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 设置脚本文件路径
# 启用 FastCGI 缓存
fastcgi_cache FASTCGI; # 启用 FastCGI 缓存
fastcgi_cache_valid 200 60m; # 设置缓存的有效时间
}
# 日志配置
access_log /var/log/nginx/access.log main buffer=16k flush=10s; # 设置访问日志的路径、格式、缓冲区大小和刷新间隔
# 防止 DOS 攻击单 IP 并发连接的控制
limit_conn perip 10; # 限制每个 IP 地址的并发连接数为 10
# 限制请求速率
limit_req zone=one burst=10 nodelay; # 限制请求速率,允许突发请求
# 禁止恶意域名解析
if ($host != 'www.wenzi.com') {
return 444; # 如果 Host 不是 www.wenzi.com,返回 444 立即关闭连接
}
# 配置错误页面
error_page 404 /404.html; # 设置 404 错误页面
location = /404.html {
internal; # 设置 404 页面为内部页面
}
# 配置错误页面根据错误码指定网页反馈给用户
error_page 500 502 503 504 /50x.html; # 设置 500, 502, 503, 504 错误页面
location = /50x.html {
internal; # 设置 500, 502, 503, 504 页面为内部页面
}
}
# SSL 优化
server {
listen 443 ssl http2; # 监听 443 端口,启用 SSL 和 HTTP/2
server_name www.wenzi.com; # 设置服务器名称
ssl_certificate /etc/nginx/ssl/nginx.crt; # 设置 SSL 证书路径
ssl_certificate_key /etc/nginx/ssl/nginx.key; # 设置 SSL 证书密钥路径
ssl_protocols TLSv1.2 TLSv1.3; # 设置支持的 SSL 协议版本
ssl_ciphers HIGH:!aNULL:!MD5; # 设置支持的加密套件
# 其他 SSL 配置...
}
}