동일한 서버에서 웹 소켓 서버 및 http 서버 실행


8

nginx를 사용하여 PHP 응용 프로그램의 인스턴스를 제공하고 동시에 Ratchet 앱을 실행하여 웹 소켓 연결을 청취합니다. 문제는 두 인스턴스 모두 동일한 포트 (80)를 사용하고 있다는 것입니다.

두 서버를 모두 처리 할 수 ​​있도록 서버를 어떻게 설정합니까?

편집 : 방금 질문이 여러 번 다운 투표 된 것을 보았습니다. 상당히, 나는 분명하게 질문하지 않았습니다. 죄송합니다. 나는 내 실사를했다. 내가 요청한 내용을 분명히하려고 노력할 것입니다. 웹 소켓 프로토콜의 일부 측면을 오해했을 수도 있습니다.이 경우 나를 수정하십시오.

특정 포트를 수신하는 프로세스가 하나만있을 수 있다는 것을 잘 알고 있습니다. 실제로 문제가있는 것은 웹 소켓 전체입니다. 웹 소켓 요청은 HTTP 핸드 셰이크로 시작합니다. 그 후에 메커니즘이 있습니다. 해당 세션을 특정 포트로 '업그레이드'합니다.

내가 읽은 내용 에서이 업그레이드 메커니즘은 웹 서버에서 처리되는 것으로 보입니다. 그렇다면이 프로세스를 처리하기 위해 nginx를 어떻게 구성합니까?

전반적으로 80 이외의 포트에서 웹 소켓 서버를 실행하는 것에 대해 염려하는 것은 포트가 차단되었을 가능성입니다. 이 우려가 근거가 없는가? 어떻게 설정해야하는지 조언이 있습니까?


that_guy - 제발 검토 serverfault.com/help/how-to-ask은 - 반드시 게시하기 전에 실사를 수행 할 수 있습니다. 우리는 사람들이 질문하는 것을 좋아하지만 사람들이 숙제를하는 것도 좋아합니다.
ETL

답변:


16

끔찍하게 쓰여진 질문이지만 내가 찾던 용어는 리버스 프록시였습니다.

기본적으로, 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은 포트 8000에서 수신 대기하는 동일한 서버의 웹 소켓 인스턴스로 전달됩니다.


큰 도움 !! Thanxx
gunjot 싱

해당 위치 블록 내부의 또 다른 유용한 옵션이 될 것입니다 proxy_read_timeoutproxy_write_timeout활동에 연결 해제를 방지 할 수 있습니다.
Vi.

필요한 문제 해결을 해결하지 못했습니다 !
Nɪsʜᴀɴᴛʜ

2

서버는 동일한 포트 / IP 주소에서 수신 대기하는 두 개의 서로 다른 소프트웨어를 가질 수 없습니다. 그렇지 않으면 여러 애플리케이션이 동일한 포트에 바인딩 될 수있는 경우 트래픽이 어떻게 애플리케이션 XYZ로 라우팅됩니까?

포트 (컴퓨터 네트워킹) 에서 포트 에 대해 자세히 알아볼 수 있습니다.

해야 할 일은 다음 옵션 중 하나입니다.

  1. 두 응용 프로그램 중 하나에 다른 포트를 사용하고 방화벽을 통해 허용하십시오.
  2. 서로 다른 두 IP 주소를 사용하고 각 응용 프로그램을 해당 IP 주소에 바인딩하십시오.

방화벽은 설정 한 내용에 따라 구성하면됩니다.


더 많은 정보를 제공 할 수 있습니까? 방화벽에 문제가 있습니까? websocket의 장점 중 하나가 그것을 피하는 것이 아닙니까?
hndr

6
HTTP 서버와 Websocket 서버를 하나의 프로세스로 가질 있으므로 공유 포트가 가능 합니다.
Pacerier

0

두 가지 옵션이 있습니다.

  1. 하나를 다른 포트에 바인딩 (예 : 8000)
  2. (가능한 경우) 추가 IP 주소를 서버에 추가하고 웹 서버와 웹 소켓 서버를 다른 IP에 바인딩하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.