Nginx静态文件服务器配置

手头有个前端项目要部署,或者想搭个图床、文件下载站,Nginx是最省事的方案。不废话,直接上配置。 基础静态文件服务 假设你的静态文件放在 /var/www/html,一个最简单的server块:
server {
    listen 80;
    server_name example.com;
    
    root /var/www/html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}
root指定文件根目录,index告诉Nginx当访问目录时默认找哪个文件。try_files这行意思是:先尝试按请求路径找文件,找不到就尝试加斜杠找目录,还找不到就返回404。 性能优化: expires和gzip 静态文件缓存能省不少带宽:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

location ~* \.(pdf|zip|tar\.gz)$ {
    expires 7d;
    add_header Cache-Control "public";
}
expires 30d告诉浏览器30天内不用重新请求。immutable更狠,连条件请求(If-Modified-Since)都不发。注意这个指令只对支持immutable的浏览器有效,但无害。 gzip压缩文本文件:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
gzip_vary on;
gzip_min_length 1000的意思是小于1KB的文件不压缩,因为压缩小文件反而开销大。 跨域配置 前端项目需要跨域加载资源:
location / {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods "GET, OPTIONS";
    
    if ($request_method = OPTIONS) {
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods "GET, OPTIONS";
        add_header Access-Control-Max-Age 86400;
        return 204;
    }
}
OPTIONS预检请求直接返回204,不查文件,速度快。 目录列表 需要文件下载站功能:
location /download/ {
    alias /data/files/;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
}
autoindex_exact_size off显示人类可读的文件大小(KB/MB),on显示精确字节数。autoindex_localtime on用服务器本地时间而不是UTC。 安全限制 防止用户访问敏感文件:
location ~ /\.git {
    deny all;
    return 404;
}

location ~ \.(env|config|sql|log)$ {
    deny all;
    return 404;
}

location ~* (\.php|\.asp|\.aspx|\.jsp)$ {
    deny all;
    return 404;
}
直接返回404而不是403,避免暴露存在性。 HTTPS配置 用Let’s Encrypt免费证书:
server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    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;
    
    # 其他location配置同上
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}
http2启用HTTP/2协议,多路复用能提升资源加载速度。 实际部署场景 我最近在雨云服务器上部署了一个前端项目,配置很简单。雨云的机器性价比不错,带宽也稳定,静态文件响应速度很快。如果你需要托管静态资源,可以试试他们的轻量云服务器,配置完Nginx直接跑起来,省心。 完整配置文件示例 把上面所有片段拼起来:
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    root /var/www/html;
    index index.html;
    
    gzip on;
    gzip_types text/css application/javascript text/plain;
    gzip_min_length 1000;
    
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
    
    location ~ /\.git {
        deny all;
        return 404;
    }
}
注意try_files的/index.html,这是SPA应用的典型配置,所有404路径都返回index.html,让前端路由处理。 配置完记得测试语法:nginx -t,没问题就nginx -s reload。

雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容