gpt4 book ai didi

angularjs - 使用 nginx、sails 和 upstart 的跨域配置问题

转载 作者:行者123 更新时间:2023-12-02 22:55:17 28 4
gpt4 key购买 nike

我在使用 nginx 和 sails 时遇到跨域配置问题。问题是如果我通过 http://domain-server.com/socket.io/ 正确连接套接字那么 RESTful 请求将会失败。如果 RESTful 有效,则套接字不会。

设置

客户http://domain.com

服务器http://server-domain.com

客户端是一个使用"sails.io.js": "0.10.3"的 Angular 应用程序和这个配置io.sails.url = 'http://domain-server.com'; .

Server 是一个兼具 RESTful 请求和套接字功能的 sails 应用程序。

Sails CORS 配置

module.exports.cors = {
allRoutes: true,
origin: 'http://domain.com',
credentials: true,
methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
headers: 'content-type,Access-Control-Allow-Origin'
};

Sails 套接字配置

module.exports.socket {
onConnect: function() {},
onDisconnect: function() {},
authorization: false,
'backwardsCompatibilityFor0.9SocketClients': false,
grant3rdPartyCookie: true,
origins: 'http://domain.com'
};

nginx 配置

注释掉的是我在 nginx 配置中摆弄的内容,但没有取得多大成功(还尝试了客户端地址而不是 *)。

server {
listen 80;

server_name domain-server.com;
#add_header Access-Control-Allow-Origin *;
location / {
# add_header Access-Control-Allow-Origin *;

proxy_pass http://localhost:1337;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
# proxy_set_header Access-Control-Allow-Origin *;
proxy_cache_bypass $http_upgrade;
}
}

进行 RESTful 调用的 angularjs 服务方法

function query(path, attributes) {

return $http({
url: domain + path,
params: attributes,
method: "GET",
widthCredentials: true
});
}

在 Angular 配置函数中

$httpProvider.defaults.useXDomain = true;

这是当前的配置,这是我正在经历的结果。

浏览器控制台输出

Resource interpreted as Script but transferred with MIME type text/html: "http://domain-server.com/__getcookie". - 好


|><br/>
\___/ sails.io.js:200
io.socket connected successfully.
- 好

XMLHttpRequest cannot load http://domain-server.com/login?password=test&username=test.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://domain.com' is therefore not allowed access.
- 不好

更新

似乎一切正常,不知道我是否直接使用sails lift开始 sails 。或node app.js然而,当使用 .conf 中的 upstart 脚本启动它时文件出现跨域问题。

Upstart 脚本

#!upstart
description "demo"
author "gillesc"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown

respawn
respawn limit 5 60

script
exec /usr/bin/node /var/www/apps/domain-server.com/app.js > /var/www/apps/domain-server.com/server.log 2>&1
end script

最佳答案

尝试将以下内容添加到 Sails 应用的 app.js 文件顶部:

process.chdir(__dirname);

您看到的未找到可能是默认的 Express 404 消息。如果您尝试将 Sails 应用程序提升到其自己的目录之外,则 API 文件(例如 Controller )将无法正确加载。在某些时候将 process.chdir 添加到默认的 app.js 中以防止出现此问题,但看起来在此过程中的某个地方出现了回归。

关于angularjs - 使用 nginx、sails 和 upstart 的跨域配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566189/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com