Так я использую автономного версии Socket.io (сервер) -> я не объявить любой «HTTP сервера» Это выглядит очень похоже на это:Socket.IO, путь SSL, Nginx, каталог
var io = require('socket.io')();
io.on('connection', function(socket){});
io.listen(3001);
Проблема: мой сайт в производственной среде полностью HTTPS. Когда я попытался подключиться к нему (io.connect("https://www.mysite.com:3001")
) У меня был ERR_SSL_PROTOCOL_ERROR (протестирован в браузере Chrome).
Когда я выключил сервер, я получил ERR_CONNECTION_REFUSED. Итак, я пришел к выводу, что Node.JS не может обрабатывать соединение HTTPS/SSL.
Моя среда разработки основана на HTTP, поэтому у меня нет проблем - она работает как шарм.
Итак, я решил попробовать прокси-передачу HTTPS на HTTP-соединение, используя nginx.
AFAIK, здесь у меня есть только несколько вариантов для того, чтобы различать связи Node.js и основное подключение приложения:
а) субдомена (~ node.mysite.com)
б) Справочник (~ mysite.com/node)
Я выбрал последний вариант, потому что это было намного проще реализовать.
Поэтому я добавил следующее внутри главного «сервера» конфигурации (перед основным приложением):
location /node {
proxy_pass http://127.0.0.1:3001;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
А потом я попытался подключения: io.connect("https://www.mysite.com/node")
, но независимо от того, что я получаю 404 (Не найдено). Я даже пробовал: io.connect("https://www.mysite.com", {path : /node/})
(w и без косых черт) и попробовал переименование путь до ресурс и многие другие.
Но безрезультатно.
Когда я посещаю эту страницу в браузере (и когда сервер запущен и работает), я вижу белую страницу.
Я делаю что-то ужасно неправильно? Можно ли это исправить? Спасибо всем заранее
Благодарим за ответ! Можно ли как-то избежать «создания http-сервера»? – Dmitri
Даже если вы явно не создаете HTTP-сервер, сокет io-сервер будет создавать один под капотом.Однако я считаю, что вы можете передать переменную options здесь (с ключом и цепочкой сертификатов) в качестве второго аргумента в io.listen(). Стоит знать, что socket.io по-прежнему будет создавать HTTP-сервер за кулисами, чтобы вы могли заявить об этом сами, как показано здесь и в файлах socket.io. – aembke
@aembke Ah. Имеет смысл! Я попробую! :) Спасибо – Dmitri