ERR_CONNECTION_REFUSED使用nginx

时间:2017-11-30 17:13:55

标签: node.js angular nginx cors mean-stack

我有2个网络应用程序在 XX.XX.XX.XX / XX.XX.XX.XX / harvin 上运行,其中一个只是节点-express和另一个分别是MEAN堆栈应用程序。它们配置为 nginx ,如下所示

nginx.conf

# node-express
location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
}

# MEAN app
location /harvin {
        rewrite ^/harvin/(.*)$ /$1 break;
        proxy_pass http://localhost:8081;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
}

这个问题是关于' Harvin' app(MEAN app)。 这是我的 app.js 文件,其中包含CORS(跨域资源共享)配置。

app.js

const express = require("express");
const logger = require("morgan");
const cors = require("cors");
var app = express();

var whitelist = ["http://localhost:4200", "XX.XX.XX.XX"];

app.use(
    cors({
        origin(origin, callback) {
            if (whitelist.indexOf(origin) !== -1) {
                callback(null, true);
            } else {
                callback(new Error("Not allowed by CORS"));
            }
        },
        methods: ["PUT, GET, POST, DELETE, OPTIONS"],
        allowedHeaders: ["Content-Type", "Authorization", "X-Requested-With"],
        credentials: true
    })
);

//some middlewares

app.get("/api/login", (req, res) => {
    console.log("login route");
    // login the user
});

// Connect server to Angular 2 Index.html
app.get("/", (req, res) => {
    res.sendFile(path.join(__dirname + "/public/index.html"));
});

//some more routes

module.exports = app;


问题

我面临的问题是,当我从 Harvin的客户端( Harvin)( localhost:8081 / api / login )发出任何类型的请求(例如登录或注册等)时MEAN app)然后控制台显示 ERR_CONNECTION_REFUSED

即使morgan也没有记录任何类型的登录请求。


例外 Harvin的主页已成功加载,没有任何错误。


预期行为

当客户端发出任何类型的http请求时,控制台中没有 ERR_CONNECTION_REFUSED

P.S。

这款Harvin应用程序在我的本地机器上运行完美。

1 个答案:

答案 0 :(得分:0)

我有类似的问题。

我正在使用sendFile从节点提供静态文件,其中包括一些向http://localhost:8081/api发送提取请求但总是返回ERR_CONNECTION_REFUSED的JavaScript。通过与Nginx完全一样的方式设置反向代理来解决该问题。

现在,URL中没有主机的所有提取请求都将自动转发到localhost:8081套接字。因此,我的请求现在仅从解释为/api的{​​{1}}中获取。