다른 IP 주소를 사용하는 포트 80의 NodeJS 및 Apache-다른 IP의 포트 80을 사용하도록 구성된 경우에도 Apache는 포트 80을 지워야합니다.


1

포트 80에서 node.js 앱을 사용하고 있습니다. 127.0.0.2:80

server.listen(80, '127.0.0.2', function() {...

그리고 다른 IP 주소 의 포트 80에서 Apache를 사용하고 싶습니다. 예를 들어 127.0.0.3:80httpd.conf에 있습니다.

Listen 127.0.0.3:80
ServerName 127.0.0.3:80

그러나 그것은 나에게 오류를 준다

다른 응용 프로그램에서 이미 Apache 포트 (80)를 사용하고 있습니다!

Apache가 수신 대기하도록 프로그래밍 된 IP의 포트 80에 관계없이 Apache가 랜덤 포트 80에 관심을 갖는 이유는 무엇입니까? 포트 80을 켜는 127.0.0.3:80것은 여전히 ​​자유 롭습니다.

나는 심지어 다른 IP 시리즈 (192.xxx, 122.xxx)로 이것을 시도했지만 Apache는 포트 80 무료, 완전 정지를 원합니다.

이상하게도, 아파치를 먼저 시작하면 아무런 문제없이 실행되고 위의 동일한 구성으로 node.js를 모두 시작할 수 있으며 둘 다 정상적으로 작동합니다. 그러나 소중한 아파치는 어떤 이유로 든 IP 주소의 포트 80에서 수신 대기하기 전에 IP 주소의 포트 80을 수신하는 사람을 좋아하지 않습니다.

응용 프로그램에서 수신 대기중인 127.0.0.2:80경우 해당 IP의 포트 80 만 사용 중이어야하고 다른 IP의 포트 80은 여전히 ​​비어 있어야한다는 것을 오해하고 127.0.0.3:80있습니까? 아니면 아파치가 잘못 작동합니까?

답변:


3

이 답변의 끝에 기본 솔루션을 제안했습니다.

HTTP는 기본적으로 TCP를 사용하며 UDP는 단일 포트에 여러 프로그램 바인딩을 지원하지만 TCP는 일반적으로 지원하지 않습니다. 따라서 로컬 머신에서 해당 IP와 함께 포트 80 (TCP)을 사용하는 프로그램이 하나만있을 수 있으므로이 경우 포트 80은 지정된 IP에 대해 비어 있지 않은 것처럼 보입니다.

별도의 루프백 IP와 관련하여 전체 127.x.x.x 넷 블록은 로컬 루프백 용으로 예약되어 있습니다. 그래서 127.0.0.1같은 컴퓨터 (즉, 로컬 호스트)을 의미한다 127.0.0.2(또는 127.0.0.3또는 127.127.127.127등). 또한 127.x.x.x"실제"IP (즉, 별도의 실제 또는 가상 NIC를 식별하는 IP) 대신 루프백 주소를 사용하고 있으므로 지정된 IP를 가진 포트 80은 두 번째 IP를 시작할 때 다른 응용 프로그램에서 이미 사용 중일 수 있습니다.

그리고 그렇습니다. 아파치가 로컬 루프백 IP로 가상 호스팅을 할 수 있지만 (즉 127.0.0.1, 127.0.0.2다른 페이지를 반환 할 수 는 있지만) 아파치 프로세스 는 여전히 기본적으로 포트 80 (TCP)에 연결되어 있습니다.

이상하게도, 아파치를 먼저 시작하면 아무런 문제없이 실행되고 위의 동일한 구성으로 node.js를 모두 시작할 수 있으며 둘 다 정상적으로 작동합니다.

여기서 "어떻게 작동하는지"가 잘 모르겠지만 Apache를 시작한 다음 포트 80 ( npm install http-server -g )에서 Node.js http-server를 시작하려고 시도한 후에도 오류가 발생합니다. 와 같은 주소 127.0.0.4가 지정되었습니다.

node.js http 서버의 이미지 시작 실패

내 구성 파일에서 Apache가 특별히 듣고 127.0.0.1:80있고 http-server가 듣고 있는지 확인해야했습니다 127.0.0.4:80. 방금 Listen 80Apache에서 사용 했다면 http-server가 실패했습니다. 아파치 자체와 프로세스 당 하나의 TCP IP / 포트 조합의 원칙 측면에서 아파치 시작을 거부하는 것은 완전히 정상입니다.

해결책

이 문제에 대한 쉬운 해결책은 동일한 시스템에서 여러 개의 NIC를 실행하는 것입니다 (각각 고유 한 IP가 있음). 이러한 방식으로 각 NIC는 고유 한 포트 80 바인딩 (IP + 포트 = 완전한 대상 주소)을 가질 수 있습니다. 다른 가능성은 NIC에 대해 "가상 인터페이스"를 시도하는 것입니다 (따라서 동일한 NIC에 두 개의 "가상"IP를 제공 할 수 있습니다).


참고

스택 오버플로-두 응용 프로그램이 같은 포트를 수신 할 수 있습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.