Nodejs 两个 node 的项目都用 nginx 代理,对于路径的处理为啥不一样
Nodejs 两个 node 的项目都用 nginx 代理,对于路径的处理为啥不一样
主站点为 www.123.com
www.123.com/a/ 代理 A 项目
www.123.com/b/ 代理 b 项目
两个项目的主页 都有 <link href=“favicon.ico” rel=“icon”> 这段代码,但是在浏览器访问却是存在 2 种结果:
A 项目页面对于 favicon.ico 的链接地址为: http://www.123.com/a/favicon.ico 是正确的
B 项目页面对于 favicon.ico 的链接地址却为: http://www.123.com/favicon.ico
两个项目的代理配置完全一样,唯独构建 http 的服务不一样, A 是通过 gulp+browserSync 的,B 是通过 angular-cli 的 ng,难道这也有关系?
favicon.ico /favicon.ico
没用的,还是一样, 我主要是想搞明白为什么会这样
./favicon.ico
浏览器是根据你访问页面的 url 去找 favicon.ico 的
favicon.ico 的机制是,如果文档中没有申明,就去根目录找。
说明 A 目录申明了。B 目录没有申明。
具体申明方法,可以看 wiki 上面的描述,各浏览器有一些差别。
https://en.wikipedia.org/wiki/Favicon
在Node.js项目中,使用Nginx作为反向代理时,路径处理的不同可能源于Nginx配置或Node.js应用内部路由配置的差异。以下是一些可能的原因及解决思路:
-
Nginx配置差异: 检查两个项目的Nginx配置文件,特别是
location
指令的配置。例如:server { listen 80; location /app1/ { proxy_pass http://localhost:3000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 注意这里的斜杠,它会影响路径转发 } location /app2/ { proxy_pass http://localhost:4000/app2/; # 其他配置同上 } }
在上面的配置中,
/app1/
的proxy_pass
没有末尾斜杠,而/app2/
的proxy_pass
有。这会导致路径处理的不同。 -
Node.js路由配置: 检查Node.js应用中路由的配置。例如,使用Express框架时:
const express = require('express'); const app = express(); app.use('/app1', express.static('path/to/app1')); app.use('/app2', express.static('path/to/app2')); app.listen(3000, () => console.log('App 1 listening on port 3000')); // 另一个应用监听4000端口,配置类似
确保Node.js应用的路由配置与Nginx的配置相匹配。
综上所述,检查并对比Nginx和Node.js的配置是解决路径处理差异的关键。