Socket io подключается к частному ip/частной подсети в vpc

Моя цель - подключить socket io с моего общедоступного сервера к моему частному серверу через const socket = io("10.0.2.50:3001") оба подключены к моему vpc. на частном сервере есть код сокета/сервера для моего приложения, публичный сервер отображает внешний интерфейс. Я хотел бы, чтобы пользователи могли подключаться/подключаться к другим частным серверам в частной подсети.

у меня есть базовая настройка aws vpc -

  • vpc с общедоступной и частной подсетью
  • один сервер, подключенный к общедоступной подсети, которая подключается к общедоступному Интернету через общедоступную таблицу маршрутов и интернет-шлюз. это работает с общедоступным IP-адресом x.x.x.x:3000, частным IP-адресом 10.0.1.50:3000
  • один частный сервер, к которому я могу подключиться через частную таблицу маршрутов с моего общедоступного сервера по адресу 10.0.2.50:3001

Что работает -

  • я могу посетить общедоступный сервер и увидеть загрузку интерфейсных ресурсов, но он никогда не подключается.
  • я могу свернуть частный сервер - свернуть 10.0.2.50:3001, когда я sshed на общедоступном сервере.
  • я могу подключиться к общедоступному клону частного сервера на общедоступном IP-адресе. это подтверждает правильность кода для подключения. const socket = io("x.x.x.x:3001")
  • если я установлю обратный proxy_pass nginx = http:10.0.2.50:3001; это работает, у меня есть настройка тестовой страницы для отладки кода на стороне сервера
  • я протестировал cors, как указано в документации по сокету io cors - curl "http://10.0.2.50:3001/socket.io/?EIO=4&transport=polling", и это дает ожидаемые результаты. для тестирования у меня есть политика open cors, прикрепленная к частному серверу.
  • Я сделал свои настройки безопасности очень открытыми для тестирования. у большинства из них все входящие и исходящие открыты.

Я чувствую, что подключение к частному серверу в vpc является ограничением сокета io, но я не уверен, почему это так, и мне было любопытно, есть ли обходной путь.

заранее спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

"My feeling is that connecting to a private server in a vpc is a socket io limitation"

Нет, просто так работают сети. Ваш интерфейсный код работает в веб-браузере на вашем ноутбуке, а не в VPC. Ваш ноутбук не находится внутри VPC. Ваш ноутбук может подключаться только к общедоступным ресурсам в вашем VPC, он не может подключаться к частным ресурсам в вашем VPC. Это само определение общедоступных и частных ресурсов VPC.

Чтобы соединения Socket.IO работали между веб-браузерами в общедоступном Интернете и вашими внутренними серверами, эти серверы должны находиться в общедоступной подсети и иметь общедоступный IP-адрес, или трафик должен проходить через общедоступный сервер или общедоступный балансировщик нагрузки.

спасибо за ответ, очень новичок в этом, поэтому разъяснения приветствуются. что меня сбивает с толку, так это то, что мне кажется, что я подключаюсь/имею доступ к частному серверу через proxy_pass и/или curl. Я понимаю, что разница между соединением proxy_pass/curl и socket io заключается в том, что я обращаюсь к частному серверу через общедоступный сервер, а не через код на стороне клиента.

user2503648 15.03.2022 21:47

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