问题描述
我正在尝试将 MERN 堆栈应用程序部署到 DigitalOcean Droplet。我的后端在 Nginx 服务器上运行并成功连接到 MongoDB 图集实例。我使用 FileZilla 来提供我的静态文件,并且这些文件成功地在我没有请求服务器的路由上提供。但是在向服务器发出请求(从 MongoDB 获取、POST、PUT 或 DELETE 记录)的路由上,页面加载了几毫秒,然后由于与无法从 API 获取数据相关的错误,所有内容都消失了。 由于后端正在运行并连接到 MongoDB,我认为我传递给 Axios 的 URL 可能不正确。 我在前端 package.json 中定义了一个代理值,如下所示:
"proxy": "HTTP://localhost:5000"
我提出的要求如下:
axios.get('/api/members')
它在我的本地机器上运行良好。但是,我在 stackoverflow 线程上的某处读到代理仅在开发模式下生效,而不是在生产模式下生效。所以我从 package.json 文件中删除了代理并将 axios 请求更改为:
axios.get('[IP_to_the_droplet]/members']
我不确定这是正确的,我认为不是,因为在我的前端带有 HTTP 请求的路由仍然不起作用。您认为问题与 HTTP 请求有关吗?你知道我应该如何解决这个问题吗?
提前致谢
解决方法
您通常需要一个反向代理服务器来将 localhost:5000 映射到 Droplet 的 IP。您可以在 Nginx 中轻松设置反向代理。这是您的操作方法。
您将使用守护进程启动应用程序以在 localhost:5000 上广播,这将是您的 Nginx 配置
. . .
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
详细步骤在这里: