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,难道这也有关系?


6 回复

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应用内部路由配置的差异。以下是一些可能的原因及解决思路:

  1. 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有。这会导致路径处理的不同。

  2. 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的配置是解决路径处理差异的关键。

回到顶部