nginx 配置二级目录网站,访问静态资源 404

266 天前
 florentino

前言

现在有两个网站需要部署,域名分别是: xyz.com,xyz.com/science 网站资源分别放在 ng 下的, admin 和 science 目录

ng 的配置如下:

server {
    listen 80;
    server_name xyz.com;  # 

    location / {
       root  /usr/share/nginx/admin;
    }

    location /science {
        alias /usr/share/nginx/science;
    }
}

遇到的问题

前端有一些静态资源需要加载,静态资源放在网站资源目录下的 assert 目录中,比如

/usr/share/nginx/admin/assert

/usr/share/nginx/science/assert

前端配置静态文件 src 的路径是 /assert/xxx.js

当访问 xyz.com/science 网站时,页面请求静态资源直接请求 xyz.com/assert/xxx.js

但是正确的请求应该是: xyz.com/science/assert/xxx.js

为什么浏览器发出请求的时候会丢掉二级目录呢

以及 ng 要怎么配置呢

感谢各位大佬

1715 次点击
所在节点    NGINX
11 条回复
dingdangnao
266 天前
你写 assert/xxx.js 呗
alexsz
266 天前
我不是前端,我司有类似的项目,让前端同学在 science 项目打包时加个路由前缀就可以了
zx9481
266 天前
什么前端 vue 还是?
zack5337
266 天前
打包配置文件设置 publicPath: /science
javalaw2010
266 天前
因为打包工具并不知道你的网站部署的时候是在二级目录下,这个跟 ng 配置关系不大,主要是要修改打包的配置,解决方案参考 #2 。也许你可以试试把`/assert/xxx.js`改为`assert/xxx.js`。
dier
266 天前
我的建议是写两个 server ,用不同的 server_name 来区分。两个 server 中都只配置 localtion /
namelesswryyy
266 天前
/assert/xxx.js 绝对路径,
assert/xxx.js 相对路径
改成相对路径试试
lalalaqwer
266 天前
不知道你网站前端什么写的,放在 xyz.com/science 下的网站静态打包的时候静态资源可以配置一个 basePath 为 /science ,不同工具配置可能有点差别,搜搜就知道了
florentino
266 天前
感谢各位大佬,问题解决了, vue 前端打包的时候要支持 部署二级目录

可以参考: https://www.cnblogs.com/architectforest/p/16241060.html
发现 V2 有类似问题,也可以参考: https://www.v2ex.com/t/1024262#reply14
hueralin
266 天前
据我了解,第二个项目的打包路径要改成 /science ,这样打包出的文件路径前缀才是 /science ,否则都是 /,nginx 找不到
lc5900
266 天前
我之前也是折腾半天,最后换二级域名了,搞个通配符证书,用路径区分挺多坑的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1027442

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX