Проблемы междоменной конфигурации при использовании nginx, sails и upstart
У меня проблемы с междоменной конфигурацией при использовании nginx и парусов. Проблема в том, что если я получу сокет для правильного подключения через http://domain-server.com/socket.io/
тогда запрос RESTful не будет выполнен. Если RESTful работает, сокет не будет.
Настроить
клиент http://domain.com
сервер http://server-domain.com
Клиент - это угловое приложение, использующее "sails.io.js": "0.10.3"
и этот конфиг io.sails.url = 'http://domain-server.com';
,
Сервер является приложением паруса с функциями запросов RESTful и сокетов.
Конфигурация паруса CORS
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
module.exports.socket {
onConnect: function() {},
onDisconnect: function() {},
authorization: false,
'backwardsCompatibilityFor0.9SocketClients': false,
grant3rdPartyCookie: true,
origins: 'http://domain.com'
};
Конфигурация nginx
Закомментировано то, что я безуспешно использовал в конфигурации nginx (также попробовал адрес клиента вместо *).
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
});
}
В функции углового конфига
$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
пока при запуске его с помощью сценария upstart в .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
1 ответ
Попробуйте добавить следующее в начало файла app.js вашего приложения Sails:
process.chdir(__dirname);
not found
вы видите, скорее всего, по умолчанию сообщение Express 404. Если вы попытаетесь поднять приложение Sails за пределы своего собственного каталога, файлы API (например, контроллеры) не будут загружены должным образом. process.chdir
был добавлен в стандартный файл app.js в какой-то момент, чтобы предотвратить эту проблему, но похоже, что где-то по пути произошла регрессия.