首页 > 解决方案 > Nginx 反向代理到节点应用程序 API

问题描述

我的服务器上有一个 NGINX 反向代理来处理http://apcompdoc.com的请求。它监听 80 端口,并且可以成功返回 Vue Dist,但是,我有一个后端节点 API 在端口 8081 上运行,另一个节点进程在端口 8082 上运行。用户从不直接在 8082 上请求任何内容,而是在 8081 上请求进程有时会在 8082 上请求进程,所以我假设我根本不需要将它暴露给 Nginx,但我不太确定。但是,主要问题是我相信从未达到过 API。我有它,所以当你点击端点http://apcompdoc.com/api/ * 它应该代理到节点进程。我正在使用 PM2 来保持进程处于活动状态并对其进行监控,并确保它正在运行。这是我的 NGINX apcompdoc.com 配置文件:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name: apcompdoc.com www.apcompdoc.com;
    charset utf-8;
    root    /var/www/apcompdoc/dist;
    index    index.html index.htm;
    # Always serve index.html for any request;
    location / {
        root /var/www/apcompdoc/dist;
        try_files $uri /index.html;
    }
    location /api/ {
        proxy_pass http://localhost:8081;
    }
    error_log /var/log/nginx/vue-app-error.log;
    access_log /var/log/nginx/vue-app-access.log;
}

我试图在 /api/* 处获取对我的 API 的所有请求,以重定向到 localhost:8081 处的 API,然后返回给用户。我看到了一些关于将代理重定向回来的东西,我必须这样做吗?我也不知道我是否必须/api/*在 NGINX 配置文件中做。我对 NGINX 真的很陌生,但我只想将对http://apcompdoc.com/api/ * 的请求重定向到端口 8081 上的节点进程。

标签: node.jsnginxnginx-reverse-proxynginx-location

解决方案


不好还是好的做法,我不确定,但我总是将我的后端定义为upstream. 例如,您的文件将如下所示:

upstream nodeprocess {
    server localhost:8081;
}
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name: apcompdoc.com www.apcompdoc.com;
    charset utf-8;
    root    /var/www/apcompdoc/dist;
    index    index.html index.htm;
    # Always serve index.html for any request;
    location / {
        root /var/www/apcompdoc/dist;
        try_files $uri /index.html;
    }
    location  ^~ /api {
        proxy_pass http://nodeprocess;
    }
    error_log /var/log/nginx/vue-app-error.log;
    access_log /var/log/nginx/vue-app-access.log;
}

请注意我^~在 api 的位置添加并删除了尾随 /


推荐阅读