我使用nginx和sails有跨域配置问题。问题是
如果我通过http://domain-server.com/socket.io/
让套接字正确连接
然后RESTful请求将失败。如果RESTful工作,套接字将不会。
设置
客户http://domain.com
服务器http://server-domain.com
客户端是使用"sails.io.js": "0.10.3"
和此配置io.sails.url = 'http://domain-server.com';
的角度应用程序。
Server是一个具有RESTful请求和套接字功能的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 socket config
module.exports.socket {
onConnect: function() {},
onDisconnect: function() {},
authorization: false,
'backwardsCompatibilityFor0.9SocketClients': false,
grant3rdPartyCookie: true,
origins: 'http://domain.com'
};
nginx config
注释掉了我在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
});
}
在角度配置功能中
$httpProvider.defaults.useXDomain = true;
这是当前配置,以下是我遇到的结果。
浏览器控制台输出
Resource interpreted as Script but transferred with MIME type text/html: "http://domain-server.com/__getcookie".
- 好
|>
- 好
\___/ 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
或node app.js
启动帆,似乎一切都有用,但是当使用.conf
文件中的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
答案 0 :(得分:1)
尝试将以下内容添加到您的Sails应用 app.js 文件的顶部:
process.chdir(__dirname);
您看到的not found
可能是默认的Express 404消息。如果您尝试将Sails应用程序提升到其自己的目录之外,则API文件(例如控制器)将无法正确加载。 process.chdir
在某些时候被添加到默认的 app.js 以防止出现此问题,但看起来在某个地方出现了回归。