Ho problemi di configurazione tra domini che utilizzano nginx e vele. Il problema è che se il socket si connette correttamente tramite http://domain-server.com/socket.io/
quindi la richiesta RESTful avrà esito negativo. Se RESTful funziona, il socket no.Problemi di configurazione tra domini che utilizzano nginx, sails e upstart
Setup
client http://domain.com
Server http://server-domain.com
client è un'applicazione angolare utilizzando "sails.io.js": "0.10.3"
e questo config io.sails.url = 'http://domain-server.com';
.
Il server è un'applicazione di vele con entrambe le funzioni di richiesta e socket RESTful.
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 presa config
module.exports.socket {
onConnect: function() {},
onDisconnect: function() {},
authorization: false,
'backwardsCompatibilityFor0.9SocketClients': false,
grant3rdPartyCookie: true,
origins: 'http://domain.com'
};
nginx config
commentata sono quello che ho giocherellava con nella configurazione nginx senza molto successo (anche t ried l'indirizzo del cliente anziché *).
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;
}
}
metodo di servizio angularjs rendendo il RESTful chiama
function query(path, attributes) {
return $http({
url: domain + path,
params: attributes,
method: "GET",
widthCredentials: true
});
}
Nella funzione di configurazione angolare
$httpProvider.defaults.useXDomain = true;
È la configurazione corrente e qui sono i risultati sto sperimentando .
output della console Browser
Resource interpreted as Script but transferred with MIME type text/html: "http://domain-server.com/__getcookie".
- Buona
|>
- Buona
\___/ 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.
- Non va bene
UPDATE
Sembra come tutto funziona a meraviglia se avvio vele direttamente usando sails lift
o node app.js
ma quando lo si avvia usando lo script upstart in un file .conf
si verifica il problema del dominio incrociato.
script di 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
Dove si trova questo? Alcuni host cloud (come OpenStack) sembrano bloccare l'invio delle intestazioni CORS. – sgress454
Posso far funzionare correttamente il CORS per RESTful, solo quando eseguono il socket.io non funzionano più. Sembra che ci sia un conflitto da qualche parte. – GillesC
Cosa ottieni se navighi su 'http: //domain-server.com/login? Password = test & username = test' nel browser? È una pagina di errore di nginx? Stai inoltrando correttamente richieste di proxy da nginx all'applicazione di vele? O sono su porte diverse? – david