Nodejs项目在生产环境上 Nginx 配个前缀后,如何解决站内链接绝对地址的问题?

Nodejs项目在生产环境上 Nginx 配个前缀后,如何解决站内链接绝对地址的问题?

比如我开发环境 url 打开是这样的 http://localhost:3000,
好了我发布到线上, 通过 Nginx 转发到: http://www.memeda.com/video,
然后站内所有的链接是绝对地址的都要加上 /video, 还有 Ajax 请求什么的, 就是前端 js后台渲染 的 HTML 都需要加上这个 /video, 现在一个比较方便的解决方案是什么?


8 回复

不过好像不能替换正文,开发的时候应该用相对路径?

相对路径就没这个问题了, 绝对路径用的比较多吧

解决办法就是不要用绝对路径

proxy pass 到一个新的端口,在新的端口服务你的项目。项目中不推荐用相对路径,个人经验

这个明明用 alias 配置就可以轻轻松松解决了

在Node.js项目中,当通过Nginx配置了一个URL前缀后(例如 /myapp),确保站内链接(绝对地址)正确处理,通常需要调整Node.js应用的路由配置和Nginx的配置。以下是一个基本的解决方案:

  1. Nginx配置: 确保Nginx将请求正确转发到Node.js应用,并且处理静态文件(如果有)。

    server {
        listen 80;
        server_name yourdomain.com;
    
        location /myapp/ {
            proxy_pass http://localhost:3000/;  # Node.js应用运行的地址和端口
            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;
    
            # 重写URL,移除前缀
            location ~ ^/myapp/(.*)$ {
                rewrite ^/myapp/(.*)$ /$1 break;
            }
        }
    }
    
  2. Node.js应用配置: 确保Node.js应用生成的URL考虑到Nginx的前缀。如果使用像Express这样的框架,你可能需要配置一个基本的路径前缀。

    const express = require('express');
    const app = express();
    
    const basePath = '/myapp';
    
    app.use(express.static('public'));  // 静态文件目录
    
    app.get(`${basePath}/some-route`, (req, res) => {
        res.send(`Hello from ${basePath}/some-route`);
    });
    
    app.listen(3000, () => {
        console.log('Server running on port 3000');
    });
    

通过这种方式,Nginx会移除前缀并将请求转发到Node.js应用,而Node.js应用则基于配置的前缀生成正确的URL。

回到顶部