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