문제

이를 수행하는 좋은 방법은 무엇입니까?깔끔하게 할 수도 있나요?

이상적으로는 어떤 서버가 요청을 처리해야 하는지 결정하기 위해 패킷 헤더를 사용하고 싶습니다.그러나 더 쉽고 더 나은 방법이 있으면 알려주십시오.

도움이 되었습니까?

해결책

두 서버가 동일한 IP 주소의 동일한 포트를 수신하는 것은 불가능합니다.단일 소켓은 단일 프로세스로만 열 수 있으므로 특정 IP/포트 조합에 대해 구성된 첫 번째 서버만 성공적으로 바인딩되고 두 번째 서버는 실패합니다.

따라서 원하는 것을 달성하려면 해결 방법이 필요합니다.가장 쉬운 방법은 기본 IP/포트 조합에서 Apache를 실행하고 다음을 사용하여 IIS(다른 IP 및/또는 포트에 대해 구성되어야 함)에 대한 요청을 Apache로 라우팅하는 것입니다. mod_rewrite.

IIS가 실행되는 대체 IP 및 포트는 서버에 연결하는 클라이언트에 연결할 수 있어야 합니다.사용 가능한 IP 주소가 하나만 있는 경우 일반적으로 방화벽에 의해 차단되지 않는 IIS 포트를 선택해야 합니다(SSL이 아닌 일반 HTTP를 실행하더라도 8080 또는 443이 좋은 옵션일 수 있음).

추신또한 다른 서버가 동일한 서버의 모든 IP 주소에서 포트 80에서 실행되도록 허용하려면 먼저 httpcfg를 사용하여 IIS 기본 구성을 수정해야 합니다.이를 수행하는 절차는 Micky McQuade의 답변을 참조하십시오.

다른 팁

나는 찾았다 이 게시물 이는 둘 다 포트 80에서 수신 대기할 수 있도록 두 개의 별도 IP 주소를 갖도록 제안했습니다.

소켓 풀링으로 인해 IIS에서 변경해야 한다는 주의 사항이 있었습니다.위 링크를 기반으로 한 지침은 다음과 같습니다.

  1. 추출 httpcfg.exe Win2003 CD의 지원 도구 영역에 있는 유틸리티입니다.
  2. 모든 IIS 서비스를 중지합니다. net stop http /y
  3. IIS가 IIS용으로 지정한 IP 주소에서만 수신하도록 합니다. httpcfg set iplisten -i 192.168.1.253
  4. 확실하게 하다: httpcfg query iplisten (나열된 IP는 IIS가 수신 대기하는 유일한 IP 주소이며 다른 주소는 없습니다.)
  5. IIS 서비스를 다시 시작합니다. net start w3svc
  6. 아파치 서비스 시작

가진 사람들에게는 IP 주소 1개 그리고 여러 사이트 한 서버에서는 IIS가 아닌 다른 포트에서 수신 대기하도록 구성할 수 있습니다. 80, 예를 들어 8080 각 사이트의 속성에서 TCP 포트를 설정합니다(기본 사이트 포함).

아파치에서 활성화 mod_proxy 그리고 mod_proxy_http, 그런 다음 Apache가 IIS로 "전달"되는 요청을 명시적으로 처리하지 않도록 범용 VirtualHost(다른 모든 항목 이후)를 추가합니다.

<VirtualHost *:80>
    ServerName foo.bar
    ServerAlias *
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
</VirtualHost>

이제 사용자에게 눈에 띄는 차이 없이 Apache가 일부 사이트를 제공하고 IIS가 다른 사이트를 제공하도록 할 수 있습니다.

편집하다: IIS 사이트는 헤더를 포함하여 응답 내의 모든 URL에 포트 번호를 포함해서는 안 됩니다.

둘 다 배포판의 일부인 최소한 mod_proxy 및 mod_proxy_http가 필요합니다(아직 자동으로 빌드될 때마다 그렇지는 않음).그러면 여기를 볼 수 있습니다: http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

virtualhost 컨텍스트에서 가장 간단한 구성은 다음과 같습니다.

ProxyPass         /winapp http://127.0.0.1:8080/somedir/

ProxyPassReverse  /winapp http://127.0.0.1:8080/somedir/

