首页 > 解决方案 > 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。

有人可以告诉我我做错了什么吗?

标签: node.jsreactjsnginx

解决方案


应用程序在不同的端口上运行,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";
               }
        }

推荐阅读