Node.js同域名多子站静态资源跨路径缓存异常求助
解决方案
问题根源是:相对路径引用的静态资源,浏览器会以域名根路径作为缓存标识。两个站点都用./styles.css,浏览器会将其统一缓存为planetshah.com/styles.css,导致资源混淆。以下是针对性解决办法:
1. 改用绝对路径引用静态资源
将每个站点的静态资源引用修改为带子路径的绝对路径,让浏览器区分不同站点的资源:
- PWV站点的引用调整为:
<link href="/pwv/styles.css" rel="stylesheet"/> <link href="/pwv/favicon.ico" rel="icon"/>
- Mixes站点的引用调整为:
<link href="/mixes/styles.css" rel="stylesheet"/> <link href="/mixes/favicon.ico" rel="icon"/>
2. 调整Express静态资源的挂载路径
当前express.static直接挂载在根路径,需修改为对应子路径,确保请求能正确匹配到站点资源:
- PWV站点修改:
// 原代码 // pwvApp.use(express.static(path.join(__dirname, 'planetshah.com\\pwv'))) // 修改后 pwvApp.use('/pwv', express.static(path.join(__dirname, 'planetshah.com\\pwv')))
- Mixes站点修改:
// 原代码 // musicMixApp.use(express.static(path.join(__dirname, 'planetshah.com\\mixes'))) // 修改后 musicMixApp.use('/mixes', express.static(path.join(__dirname, 'planetshah.com\\mixes')))
同时调整对应路由逻辑,比如PWV站点的get('/*')不需要再单独处理/favicon.ico,静态资源服务会自动匹配请求。
3. 优化缓存策略(可选)
给静态资源添加版本号或哈希值,强制浏览器在资源更新时重新请求:
<link href="/pwv/styles.css?v=1.0.0" rel="stylesheet"/>
也可以通过Express设置缓存控制头,平衡缓存效率和更新需求:
pwvApp.use('/pwv', express.static(path.join(__dirname, 'planetshah.com\\pwv'), { maxAge: '1d', // 设置1天的缓存有效期 etag: true // 启用ETag验证,资源变化时自动触发更新 }))
4. 确认Bouncy转发逻辑有效性
当前Bouncy通过req.url.includes('/pwv')或/mixes转发请求的逻辑是可行的,但可以补充判断,避免误转发:
// 修改PWV的转发判断 else if (req.url.startsWith('/pwv') || req.url === '/pwv') { console.log('bouncing to 8004'); bounce(8004); }
内容的提问来源于stack exchange,提问作者gib65
相关产品推荐
相关产品推荐