(웹앱에 따라 실제 구성이 더 정교해질 수 있습니다.) Path WinApp/의 모든 요청을 Windows 서버로 투명하게 리디렉션하고 결과 출력을 클라이언트로 다시 전송합니다.

주목:제공된 페이지의 링크를 주의하세요:다시 작성되지 않으므로 일반적으로 앱에서 다음과 같은 상대 링크를 사용하는 경우 번거로움을 많이 덜 수 있습니다.

<a href=../pics/mypic.jpg">

모든 링크가 절대적인 일반적인 통합 악몽 대신:

<a href="http://myinternalhostname/somedir/crappydesign.jpg">

후자는 거의 매번 나쁩니다!

페이지의 링크를 다시 작성하려면 mod_proxy_html(mod_proxy_http와 혼동하지 마세요!)이 있지만 이는 또 다른 이야기이자 잔인한 이야기이기도 합니다.

두 개의 서로 다른 IP 주소(권장 사항) 또는 하나의 웹 서버가 다른 서버(포트 <>80에서 수신 대기)를 역방향 프록시합니다.

예를 들어:Apache는 포트 80에서 수신 대기하고 IIS는 포트 8080에서 수신 대기합니다.모든 http 요청은 (물론) 먼저 Apache로 이동합니다.그런 다음 모든 요청을 특정(가상이라는 이름의) 도메인으로 전달하거나 특정 디렉터리(예: http://www.example.com/winapp/)를 IIS에 연결합니다.

이 개념의 장점은 두 대가 아닌 단 한 대의 서버만 공개적으로 청취할 수 있다는 것입니다. 두 대의 개별 서버를 사용하는 것처럼 더 유연합니다.

단점:일부 웹앱은 형편없게 설계되었으며 역방향 프록시 인프라에 통합하기가 정말 어렵습니다.작동하는 IIS 웹앱은 작동하는 Apache에 종속되므로 몇 가지 상호 종속성이 있습니다.

꽤 오래된 게시물인 것 같은데, 이 문제에 대한 답을 찾기 위해 이 게시물을 발견했습니다.일부 답변을 읽은 후 내용이 매우 길어졌으므로 약 5분 후에 다음과 같이 매우 간단하게 문제를 해결할 수 있었습니다.

Apache의 경우 httpd.conf는 수신 포트를 80으로, '서버 이름'을 FQDN/IP :80으로 둡니다.

이제 IIS의 경우 관리 서비스 > IIS 관리자 > 왼쪽 탐색 드롭다운의 '사이트'로 이동하고 오른쪽 창에서 맨 위 줄(기본 웹 사이트)을 선택한 다음 오른쪽에서 바인딩을 선택합니다.

이제 http > edit를 선택하고 81로 변경하고 서버/PC에 대한 로컬 IP를 입력하고 도메인에 FQDN(www.domain.com) 또는 외부 IP 닫기를 입력합니다.

두 서버를 모두 다시 시작하여 라우터와 방화벽 모두에서 포트가 열려 있는지 확인하세요.

장황하게 들리지만 말 그대로 플레이하는 데 5분이 걸렸습니다.완벽하게 작동합니다.

체계:윈도우 8, IIS 8, 아파치 2.2

Windows 10을 설치하면서 다음과 같은 문제가 발생했습니다.Apache(ipv4) 및 스풀러 서비스(ipv6)는 동일한 80 포트를 수신합니다.

Apache httpd.conf 파일 편집에서 줄을 변경하는 문제를 해결했습니다.

들어봐 80

에게

127.0.0.1:80 듣기

그것은 사실이 아닙니다.예:HTTP Windows의 경우 URL 기반 포트 공유를 지원하므로 여러 프로세스가 동일한 IP 주소와 포트를 사용할 수 있습니다.

다른 IP 주소를 사용해야 합니다.Apache이든 IIS이든 서버는 수신 대기 대상인 IP 및 포트를 기반으로 트래픽을 확보합니다.수신이 시작되면 서버 이름과 같은 헤더를 사용하여 액세스 중인 사이트를 필터링하고 결정합니다.단순히 요청에서 서버 이름을 변경하는 것만으로는 할 수 없습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top