Назад | Перейти на главную страницу

Запуск сервера websocket и http-сервера на одном сервере

Я использую nginx для обслуживания экземпляра приложения PHP, а также одновременно запускаю приложение Ratchet для прослушивания соединения с веб-сокетом. Проблема в том, что оба этих экземпляра используют один и тот же порт (80).

Как мне настроить сервер, чтобы я мог обслуживать оба?

Изменить: только что вернулся, чтобы увидеть, что вопрос был отклонен несколько раз, по понятным причинам я действительно не задавал вопрос четким образом. Я прошу прощения за то. Тем не менее, я проявил должную осмотрительность. Я постараюсь уточнить, о чем я спрашивал, возможно, я неправильно понял некоторые аспекты протокола веб-сокета, и в этом случае, пожалуйста, исправьте меня:

Я хорошо знаю, что может быть только один процесс, прослушивающий конкретный порт, что у меня на самом деле есть проблема, и это вся вещь веб-сокета, насколько я понимаю, запрос веб-сокета начинается с рукопожатия HTTP, после которого будет механизм чтобы «обновить» этот сеанс до определенного порта.

Из того, что я читал, кажется, что этот механизм обновления обрабатывается веб-сервером. Итак, как мне настроить nginx для работы с этим процессом?

В общем, единственное, что меня беспокоит при запуске сервера websocket на порту, отличном от 80, - это возможность блокировки порта. Это беспокойство необоснованно? Какие-нибудь советы о том, как мне это настроить?

Ужасно написанный вопрос, но я искал термин обратный прокси.

По сути, точно так же, как nginx может пересылать разные запросы нескольким экземплярам веб-приложения на основе пути или имени хоста, его также можно настроить для «пересылки» запроса на экземпляр сервера веб-сокета. например.:

location /socket {
    proxy_pass http://websocket;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

upstream websocket{
    server localhost:8000;
}

map $http_upgrade $connection_upgrade {
    default Upgrade;
    '' close;
}

HTTP-запросы к http://hostname будет обслуживаться обычная html-страница, а подключение через веб-сокет к wss://hostname/socket будут перенаправлены на экземпляр websocket на том же сервере, который прослушивает порт 8000.

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

Вы можете узнать больше о портах из Порт (компьютерная сеть)

Что вам нужно сделать, это один из следующих вариантов:

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

Ваш брандмауэр просто необходимо настроить в соответствии с тем, что вы настроили.

У вас есть два варианта:

  1. Привяжите один к другому порту (например, 8000)
  2. (если возможно) добавьте дополнительный IP-адрес к серверу и привяжите веб-сервер и сервер веб-сокета к разным IP-адресам.