V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
florentino
V2EX  ›  NGINX

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

  •  
  •   florentino · 251 天前 · 1699 次点击
    这是一个创建于 251 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    现在有两个网站需要部署,域名分别是: 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 要怎么配置呢

    感谢各位大佬

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

    可以参考: https://www.cnblogs.com/architectforest/p/16241060.html
    发现 V2 有类似问题,也可以参考: https://www.v2ex.com/t/1024262#reply14
    hueralin
        10
    hueralin  
       251 天前
    据我了解,第二个项目的打包路径要改成 /science ,这样打包出的文件路径前缀才是 /science ,否则都是 /,nginx 找不到
    lc5900
        11
    lc5900  
       251 天前
    我之前也是折腾半天,最后换二级域名了,搞个通配符证书,用路径区分挺多坑的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1537 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:14 · PVG 01:14 · LAX 09:14 · JFK 12:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.