手头有个前端项目要部署,或者想搭个图床、文件下载站,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



暂无评论内容