这是一个前后端分离的项目:前端是React,后端是Node.js
本地测试没有任何问题,上传到云服务器之后,测试后端没有任何问题。但是React却无法把数据发给后端
网上查询用Nginx部署前端,我的nginx核心配置文件如下
server { listen 80; server_name www.xiaoyangst.top; root /home/xyst/XrtcDemo/myapp/build; index index.html; location / { try_files $uri %uri/ /index.html; } location /api{ proxy_pass http://www.xiaoyangst.top:8888; } }
外网访问http://www.xiaoyangst.top能够看到前端,说明nginx配置没有问题,但是代理配置应该存在问题,即跨域问题
本地测试环境跨域问题没有,因为可以添加文件setupProxy.js
const { createProxyMiddleware } = require('http-proxy-middleware');module.exports = function(app) { app.use( '/api', createProxyMiddleware({ target: 'http://www.xiaoyangst.top:8888', changeOrigin: true, pathRewrite: {'^/api': ''} }) );};
本地前端能够正常与云服务器后端通信,但是云服务器上部署的前端却不行,希望各位能给个解决方案
做一个rewrite即可
location ^~ /api { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://www.xiaoyangst.top:8888; proxy_set_header Host $http_host;}
location /api{ proxy_pass http://www.xiaoyangst.top:8888;}
这样写最后拼接成的url是带/api后缀的,比如你请求的是xxx/api/request1,那么转到后端的请求路径就是 http://www.xiaoyangst.top:8888/api/request1
location /api{ proxy_pass http://www.xiaoyangst.top:8888/;}
这样写的话最后拼接成的url是不带/api后缀的,比如你请求的是xxx/api/request1,那么转到后端的请求路径就是 http://www.xiaoyangst.top:8888/request1
最后增加一个/
看看
location /api{ proxy_pass http://www.xiaoyangst.top:8888/;}
你的问题看起来主要是由于React应用部署在云服务器上后,无法正确地与Node.js后端进行通信。这可能是由于跨域资源共享(CORS)问题,也可能是由于Nginx配置问题导致的。
首先,你需要确保你的Node.js后端已经正确设置了CORS策略,允许来自你的前端应用(即React应用)的跨域请求。你可以使用cors
这个npm包来实现这一点。以下是一个简单的示例:
const express = require('express');const cors = require('cors');const app = express();app.use(cors());// your routes...app.listen(8888, () => { console.log('Server is running on port 8888');});
在这个示例中,cors()
中间件允许所有的跨域请求。在实际的生产环境中,你可能需要更精细地控制哪些源可以进行跨域请求,以避免安全风险。
其次,你的Nginx配置看起来已经正确地设置了代理,将/api
路径的请求转发到你的Node.js后端。但是,请注意,你的Node.js后端应该监听在云服务器的某个端口上,而不仅仅是www.xiaoyangst.top:8888
。你需要确保你的Node.js后端实际上是在这个地址和端口上运行的。
另外,你提到你在本地环境中使用了setupProxy.js
文件来处理跨域问题。然而,这个解决方案只适用于开发环境,它使用了http-proxy-middleware
来代理请求。在生产环境中,你应该在服务器端(即Node.js后端)处理CORS问题,而不是在前端。
如果你已经正确设置了CORS策略,并且你的Node.js后端也在正确的地址和端口上运行,但你仍然遇到问题,那么问题可能在于Nginx的配置。你可以尝试在你的Nginx配置中添加proxy_set_header
来传递原始请求头,如下所示:
location /api { proxy_pass http://www.xiaoyangst.top:8888; 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;}
这些proxy_set_header
指令将确保你的Node.js后端能够接收到正确的请求头,包括原始的主机名、IP地址、转发路径和协议。这可能会解决你的问题。
如果以上方法都无法解决你的问题,那么你可能需要进一步检查你的React应用和Node.js后端的代码,确保它们能够正确地处理HTTP请求和响应。
很奇怪 使用nginx+docker部署的前后端分离项目 部署上去之后访问的时候出现空白也没有报错,然后按照网上的教程,改了vue的配置文件。也没有效果,不管前面加了点还是没加就是出现不了页面,都是空白的 不知道是什么导致了 很迷茫 有懂的吗 帮忙解决一下呗! 改了vue的打包配置 不管是加了点还是没加都显示不出页面
我有一个全栈node.js项目,我不知道部署它的最佳实践是什么。 首先提供一些信息:应用程序包括: 下一个。js前端 redis缓存 postgres sql 和节点。js后端 部署不应该花费太多,因为这是一个爱好项目。 目前(作为开发环境),我使用vercel作为前端,我自己的vm作为后端 然而,我想在应用引擎中部署一切(即没有太多的配置和自动扩展) 我只是不知道最好的提供商是什么,因为有很多服
问题内容: 我正在开发一个新项目,其中react / express作为前端,而loopback作为后端api。我在开发环境中使用不同的端口将它们分开。 我应该如何在生产中部署它们? 托管在同一服务器上-将后端与其他子域分开? 在2台不同的服务器上托管-似乎无法使用同一域。 问题答案: 您可以部署 您的 静态托管服务* 和 CDN 前端 *** AWS S3 + AWS CloudFront Go
React应用程序在端口3000上,而我的服务器在端口4000上。根据我的还原操作,我把这条路由称为 即使我已经向服务器添加了这些CORS设置: 我错过了什么?
本文向大家介绍利用forever和pm2部署node.js项目过程,包括了利用forever和pm2部署node.js项目过程的使用技巧和注意事项,需要的朋友参考一下 本文主要给大家分享的是利用forever和pm2部署node.js项目过程的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 一、forever forever可以在cmd或ssh连接断开时,让项目一直运行,而且可以在项目崩
本文向大家介绍详解Flask前后端分离项目案例,包括了详解Flask前后端分离项目案例的使用技巧和注意事项,需要的朋友参考一下 简介 学习慕课课程,Flask前后端分离API后台接口的实现demo,前端可以接入小程序,暂时已经完成后台API基础架构,使用 postman 调试.git 重构部分: ken校验模块 auths认证模块 scope权限模块,增加全局扫描器(参考flask HTTPExc