node.js - Nginx Nodejs Rest API Endpoints 返回 404
问题描述
我正在尝试设置本地服务器以供本地网络使用。React 应用程序运行良好,可以从网络上的另一台计算机访问。问题是,我创建的 API 端点返回 404 错误(但不是 Nginx 404)。它被视为常规的 Reactjs 应用程序内部页面。
这是我的 Nginx 配置文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/build;
index index.html index.htm index.nginx-debian.html;
server_name _;
# This is the react app
location / {
try_files $uri /index.html;
}
# This is the restful api
location /api {
proxy_redirect off;
default_type application/json;
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header Content-Type: application/json;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_intercept_errors on;
proxy_pass http://localhost:5000;
}
}
这是我的 React 应用程序`package.json:
{
"name": "React APP",
"version": "0.1.0",
"private": true,
"dependencies": {
...
},
"scripts": {
...
},
"devDependencies": {
...
},
"homepage": "."
}
从我的 localhost 机器上,我可以访问http://localhost/
它,它向我展示了我的 ReactApp,但是http://localhost/api/v1/
它的所有端点都没有正确映射。但是如果我访问http://localhost:5000
,我也可以访问我的 api。
有人可以告诉我我做错了什么吗?
解决方案
应用程序在不同的端口上运行,80 用于 React 应用程序,5000 用于 NodeJS 服务器。conf.d文件夹下的两个应用程序有两个单独的配置,即下面的react.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/build;
index index.html index.htm index.nginx-debian.html;
server_name _;
# This is the react app
location / {
try_files $uri /index.html;
}
}
对于 NodeJS 端点,您可以拥有即 nodejs.conf
server {
listen 80 default_server;
server_name nodeapi.com;
# Redirect all HTTP to HTTPS
location / {
proxy_redirect off;
default_type application/json;
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_a dd_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header Content-Type: application/json;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_intercept_errors on;
proxy_pass "http://localhost:5000";
}
}
推荐阅读
- python - Python Selenium 查找此按钮的 xpath 或任何路径
- c# - 更改目录并运行命令以使用 C# 导入
- python-3.x - 如何避免每次下载 glove-wiki-gigaword-300 或任何其他词向量包?
- python-3.x - 如何将数据框中的多列从输出转换为excel?
- unit-testing - 在这种情况下如何编写测试?
- html - Blazor - 在页面之间发送多个数据
- android - budtmo docker android 模拟器代理设置未保存在 android 快照中
- flutter - 颤振处理通知点击不适用于所有页面
- python - 将文件中的文本加载到列表中。索引错误
- php - str_getcsv 用日语给出错误的分隔符