64 lines
1.9 KiB
Plaintext
64 lines
1.9 KiB
Plaintext
# 与 nginx/web.conf 保持同步;compose 挂载到 web 容器
|
||
server {
|
||
listen 80;
|
||
root /usr/share/nginx/html;
|
||
index index.html;
|
||
|
||
# 根路径下的验证文件走热加载目录
|
||
location ~ ^/([A-Za-z0-9._-]+\.(txt|html|xml))$ {
|
||
alias /verify-root/$1;
|
||
}
|
||
|
||
# 静态资源必须真实存在,避免错误回退成 index.html 导致白屏
|
||
location ^~ /assets/ {
|
||
try_files $uri =404;
|
||
access_log off;
|
||
expires 7d;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
|
||
# SPA 入口:勿长期缓存,否则发版后用户仍可能拿到旧 index
|
||
location = /index.html {
|
||
add_header Cache-Control "no-cache, no-store, must-revalidate";
|
||
expires -1;
|
||
}
|
||
|
||
# web/public 挂载到 /var/www/yh-public:与 dist 根目录同 URL(如 /logo.png),优先读挂载,无则回退 dist
|
||
location ~ ^/([^/]+\.(?:png|jpe?g|gif|ico|svg|webp|webmanifest))$ {
|
||
root /var/www/yh-public;
|
||
try_files /$1 @dist_root_public;
|
||
expires 7d;
|
||
add_header Cache-Control "public, max-age=604800";
|
||
}
|
||
location @dist_root_public {
|
||
root /usr/share/nginx/html;
|
||
try_files $uri =404;
|
||
expires 7d;
|
||
add_header Cache-Control "public, max-age=604800";
|
||
}
|
||
|
||
# web/public/social/ → 关注我们二维码等(挂载 /var/www/yh-public)
|
||
location ^~ /social/ {
|
||
alias /var/www/yh-public/social/;
|
||
expires 7d;
|
||
add_header Cache-Control "public, max-age=604800";
|
||
}
|
||
|
||
# 推广素材:含视频/封面等大文件,浏览器可长期缓存减轻二次访问流量
|
||
# 宿主机 ./web/promotion 挂载覆盖本路径,改素材后依赖 max-age 到期或用户强刷
|
||
location ^~ /promotion/ {
|
||
try_files $uri =404;
|
||
expires 7d;
|
||
add_header Cache-Control "public, max-age=604800";
|
||
}
|
||
|
||
location = / {
|
||
try_files /index.html =404;
|
||
}
|
||
|
||
# Vue SPA:直接访问 /test 等路径须落到 index.html,否则会 nginx 404
|
||
location / {
|
||
try_files $uri $uri/ /index.html;
|
||
}
|
||
}
|