【问题标题】:Nginx reverse proxy to node application APINginx 反向代理到节点应用程序 API
【发布时间】:2021-02-04 13:29:03
【问题描述】:

我的服务器上有一个 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,然后返回给用户。我看到了一些关于将代理重定向回来的东西,我必须这样做吗?我也不知道我是否必须在 NGINX 配置文件中执行/api/*。 我真的是 NGINX 的新手,但我只想将对 http://apcompdoc.com/api/* 的请求重定向到端口 8081 上的节点进程。

【问题讨论】:

    标签: node.js nginx nginx-reverse-proxy nginx-location


    【解决方案1】:

    不好或好的做法,我不确定,但我总是将我的后端定义为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 的位置添加了^~ 并删除了尾随的 /

    【讨论】:

    • 谢谢,我回家试试这个!
    • 这不起作用,我添加了上游,然后运行 ​​sudo nginx -t 并检查了所有内容,然后我运行 sudo systemctl restart nginx 并重新启动正常。回到家后,我可以检查我的 API,看看我的代码是否有问题。
    • 调用api会得到什么?一个错误?索引页面?日志文件中有任何痕迹吗?
    • 我稍后会回家检查,但由于我现在拥有的资源有限,看起来根本没有回复。它所做的只是发回一个带有 JSON 的 http 响应,该响应与在“/”路由上交付的应用程序结合使用。当我进入 chrome 开发工具时,它没有任何响应。我会检查日志,看看发生了什么。
    • 日志中提到了一些关于对“/undefined/api/login”的 GET 请求的内容,我猜这意味着我在应用程序中的公理请求中的 URL 是错误的。我会检查一下,但除此之外,它只是提到了有关 index.html 文件的一些内容。
    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 2019-08-09
    • 2021-05-22
    • 1970-01-01
    • 2019-10-21
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多