现在使用 ip
访问前端页面发起的请求代理转发到 http://localhost:3000
时访问不到后端接口服务,是方法错了吗?还有什么更好得方案?
希望同时在linux服务器上运行前端项目(80端口)和Node接口服务(3000端口)。
并且使用公网 ip 访问前端项目时接口能够正常访问。
接口部分
Linux 上本地运行 node app.js
运行接口服务到 3000
端口
前端部分
编译后的前端项目部署在 80
端口,并且代理转发 /prod-api
的请求到启动的接口服务上
Nginx配置:
前端开发环境代理配置:
'/api':{
// 目标地址
target: 'http://localhost:3000/prod-api'
changeOrigin:true,
// 将路径中的 '/api' 替换成 ''
pathRewrite: {
'^/api': ''
}
}
你不会在服务器上面
npm run dev
这样启动服务的吧?如果你是通过
npm run build
这样打包,然后通过root
指定到/usr/html/
目录下的前端静态产物。那么如通过proxy_pass
代理到localhost:300
就不会有对应的服务。因为你没有使用nodejs
启动webpack.devServe
服务。所以其实你只是想要做接口的代理转发避免跨域的问题。那么直接把
/prod-api
的代理指向修改成后端接口地址就可以了。EDIE
如果你的Node接口服务有正常启动,那么你的
locahost:3000
应该是可以正常访问对应的接口的。需要检查是否已经正常启动。
另外,我看你前端项目的接口代理转发的时候是把
localhost/api
的请求转发到localhost:3000/prod-api
上面的。但是你的
nginx
配置里面是匹配的/prod-api
这样的地址。并不是你开发环境中的/api
这样的地址。那么得确认前端项目的的编译配置,是否在前端项目编译时期把/api
替换成了正确的/prod-api
(可能通过环境变量文件读取环境变量)。最后就是检查前端项目发起的接口请求返回的错误码是什么,是
404
还是502
或者其他异常CODE。