Ich habe Cross Domain-Konfigurationsprobleme mit Nginx und Segeln. Das Problem ist, dass , wenn ich den Socket richtig über http://domain-server.com/socket.io/
verbinden dann die RESTful Anfrage wird fehlschlagen. Wenn RESTful funktioniert, wird der Socket nicht funktionieren.Cross-Domain-Konfiguration Probleme mit Nginx, Segel und Emporkömmling
Setup-
Kunde http://domain.com
Server http://server-domain.com
Client ist eine Winkel Anwendung "sails.io.js": "0.10.3"
und diese Config io.sails.url = 'http://domain-server.com';
verwenden.
Server ist eine Segelanwendung mit RESTful Request- und Socket-Funktionen.
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 Buchse Config
module.exports.socket {
onConnect: function() {},
onDisconnect: function() {},
authorization: false,
'backwardsCompatibilityFor0.9SocketClients': false,
grant3rdPartyCookie: true,
origins: 'http://domain.com'
};
nginx Config
kommentiert heraus sind, was ich mit der nginx Konfiguration getüftelt haben, ohne viel Erfolg (auch t ried die Client-Adresse statt *).
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-Methode, die RESTful Anrufen
function query(path, attributes) {
return $http({
url: domain + path,
params: attributes,
method: "GET",
widthCredentials: true
});
}
In der Winkelkonfigurationsfunktion
$httpProvider.defaults.useXDomain = true;
Es ist die aktuelle Konfiguration und hier sind die Ergebnisse, die ich erlebe .
Browser Konsolausgabe
Resource interpreted as Script but transferred with MIME type text/html: "http://domain-server.com/__getcookie".
- Gute
|>
- Gute
\___/ 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.
- Nicht gut
UPDATE
Es scheint, wie alles funktioniert Wunder, wenn ich Segel direkt mit sails lift
oder node app.js
starte noch beim Starten mit dem Upstart-Skript in einer .conf
Datei das Cross-Domain-Problem auftritt.
Emporkömmling Skript
#!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
Wo ist das gehostet? Bestimmte Cloud-Hosts (wie OpenStack) scheinen das Senden von CORS-Headern zu blockieren. – sgress454
Ich kann die CORS für RESTful gut funktionieren, es nur, wenn sie die socket.io Seite der Sache nicht mehr funktionieren. Klingt, als gäbe es irgendwo einen Konflikt. – GillesC
Was bekommen Sie, wenn Sie im Browser zu http: //domain-server.com/login? Password = test & username = test? Navigieren? Ist es eine Nginx-Fehlerseite? Sind Reverse-Proxy-Anforderungen ordnungsgemäß von Nginx auf die Segel-Anwendung? Oder sind sie auf verschiedenen Häfen? – david