我正在尝试设置一个 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 指令内)