为什么我的 nginx 代理失败,但我的 node.js 代理可以工作?

为什么我的 nginx 代理失败,但我的 node.js 代理可以工作?

我正在尝试设置一个 nginx 服务器,通过 ajax 从两个不同的服务器反向代理数据。但是只有一个请求有效。另一个请求给了我一个没有“Access-Control-Allow-Origin”标头错误。

但是,在 node.js 服务器上运行执行 ajax 请求的相同前端是可行的:

"use strict";
let express = require('express');
let request = require('request');

let PORT = process.env.PORT || 3000;
let app = express();

app.use(express.static(__dirname + "/public"));

app.get("/a", (req, res) => {
        let url = "http://external-website-a.com/rest.exe/etc?...";
        request(url).pipe(res);
});

app.get("/b", (req, res) => {
        let url = "http://external-website-b.com/webservice.svc/etc?...";
        request(url).pipe(res);
});

let server = app.listen(PORT, () => {
        console.log("Listening on port: " + PORT);
});

使用 node.js 客户端可以获取两个 json 文件,而“b”在 nginx 上失败。这是我的 sites-available/default 配置:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html

        server_name _;

        location / {
                sendfile off; #http://stackoverflow.com/questions/37742950
                try_files $uri $uri/ /index.html;
        }

        location /a {
                proxy_pass http://external-website-a.com/rest.exe/etc?...;
        }

        location /b {
                proxy_pass http://external-website-b.com/webservice.svc/etc?...;
        }
}

我一直在尝试添加所有proxy_set_header我可以在网上找到信息..但到目前为止没有任何效果..此外,当我直接访问“本地主机:8080/a“我得到了一个 json(正如我应该看到的),但是当我访问”本地主机:8080/b“我被重定向到”external-website-b.com/webservice.svc/etc?...“ 即使代理重定向关闭;为什么?这是否与该问题有关?

为什么我的 node.js/express 服务器可以提供数据,但是 nginx 却失败了?

答案1

proxy_set_header Access-Control-allow-Origin "*" . 在 nginx 配置中添加此项(在所有 location 指令内)

相关内容