Nginx 完全指南:入门、核心功能与高阶运维全解析

发布时间:2026/6/22 8:43:35

Nginx 完全指南:入门、核心功能与高阶运维全解析 第一章引言深度补全为什么是 Nginx除了高并发C10K 问题解决者它还是七层负载均衡和四层流代理Stream 模块的全能选手。内存占用极低几 MB 可支撑上万连接。适用场景细化前端入口SPA 应用路由分发try_files。API 网关结合proxy_pass将/api/转发至后端微服务。静态资源 CDN 前置利用expires和add_header Cache-Control实现强缓存。WebSocket 长连接需要配置proxy_http_version 1.1和Upgrade头。环境准备建议推荐Ubuntu 22.04 LTS或CentOS 7。需要掌握vim/nano编辑、netstat -tlnp查看端口占用。第二章基础篇——安装与架构架构补充说明Master 进程以 root 运行读取配置、绑定 80/443 端口Worker 进程以普通用户如www-data运行极大增强安全性。源码编译关键参数详解这是面试高频./configure --prefix/usr/local/nginx \ --with-http_ssl_module \ # 开启 HTTPS --with-http_v2_module \ # 开启 HTTP/2 --with-http_realip_module \ # 获取真实 IP --with-http_stub_status_module \ # 监控状态页 --with-stream \ # 开启 TCP/UDP 代理四层负载 --with-http_gzip_static_module # 预压缩静态文件第三章Nginx 目录结构及文件作用全解这里以Ubuntu/Debian 系APT安装的典型结构为例这是最通用的标准。源码编译安装路径会略有不同通常在/usr/local/nginx但核心逻辑一致。1. 根目录总览 (/etc/nginx/)text/etc/nginx/ ├── nginx.conf # 主配置文件入口 ├── conf.d/ # 全局通用配置片段目录 ├── sites-available/ # 所有可用的虚拟主机站点配置 ├── sites-enabled/ # 当前激活的站点配置软链接指向 sites-available ├── modules-enabled/ # 动态加载的模块目录软链接 ├── modules-available/ # 可用的动态模块目录 ├── snippets/ # 可复用的配置片段如 SSL、限流、跨域等 ├── mime.types # MIME类型映射表文件扩展名 - Content-Type ├── fastcgi_params # FastCGI 标准参数用于 PHP 等 ├── uwsgi_params # uWSGI 标准参数用于 Python 等 ├── scgi_params # SCGI 标准参数 ├── proxy_params # 反向代理标准头参数如 X-Forwarded-For └── koi-utf / koi-win / win-utf # 编码转换映射表处理非UTF-8字符集2. 核心文件与目录的作用详解文件/目录核心作用使用频率nginx.conf总枢纽。定义全局运行参数worker_processes、事件模型events和顶层 HTTP 块。最后通过include指令加载sites-enabled/*和conf.d/*。⭐⭐⭐⭐⭐sites-available/配置仓库。存放所有业务站点的完整server{}配置块文件如example.com.conf。文件通常按域名命名方便管理。⭐⭐⭐⭐⭐sites-enabled/激活开关。只包含指向../sites-available/的软链接。Nginx 默认只加载此目录下的文件。这种设计让你可以方便地“启用/禁用”站点ln -s/rm而无需删除原始配置。⭐⭐⭐⭐⭐conf.d/通用补充。存放非虚拟主机类的全局配置片段如upstream负载池定义、全局限流规则等。也可放独立站点但官方更推荐sites-*。⭐⭐⭐⭐snippets/乐高积木。存放可复用的配置块。最典型的用法是存放SSL 证书配置ssl-cert.conf或安全头配置security-headers.conf然后在各个server中用include snippets/ssl.conf;一键引用。⭐⭐⭐⭐mime.types类型词典。将文件后缀如.html、.css、.js映射为浏览器能识别的 MIME 类型。Nginx 通过它设置Content-Type响应头。⭐⭐一般不动proxy_params代理头模板。通常包含proxy_set_header Host $host、proxy_set_header X-Real-IP $remote_addr等标准代理头。使用proxy_pass时顺手include proxy_params;可保证后端拿到真实 IP。⭐⭐⭐⭐fastcgi_paramsCGI 环境变量。传递SCRIPT_FILENAME、QUERY_STRING等给 PHP-FPM。通常配合fastcgi_pass使用。⭐⭐⭐3. 运行时关键目录非/etc下路径作用/usr/sbin/nginxNginx 二进制主程序启动/重载命令来源/var/log/nginx/日志存放目录access.log和error.log/var/www/html/默认的网页根目录Debian/Ubuntu 默认/etc/init.d/nginxSystem V 初始化脚本service nginx start/lib/systemd/system/nginx.serviceSystemd 服务单元文件systemctl管理4.四个核心场景的配置片段示例 1基础静态页面 动静分离# /etc/nginx/sites-available/my-static-site.conf server { # 监听 80 端口IPv4 和 IPv6 listen 80; listen [::]:80; # 域名绑定 server_name www.myblog.com myblog.com; # 站点根目录 root /var/www/myblog/html; # 默认首页优先顺序 index index.html index.htm; # ----- 处理静态资源图片/CSS/JS并开启缓存 ----- location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg)$ { expires 30d; # 设置浏览器缓存 30 天 add_header Cache-Control public, immutable; access_log off; # 关闭静态资源访问日志减少磁盘 IO log_not_found off; # 不记录 404 错误日志 } # ----- 处理前端路由SPA 历史模式 ----- location / { try_files $uri $uri/ /index.html; # 如果请求的文件不存在则返回 index.html交给前端路由处理 } # ----- 动静分离将 /api/ 请求转发到后端 Java/Go 服务 ----- location /api/ { proxy_pass http://localhost:8080/api/; # 注意末尾带 / 表示替换掉 /api/不带 / 则完整转发 include proxy_params; # 自动引入标准代理头X-Real-IP等 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } # ----- 错误页面自定义 ----- error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location /50x.html { root /var/www/myblog/html; } }示例 2负载均衡Upstream HTTPS 强制跳转# 定义上游服务器池放在 /etc/nginx/conf.d/upstream.conf 更合适 upstream backend_app { # 负载均衡算法加权轮询 server 192.168.1.10:8080 weight5 max_fails3 fail_timeout30s; server 192.168.1.11:8080 weight3 max_fails3 fail_timeout30s; server 192.168.1.12:8080 weight2 max_fails3 fail_timeout30s; # 健康检查商业版支持主动探测开源版依赖被动探测 # keepalive 32; # 开启长连接池减少握手开销需搭配 proxy_http_version 1.1 } # ---- HTTP 服务强制跳转 HTTPS ---- server { listen 80; listen [::]:80; server_name api.mycompany.com; # 返回 301 永久重定向到 HTTPS return 301 https://$server_name$request_uri; } # ---- HTTPS 服务实际业务 ---- server { listen 443 ssl http2; # 开启 SSL 和 HTTP/2 协议 listen [::]:443 ssl http2; server_name api.mycompany.com; # ---------- SSL 证书配置强烈建议使用 sniper/全链证书 ---------- ssl_certificate /etc/ssl/certs/fullchain.pem; # 公钥 中间证书 ssl_certificate_key /etc/ssl/private/privkey.pem; # 私钥权限设为 600 # 安全加密套件2024年主流标准 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; # 会话缓存优化减少握手时间 ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; ssl_session_tickets off; # 为了更好的前向安全性建议关闭 # ---------- 反向代理到后端 Upstream ---------- location / { proxy_pass http://backend_app; # 引用上面定义的 upstream 组 # 核心代理头设置 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; # 告诉后端当前是 HTTP 还是 HTTPS # 超时与缓冲 proxy_connect_timeout 75s; proxy_send_timeout 75s; proxy_read_timeout 75s; proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_busy_buffers_size 8k; # 错误时尝试下一台服务器 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; } # 健康检查状态页可选需编译 stub_status 模块 location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; # 只允许本机查看 deny all; } }示例 3限流防 CC 攻击与访问控制# 放置在 /etc/nginx/conf.d/security.conf # 1. 定义限流区域基于 $binary_remote_addr内存 10M limit_req_zone $binary_remote_addr zonemylimit:10m rate10r/s; # 表示每秒允许 10 个请求超出后排队 # 2. 定义连接数限制每个 IP 最多同时 20 个连接 limit_conn_zone $binary_remote_addr zoneaddr:10m; server { listen 80; server_name myapi.com; location /api/ { # 应用限流burst20 允许突然爆发 20 个请求排队nodelay 让队列不等待直接响应 limit_req zonemylimit burst20 nodelay; limit_conn addr 20; # 同一 IP 仅允许 20 个并发连接 # 白名单放行比如内部监控系统 allow 192.168.1.100; allow 10.0.0.0/8; deny all; # 禁止其他 IP 访问敏感接口 proxy_pass http://backend; } }示例 4WebSocket 代理配置server { listen 443 ssl http2; server_name ws.myapp.com; location /ws/ { proxy_pass http://websocket_backend; proxy_http_version 1.1; # WebSocket 必须 1.1 proxy_set_header Upgrade $http_upgrade; # 升级协议 proxy_set_header Connection upgrade; # 保持连接升级 # 长连接必须加大超时默认 60s 不够 proxy_read_timeout 300s; proxy_connect_timeout 75s; # 同样传递真实 IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }第四章核心配置篇语法精讲location 匹配优先级重难点精确匹配最高立即停止^~前缀匹配若匹配不再检查正则~区分大小写正则和~*不区分普通前缀匹配最长匹配原则建议配图或写例子location /与location /的区别。核心功能实战配置逻辑拆解静态服务器优化sendfile on;充分利用 Linux 零拷贝。tcp_nopush on;配合sendfile在数据包达到最大时才发送提升网络效率。Gzip 必须开启gzip_types text/plain text/css application/json ...。反向代理重点缓冲区proxy_buffering on;可将后端响应缓冲到磁盘/内存避免慢客户端拖慢后端。重定向处理proxy_redirect default;修复后端 302 跳转时的 Location 头。负载均衡调度场景ip_hash有致命缺点会导致负载严重不均某 IP 段请求多就压垮某台机器现代微服务推荐Redis/Token 集中管理 Session配合least_conn。down和backup配合运维手动下线服务器。HTTPS 安全配置现代标准必须禁用弱加密ssl_ciphers HIGH:!aNULL:!MD5;。开启ssl_prefer_server_ciphers on;由服务端决定加密套件。使用全链证书(fullchain.pem) 避免中间证书缺失报错。高阶应用限流算法limit_req使用Leaky Bucket漏桶算法burst参数代表瞬时突发队列长度nodelay参数会让排队请求立即处理但消耗令牌。建议生产必须配置防 CC 攻击。Rewrite 规则陷阱break和last的区别——last会重走一遍 location 匹配容易死循环break则只在当前上下文处理。WebSocket 关键后端若支持 WSproxy_read_timeout必须设大如 300s否则长连接会被 Nginx 强行断开。第五章运维实战速查平滑重启修改配置后nginx -t nginx -s reload零停机更新。热升级二进制替换kill -USR2 旧MasterPID和kill -WINCH 旧MasterPID可实现不停服更换 Nginx 版本。日志切割配合logrotate工具防止日志撑爆磁盘。# /etc/logrotate.d/nginx # 这是 logrotate 工具的配置文件用于管理 Nginx 日志的轮转切割、归档和清理。 # 将此文件放在 /etc/logrotate.d/ 目录下logrotate 会自动加载并执行。 /var/log/nginx/*.log { # 定义需要轮转的日志文件路径匹配该目录下所有 .log 结尾的文件 daily # 日志轮转周期为每天即每天凌晨检查并执行一次切割 missingok # 如果待轮转的日志文件不存在不报错直接跳过避免 cron 任务报错 rotate 52 # 最多保留 52 个归档文件由于是 daily即保留最近 52 天的日志 compress # 对轮转下来的旧日志文件启用 gzip 压缩大幅节省磁盘空间 delaycompress # 延迟压缩配合 compress 使用最新轮转出的那个归档文件暂不压缩 # 等到下次轮转时再压缩。这给了一些调试工具如 less、tail查看最新归档的时间 # 也防止 postrotate 脚本还在写入时就压缩导致冲突。 notifempty # 如果日志文件为空大小为 0则不执行轮转操作避免产生空归档 create 640 www-data adm # 轮转完成后新建一个空的日志文件以继续写入。 # 640 是文件权限属主读写属组只读其他人无权限 # www-data 是属主Nginx 进程运行用户 # adm 是属组通常用于系统监控日志组。 postrotate # 轮转操作完成后执行以下自定义脚本endscript 结束 # 检查 Nginx 的 PID 文件是否存在/var/run/nginx.pid 是默认存储路径 [ -f /var/run/nginx.pid ] kill -USR1 cat /var/run/nginx.pid # 如果 PID 文件存在则向 Nginx 主进程发送 USR1 信号。 # 信号 USR1 是 Nginx 的专用信号作用是“重新打开日志文件”。 # 这一步至关重要轮转已经把原日志重命名如 access.log.1 # 如果不发此信号Nginx 会继续往重命名后的旧文件里写日志 # 发送 USR1 后Nginx 会重新打开当前路径下的 access.log即 create 创建的新文件 # 从而实现“切割后无缝续写”完全不需要重启 Nginx 服务。 endscript # 自定义脚本结束标记 }第六章nginx.conf 全功能示例文件它将作为一个现代 Web 应用的统一入口涵盖静态服务、反向代理、负载均衡、HTTPS、缓存、限流、重写、WebSocket、FastCGIPHP、状态监控、Gzip、访问控制等主流技术。每一行都带有详尽中文注释说明其用途和适用场景。配置要点速览帮助你向读者解释功能分类关键指令/模块作用HTTPS/SSLlisten 443 ssl http2ssl_certificatessl_protocolsssl_ciphers提供加密传输和 HTTP/2 支持静态缓存expires 30dadd_header Cache-Control减少客户端重复请求加速加载反向代理proxy_passproxy_set_headerproxy_cache隐藏后端细节实现负载均衡与缓存负载均衡upstreamserver权重/健康检查流量分发提高可用性WebSocketproxy_http_version 1.1Upgrade/Connection支持实时通信PHP 解析location ~ \.php$fastcgi_pass对接 PHP-FPM 运行动态脚本限流限连limit_reqlimit_conn保护后端免受 CC 攻击或突发流量访问控制allow/deny基于 IP 的权限管理URL 重写rewritereturn规范化 URL 或重定向旧链接状态监控stub_status实时查看连接数、请求状态等Gzipgzip ongzip_types压缩文本响应节省带宽日志管理access_logerror_log记录访问和错误信息便于排障安全头add_headerHSTS、X-Frame-Options 等提升站点安全等级# # nginx.conf — 全功能示例注释版 # 适用环境Ubuntu/DebianAPT 安装 # 也适用于大多数 Linux 发行版路径可能微调。 # # ------------------- 1. 全局配置Main Context ------------------- # 指定 Nginx 运行的用户和组通常为 www-data 或 nginx user www-data; # 工作进程数通常设置为 CPU 核心数auto 可自动检测 worker_processes auto; # 错误日志存放路径及级别可选 debug/info/notice/warn/error/crit/alert/emerg error_log /var/log/nginx/error.log warn; # 主进程 PID 文件位置供管理命令使用 pid /var/run/nginx.pid; # 动态加载的模块如需额外编译的模块在此引入 # include /usr/share/nginx/modules/*.conf; # ------------------- 2. 事件驱动Events Context ------------------- events { # 每个工作进程最大并发连接数根据系统 ulimit -n 调整 worker_connections 1024; # 使用 epoll 事件模型Linux 最高效其它系统可换 kqueue 等 use epoll; # 一次系统调用可接受多个新连接提升性能 multi_accept on; } # ------------------- 3. HTTP 核心HTTP Context ------------------- http { # ---------- 基础设置 ---------- # 引入 MIME 类型映射文件将扩展名映射为 Content-Type 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; # 启用 sendfile零拷贝高性能文件传输 sendfile on; # 与 sendfile 配合在数据包达到最大时才发送减少网络包数量 tcp_nopush on; # 保持长连接的超时时间秒 keepalive_timeout 65; # 客户端请求头缓冲大小防止大请求头丢失 client_header_buffer_size 1k; large_client_header_buffers 4 4k; # 客户端请求体最大大小限制上传文件大小默认 1M client_max_body_size 20M; # ---------- Gzip 压缩 ---------- # 启用 gzip 压缩文本类资源压缩比极高 gzip on; # 最低压缩阈值小于此大小的文件不压缩节省 CPU gzip_min_length 1k; # 压缩缓冲区大小 gzip_buffers 4 16k; # HTTP 协议版本1.1 以上才支持压缩 gzip_http_version 1.1; # 压缩级别1~9级别越高压缩比越大但耗 CPU建议 6 gzip_comp_level 6; # 压缩的文件类型文本类均需压缩 gzip_types text/plain text/css text/xml application/javascript application/json application/xmlrss image/svgxml; # 对 IE6 等旧浏览器禁用 gzip它们不支持 gzip_disable msie6; # 向前端代理添加 Vary: Accept-Encoding 头部告知缓存服务器根据编码区分 gzip_vary on; # ---------- 代理缓存全局设置 ---------- # 定义缓存路径、级别、最大大小和失效时间 proxy_cache_path /var/cache/nginx levels1:2 keys_zonemy_cache:10m max_size1g inactive60m use_temp_pathoff; # ---------- 限流区域定义 ---------- # 基于客户端 IP 的请求频率限流每秒 10 个请求 limit_req_zone $binary_remote_addr zonereq_limit:10m rate10r/s; # 基于客户端 IP 的并发连接数限制每个 IP 最多 20 个 limit_conn_zone $binary_remote_addr zoneconn_limit:10m; # ---------- 上游服务池定义负载均衡 ---------- # 后端 API 服务器池轮询 权重 upstream api_backend { # 默认轮询算法可指定权重 server 192.168.1.10:8080 weight5 max_fails3 fail_timeout30s; server 192.168.1.11:8080 weight3 max_fails3 fail_timeout30s; server 192.168.1.12:8080 weight2 max_fails3 fail_timeout30s backup; # 备用节点 } # WebSocket 后端服务池长连接开启 keepalive upstream ws_backend { server 192.168.1.20:8081; server 192.168.1.21:8081; keepalive 32; # 每个 worker 保持的空闲长连接数 } # ---------- 虚拟主机 Server 块 ---------- # ---------------------------------------------------------------- # Server 1HTTP80强制跳转到 HTTPS # ---------------------------------------------------------------- server { listen 80; listen [::]:80; server_name www.myapp.com myapp.com; # 将所有 HTTP 请求重定向到 HTTPS永久重定向 301 return 301 https://$server_name$request_uri; } # ---------------------------------------------------------------- # Server 2HTTPS443主要业务服务 # ---------------------------------------------------------------- server { listen 443 ssl http2; # 开启 SSL 和 HTTP/2 协议 listen [::]:443 ssl http2; server_name www.myapp.com myapp.com; # ---------- SSL/TLS 安全配置 ---------- # 证书路径全链证书包含中间证书 ssl_certificate /etc/ssl/certs/fullchain.pem; ssl_certificate_key /etc/ssl/private/privkey.pem; # 私钥权限 600 # 支持的 TLS 协议版本禁用过时的不安全协议 ssl_protocols TLSv1.2 TLSv1.3; # 加密套件优先使用现代安全套件 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; # 优先使用服务器端定义的套件顺序而非客户端 ssl_prefer_server_ciphers on; # SSL 会话缓存提升握手效率 ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; ssl_session_tickets off; # 禁用 session ticket增强前向安全性 # 启用 OCSP Stapling减少浏览器验证证书的延迟 ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/ssl/certs/trusted-ca-bundle.crt; resolver 8.8.8.8 8.8.4.4 valid300s; resolver_timeout 5s; # 添加安全响应头防范常见攻击 add_header Strict-Transport-Security max-age31536000; includeSubDomains; preload always; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options DENY; add_header X-XSS-Protection 1; modeblock; # ---------- 根目录与静态文件服务 ---------- # 设置网站根目录 root /var/www/myapp/html; # 默认首页按顺序查找 index index.html index.htm index.php; # 处理静态资源CSS/JS/图片——设置强缓存减轻服务器压力 location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2?|ttf|eot)$ { expires 30d; # 浏览器缓存 30 天 add_header Cache-Control public, immutable; access_log off; # 关闭静态资源访问日志减少 I/O log_not_found off; # 不记录 404 错误 } # 处理前端路由SPA 单页应用所有不存在的路径回退到 index.html location / { try_files $uri $uri/ /index.html; } # ---------- 反向代理API 服务负载均衡 ---------- location /api/ { # 代理到上游负载均衡池 proxy_pass http://api_backend/api/; # 末尾带 / 表示替换路径前缀 # 引入标准代理头设置X-Real-IP, X-Forwarded-For 等 include proxy_params; # 额外自定义头部 proxy_set_header X-Forwarded-Proto $scheme; # 告知后端原始协议 proxy_set_header Host $host; # 超时设置 proxy_connect_timeout 75s; proxy_send_timeout 75s; proxy_read_timeout 75s; # 启用代理缓存使用上面定义的缓存区 proxy_cache my_cache; proxy_cache_key $scheme$request_method$host$request_uri; # 缓存键 proxy_cache_valid 200 302 60m; # 正常响应缓存 60 分钟 proxy_cache_valid 404 1m; # 404 缓存 1 分钟避免频繁回源 proxy_cache_use_stale error timeout updating http_500 http_502 http_503; proxy_cache_background_update on; # 后台异步更新过期缓存 proxy_cache_lock on; # 防止并发回源缓存穿透 # 缓冲区配置提升性能 proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_busy_buffers_size 8k; # 错误时尝试下一台服务器 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; } # ---------- WebSocket 代理长连接 ---------- location /ws/ { proxy_pass http://ws_backend/ws/; # 此处需与后端 WebSocket 路径一致 # WebSocket 必须 HTTP/1.1 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; # 超时时间加长默认 60s 不够 proxy_read_timeout 300s; proxy_connect_timeout 75s; # 传递真实客户端信息 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } # ---------- 动态 PHP 处理FastCGI ---------- # 匹配所有 .php 文件请求 location ~ \.php$ { # 注意此处若使用 try_files 会检查文件是否存在防止空脚本攻击 try_files $uri 404; # FastCGI 参数设置引入标准参数 include fastcgi_params; # 将请求传递给 PHP-FPMUnix Socket 或 TCP fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 或 127.0.0.1:9000 # 指定脚本文件名 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 超时 fastcgi_connect_timeout 60s; fastcgi_send_timeout 60s; fastcgi_read_timeout 60s; # 缓冲 fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; # 缓存 FastCGI 结果可选 # fastcgi_cache my_cache; # fastcgi_cache_valid 200 60m; } # ---------- 访问控制与限流示例 ---------- # 管理后台/admin限制 IP 访问 限流 location /admin/ { # 仅允许内网 IP 访问示例 allow 192.168.1.0/24; allow 10.0.0.0/8; deny all; # 禁止其他所有 IP # 应用限流每秒 5 个请求突发 10 个排队 limit_req zonereq_limit burst10 nodelay; limit_conn conn_limit 10; # 每个 IP 最多 10 个并发 # 代理到后端管理服务或直接本地目录 proxy_pass http://api_backend/admin/; } # ---------- 重写规则示例 ---------- # 将旧版 URL 永久重定向到新格式SEO location /old-products/ { rewrite ^/old-products/(.*)$ /new-products/$1 permanent; } # 简单跳转如 /about - /company/about location /about { return 301 /company/about; } # ---------- Nginx 状态监控需编译 stub_status 模块 ---------- location /nginx_status { stub_status on; access_log off; # 仅允许内网或本机查看 allow 127.0.0.1; allow 192.168.1.0/24; deny all; } # ---------- 自定义错误页面 ---------- error_page 404 /404.html; location /404.html { root /var/www/myapp/html/errors; internal; # 只能内部访问 } error_page 500 502 503 504 /50x.html; location /50x.html { root /var/www/myapp/html/errors; internal; } } # ---------------------------------------------------------------- # 可选的其它 Server 块如 API 子域名、静态 CDN 等可继续添加 # ---------------------------------------------------------------- # ---------- 包含其它配置片段方便管理 ---------- include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; # Debian/Ubuntu 风格 }

相关新闻