Проблемы междоменной конфигурации при использовании 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 в какой-то момент, чтобы предотвратить эту проблему, но похоже, что где-то по пути произошла регрессия.

Другие вопросы по тегам