Nginx配置静态博客子路径路由时静态资源404问题求助
问题原因
你遇到的问题核心是 Hexo 生成的静态页面中所有静态资源引用为根路径绝对路径(如 /lib/xxx.css、/js/xxx.js),当你通过 /blog/ 路径访问博客时,浏览器会直接请求域名根路径下的这些资源,匹配到 Nginx 中 / 对应的主站目录,不会触发 /blog/ 的 location 规则,因此找不到对应资源。
解决方案
方案1:修改 Hexo 配置(推荐,兼容性最佳无冲突)
直接修改 Hexo 站点根目录下的配置文件 _config.yml,调整 root 字段为你的博客访问子路径:
root: /blog/
修改完成后执行 hexo clean && hexo generate 重新生成静态文件,此时所有静态资源的引用路径会自动加上 /blog/ 前缀,可直接匹配到 /blog/ 的 location 规则,从 /var/www/hexo/ 目录读取资源。
方案2:修改 Nginx 配置(无需调整 Hexo 时可选)
如果不想修改 Hexo 配置,可以在 /etc/nginx/conf.d/nginx.conf 的 443 端口 server 块中补充静态资源映射规则:
server { listen 443 ssl; server_name dengxiaoxu.com; # 原有SSL配置保持不变 location / { root /home/deng/www/; index index.html index.htm; } location /blog/ { alias /var/www/hexo/; index index.html index.htm; } # 新增以下规则,匹配博客的静态资源路径 location ~ ^/(css|js|lib|images|2018|2020|2021|about|archives|categories|page|tags)/ { root /var/www/hexo/; # 若资源不存在可回退到主站目录查找,不需要可删除下一行 try_files $uri $uri/ @main; } location @main { root /home/deng/www/; } }
修改后执行 nginx -t 检查配置语法无错误后,执行 nginx -s reload 重载 Nginx 配置即可生效。
注意:该方案存在路径冲突风险,若你的主站也存在同名的
/css、/js等目录,会优先匹配博客侧的资源,因此更推荐使用方案1。
内容的提问来源于stack exchange,提问作者Austin Deng
相关产品推荐
相关产品推荐

