2014-08-29 18 views
5

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

|>
\___/ sails.io.js:200 io.socket connected successfully.
- Buona

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 
+0

Dove si trova questo? Alcuni host cloud (come OpenStack) sembrano bloccare l'invio delle intestazioni CORS. – sgress454

+0

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

+0

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

risposta

1

Prova ad aggiungere quanto segue alla parte superiore del app.js vostre vele di app di file:

process.chdir(__dirname); 

Il not found che stai vedendo è probabile il default Express 404 messaggio. Se provi a sollevare un'app Sails al di fuori della sua stessa directory, i file API (ad esempio i controller) non verranno caricati correttamente. Il process.chdir è stato aggiunto all'app predefinita app.js per prevenire questo problema, ma sembra che ci sia stata una regressione da qualche parte lungo il percorso.

Problemi correlati