2014-08-29 10 views
5

मैं nginx और पाल का उपयोग कर क्रॉस डोमेन विन्यास समस्याएं आ रही हैं का उपयोग कर मुद्दों। समस्या यह है कि http://domain-server.com/socket.io/ के माध्यम से ठीक से कनेक्ट करने के लिए सॉकेट अगर मैं मिल तो RESTful अनुरोध विफल हो जाएगा है। यदि रीस्टफुल काम करता है तो सॉकेट नहीं होगा।क्रॉस डोमेन विन्यास nginx, पाल और नवोदय

सेटअप

ग्राहक http://domain.com

सर्वर http://server-domain.com

ग्राहक "sails.io.js": "0.10.3" और इस config io.sails.url = 'http://domain-server.com'; का उपयोग कर एक कोणीय अनुप्रयोग है।

सर्वर दोनों RESTful अनुरोध और सॉकेट सुविधाओं के साथ एक पाल आवेदन है।

पाल 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' 
}; 

पाल सॉकेट config

module.exports.socket { 
    onConnect: function() {}, 
    onDisconnect: function() {}, 
    authorization: false, 
    'backwardsCompatibilityFor0.9SocketClients': false, 
    grant3rdPartyCookie: true, 
    origins: 'http://domain.com' 
}; 

nginx config

बाहर टिप्पणी की है कि मैं क्या बिना nginx विन्यास में साथ fiddled गए हैं बहुत सफलता (टी भी * के बजाय ग्राहक पते पर भरोसा किया।

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 सेवा विधि RESTful बनाने कॉल

function query(path, attributes) { 

    return $http({ 
     url: domain + path, 
     params: attributes, 
     method: "GET", 
     widthCredentials: true 
    }); 
} 

कोणीय config समारोह

$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 
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

यह होस्ट किया गया है? कुछ क्लाउड होस्ट (जैसे ओपनस्टैक) सीओआरएस हेडर को भेजने से रोकते हैं। – sgress454

+0

मैं सीओआरएस को रीस्टफुल के लिए ठीक काम करने के लिए प्राप्त कर सकता हूं, बस जब वे सॉकेट करते हैं तो चीज का काम नहीं होता है। लगता है जैसे कहीं एक संघर्ष है। – GillesC

+0

यदि आप ब्राउज़र में 'http: //domain-server.com/login? Password = test & username = test' पर नेविगेट करते हैं तो आपको क्या मिलता है? क्या यह एक nginx त्रुटि पृष्ठ है? क्या आप nginx से sails अनुप्रयोग में ठीक से प्रॉक्सीइंग अनुरोधों को उलट रहे हैं? या वे विभिन्न बंदरगाहों पर हैं? – david

उत्तर

1

कोशिश अपने पाल एप्लिकेशन की app.js के शीर्ष पर निम्नलिखित फ़ाइल जोड़ने:

process.chdir(__dirname); 

not found आप देख रहे हैं की संभावना डिफ़ॉल्ट है एक्सप्रेस 404 संदेश। यदि आप अपनी निर्देशिका के बाहर एक सेल ऐप उठाने का प्रयास करते हैं, तो एपीआई फाइलें (उदा। नियंत्रक) ठीक से लोड नहीं होंगे। इस समस्या को रोकने के लिए process.chdir को डिफ़ॉल्ट app.js पर जोड़ा गया था, लेकिन ऐसा लगता है कि रास्ते में कहीं भी एक रिग्रेशन था।

संबंधित मुद्दे