Astro 构建出的纯静态站点非常适合放到 nginx 上。
本地构建
npm install
npm run build
# 产物在 dist/
构建前确认 astro.config.mjs 里的 site 是真实域名,否则 sitemap 和 hreflang 链接会指向错误地址。
上传到服务器
rsync -avz --delete dist/ user@server:/var/www/blog/
nginx 站点配置
/etc/nginx/sites-available/blog.conf:
server {
listen 80;
server_name blog.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name blog.example.com;
root /var/www/blog;
index index.html;
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
# 静态资源长缓存
location ~* \.(js|css|png|jpg|svg|woff2|ico)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# 干净 URL 的支持
location / {
try_files $uri $uri/ $uri.html =404;
}
}
启用并签发证书
sudo ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d blog.example.com
自动更新流程
服务器上写一个部署脚本 deploy.sh:
#!/usr/bin/env bash
set -e
cd /path/to/blog
git pull
npm ci
npm run build
rsync -avz --delete dist/ /var/www/blog/
配合 cron 或 Webhook 即可实现”推送即发布”。
常见问题
- 刷新 404:确认
try_files包含$uri.html - 资源 404:
base配置非/时需要手动处理资源前缀 - Sitemap 域名不对:检查
astro.config.mjs的site