nginx 反向代理所有路径到 express angular nodejs 应用程序

nginx 反向代理所有路径到 express angular nodejs 应用程序

我正在开发一个应用程序,使用 express nodjs 作为 API 的后端,并使用 angular7 开发前端。

我已准备好将所有 *js、*html 从 angular 应用程序构建部署(复制)到 express 应用程序中的 public/path

我使用 nginx 作为后端应用程序的反向代理,并进行了基本配置

#default.conf

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://localhost:3000;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

当用户直接点击 URL 时,此配置可以正常工作。Angular 应用程序运行良好,所有评级均有效
http://example.com/

但是当用户尝试直接从浏览器访问 URL 时,它会失败。我404 not found从 nginx 获取页面,但未通过代理传递到后端服务器
http://example.com/my/direct/url

我了解 nginx 正在尝试访问一个文件或路径,但是由于 nodejs express 应用程序内部有一个 SPA angular 应用程序,因此它不存在。

我的架构看起来像这样

user        ——>         nginx          ————>                 express app* 
(http://example.com) -> (proxy_pass http:localhost:3000/) -> (“/public/(angular app)“ and  “/api/”)

我如何告诉 nginx 所有路径都应该传递给我的 nodejs express 应用程序?

对不起,我的英语不好

答案1

您的问题中存在一些混淆http://本地主机http://示例。您可以尝试此配置吗?应该可以正常工作。

server {
        listen                  80 default_server;
        server_name             _;
        location / {
            proxy_pass http://localhost:3000;
            proxy_redirect          off;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

您可以点击以下形式的 URL:

http://localhost/my/direct/url
http://<SERVER_IP>/my/direct/url

相关内容