Nginx托管静态资源依赖原生文件服务机制而非FastCGI,需通过独立location块、精准root/alias配置、缓存与压缩优化实现高效动静分离。
FastCGI 本身不处理静态资源,它是为动态内容(如 PHP、Python 脚本)设计的协议。Nginx 托管静态资源靠的是 原生文件服务机制,不是 FastCGI。所以“用 FastCGI 配置静态资源”这个说法存在概念混淆——你需要做的是:让 Nginx 绕过 FastCGI 流程,直接读取并返回静态文件,这才是真正的加速关键。
常见错误是把所有请求(包括 .js、.css、图片)都匹配到 location ~ .php$ 或类似正则里,导致静态文件被错误转发给 PHP-FPM,白白增加延迟和负载。
location 块,例如:location ~* .(js|css|png|jpg|gif|ico|svg|woff2?)$ {
root /var/www/html;
expires 1y;
add_header Cache-Control "public, immutable";
}
location ~ .php$ 之前,因为 Nginx 按顺序匹配,先命中就不再继续。~*(大小写不敏感)和精确后缀列表,比模糊匹配更安全高效。静态文件能否被快速找到,取决于 root 或 alias 的路径是否与 URL 路径严格对齐。
root:URL 中的路径会拼接到 root 后面。例如 location /static/ { root /data; },访问 /static/logo.png 实际查找 /data/static/logo.png。
alias:URL 中的匹配部分会被完全替换。例如 location /static/ { alias /data/assets/; },访问 /static/logo.png 实际查找 /data/assets/logo.png。
dist)推荐用 root + try_files,例如:location / { root /var/www/myapp/dist; try_files $uri $uri/ /index.html; }
托管静态资源不只是“能访问”,更要“快且省”。
access_log off; 放在静态 location 块内,降低磁盘写入压力。gzip on; 和 gzip_types text/css application/javascript;
expires 1y; 配合 Cache-Control 头,让浏览器长期复用,减少请求数。sendfile on;(默认通常已开,确认即可)。部署后务必检查两点,避免“以为加速了,实则仍走后端”:
200,且没有出现在 PHP-FPM 日志中;curl -I http://your.site/style.css 检查响应头,确认含 Content-Length、Cache-Control,且无 X-Powered-By: PHP 等动态标识。