
直接用 server 块托管全站静态页面,核心是让 Nginx 以文件系统为源头,不经过任何后端或代理,原样读取并返回 HTML、CSS、JS、图片等资源。关键不在“多”,而在“准”——路径匹配要干净,索引要明确,权限和 MIME 类型要到位。
基础 server 块:监听 + 根目录 + 默认首页
这是最简但完整的托管结构:
-
监听端口:通常用
listen 80;(HTTP)或listen 443 ssl;(HTTPS,需配证书) -
域名识别:用
server_name example.com www.example.com;,支持多个,也可写localhost或 IP 用于本地调试 -
根目录设定:用
root /var/www/my-site;—— 注意这是“前缀路径”,不是完整映射;所有请求的 URI 会拼在该路径后查找文件 -
默认首页:加
index index.html index.htm;,Nginx 会在请求目录时自动尝试这些文件
关键 location 配置:避免 404 和路径错位
全站静态,不需要复杂路由,但必须防住两个常见坑:
-
显式处理根路径:加
location = / { try_files $uri $uri/ /index.html; },确保访问/时能命中index.html,而不是因目录无索引报 403/404 -
通用静态文件兜底:用
location / { try_files $uri $uri/ =404; }—— 这句保证:请求存在文件就发,是目录且含索引就进,否则直接 404,绝不甩给后端 -
禁止敏感路径暴露:比如加
location ~ /\.ht { deny all; },防止 .htaccess 等配置文件被下载
静态资源优化补充项(非必需但推荐)
提升加载速度和安全性,几行就能生效:
-
启用 gzip 压缩:在
http块中开启gzip on;,并配置gzip_types text/plain text/css application/javascript image/svg+xml; -
设置缓存头:在
location中加expires 1y;(对 JS/CSS/图片等不变资源),或expires 10m;(对 HTML 可设短些) -
校验文件权限:确保 Nginx 工作用户(如
www-data或nginx)有读取root目录及其子文件的权限,否则日志里会报Permission denied
一个可直接用的最小可用示例
把下面内容保存为 /etc/nginx/conf.d/static.conf,替换路径和域名后重载即可:
server {
listen 80;
server_name example.com;
root /var/www/my-site;
index index.html index.htm;
location = / {
try_files $uri $uri/ /index.html;
}
location / {
try_files $uri $uri/ =404;
}
location ~ /\.ht {
deny all;
}
}
确认文件放对位置、Nginx 有读权限、配置语法无误(sudo nginx -t),再执行 sudo systemctl reload nginx。


















