Nginx 配置静态网站

静态网站指内容固定、无需后端计算的站点(HTML/CSS/JS/图片)。Nginx 处理静态文件是它的强项:配一个 server 块,指定根目录与首页即可上线。

最小 server 块

在 conf.d 下新建站点配置(如 /etc/nginx/conf.d/mysite.conf):

server {
    listen       80;
    server_name  mysite.com www.mysite.com;   # 多个域名用空格分隔
    root         /var/www/mysite;             # 站点根目录(磁盘真实路径)
    index        index.html;                  # 默认首页(详见第 07 章)

    location / {
        try_files $uri $uri/ =404;
    }
}

准备目录与首页并使其生效:

sudo mkdir -p /var/www/mysite
echo '<h1>我的第一个静态站点</h1>' | sudo tee /var/www/mysite/index.html
sudo nginx -t && sudo systemctl reload nginx

浏览器访问 http://服务器IP/mysite 对应的域名即可看到页面。

监听端口与 server_name

  • listen 指定地址与端口:listen 80、listen 8080、listen 192.168.1.10:80 均可。
  • server_name 匹配请求的 Host 头:支持精确域名、通配符(*.example.com)与正则(~^www..+.com$)。
  • 没有 server_name 命中时,请求落入该端口上第一个 server(或显式声明的 default_server)。

用访问日志验证

请求是否真的由 Nginx 响应、命中了哪个站点,看访问日志最直观:

curl -I http://127.0.0.1/          # 先发起一次请求
tail -f /var/log/nginx/access.log  # 观察新记录
# 输出:127.0.0.1 - - [10/Jan/2024:09:30:01 +0800] "GET / HTTP/1.1" 200 257 "-" "curl/8.5.0"

返回 200 且字节数大于 0 即说明站点正常服务。

location 中 root 与 alias 的区别

root 与 alias 拼接区别 root 与 alias 都在 location 内指定文件来源,拼接规则却完全不同:

location /img/ { root  /var/www/static; }   # /img/a.png → /var/www/static/img/a.png
location /img/ { alias /var/www/pic/; }     # /img/a.png → /var/www/pic/a.png

规律:root 把整段请求 URI 拼在目录后(URI 前缀原样保留);alias 用其值整体替换掉 location 匹配到的那段前缀。两者混用是最常见的路径 404 原因,第 06 章会再对比。

防盗链简述

不想让别的网站直接引用你的图片,可用 Referer 校验拦截非本站来源:

location ~* \.(png|jpg|jpeg|gif|webp)$ {
    valid_referers none blocked *.mysite.com;   # 允许空 Referer 与本站域名
    if ($invalid_referer) {
        return 403;                             # 盗链来源一律 403
    }
}

小结:静态站点核心是 server + root + index 三件套;请求落到哪个文件由 root/alias 决定,是否被正确服务看 access.log 验证。想进一步精确控制 URL 与磁盘路径的对应关系,下一章学习 location 匹配规则。

笔记加载中…