cross domain configuration issues using nginx, sails and upstart-open source projects balderdashy/sails
I’m having cross domain configuration issues using nginx and sails. The problem is that if I get the socket to connect properly via http://domain-server.com/socket.io/
then the RESTful request will fail. If RESTful works the socket will not.
Setup
Client http://domain.com
Server http://server-domain.com
Client is an angular application using "sails.io.js": "0.10.3"
and this config io.sails.url = 'http://domain-server.com';
.
Server is a sails application with both RESTful request and socket features.
Sails CORS config
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
Commented out are what I’ve fiddled with in the nginx configuration without much success (also tried the client address instead of *).
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;
}
}
angularjs service method making the RESTful calls
function query(path, attributes) {
return $http({
url: domain + path,
params: attributes,
method: "GET",
widthCredentials: true
});
}
In the angular config function
$httpProvider.defaults.useXDomain = true;
It is the current configuration and here are the results I am experiencing.
Browser console output
Resource interpreted as Script but transferred with MIME type text/html: "http://domain-server.com/__getcookie".
– Good
|>
– Good
\___/ 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.
– Not good
UPDATE
It seems like everything works wonder if I start sails directly using sails lift
or node app.js
yet when starting it using the upstart script in a .conf
file the cross domain issue occurs.
upstart script
#!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