2013-03-05 10 views
39

Tomcat 서버를 두 포트에서 동시에 수신 대기하도록 (HTTP 프로토콜의 경우) 모두 배포하려고합니다.두 개의 다른 포트에서 Tomcat 서버 실행

이 요구 사항을 이해하고 있는지 확인하기 위해 하나의 서버 인스턴스 만 있지만 두 개의 포트에서 HTTP 프로토콜을 수신하려고합니다. 예를 들어 누구나 포트 번호 7080 및 8080을 사용하여 내 서버에 배포 된 응용 프로그램에 액세스 할 수 있습니다.

그렇게 할 수 있습니까? 가능하다면 어떻게이 문제를 해결할 수 있습니까?

+0

을 webapps_1하는 웹 어플리케이션처럼 appBase 이름을 변경해야

  • Catalina_2
  • 에 카탈 같은 엔진의 이름을 변경해야 나는 8080과 7080 포트로 테스트하고있다. 8080과 8080로 테스트하면 실패합니다. 왜 그럴까? – Narendra

    +0

    포트 80은 이미 다른 것으로 사용되었지만, 예를 들어 Apache Web Servier 일 수 있습니다. – Magnilex

    +1

    네가 맞습니다. 이상한 이유로 내 Skype는이 포트를 사용합니다. 80. Skype 프로세스를 종료하고 나면 서버가 잘 돌아갑니다. 답변 해 주셔서 감사합니다. – Narendra

    답변

    39

    매우 간단합니다. conf/server.xml 구성 파일을보고 원하는 포트에 대한 새 커넥터를 추가하기 만하면됩니다. 예를 들어, 다음과 같은 커넥터가있는 경우 :

    <Connector port="8080" protocol="HTTP/1.1" 
          connectionTimeout="20000" 
          redirectPort="8443" 
          URIEncoding="UTF-8" /> 
    

    이와 같은 새 커넥터를 추가하기 만하면 포트 매개 변수가 변경됩니다. 그게 다야, 다시 시작하면 끝이야.

    +1

    java.lang.Exception : Socket bind failed : [730048] 일반적으로 각 소켓 주소 (프로토콜/네트워크 주소/포트)를 한 번만 사용할 수 있습니다. – Narendra

    +2

    @ Narendra : "port"와 "redirectPort"매개 변수를 모두 변경 했습니까? 어떤 바람둥이 버전을 사용하고 있습니까? – Magnilex

    +0

    다른'port' 값을 사용했다면'redirectPort' 매개 변수를 변경할 필요가 없다는 것을 알았습니다. –

    19

    예, 가능합니다. 직접 테스트했습니다. 이 같은 (폴더 이름의 conf에 위치) 그냥 편집의 server.xml :

    <Connector port="8080" protocol="HTTP/1.1" 
          connectionTimeout="20000" 
          redirectPort="8443" /> 
    <Connector port="8081" protocol="HTTP/1.1" 
          connectionTimeout="20000" 
          redirectPort="8444" /> 
    

    이 뜻을 설치 Tomcat은 두 포트 및 8081듣습니다.

    2

    당신은

    <Service name="sample"> 
    
        <Connector port="81" protocol="HTTP/1.1" maxThreads="100" connectionTimeout="2000"/> 
    
        <Engine name="sample" defaultHost="sample"> 
         <Host name="myhostname" appBase="webapp2"> 
          <Context docBase="C:\websites\sample\" /> 
         </Host> 
        </Engine> 
    
    </Service> 
    
    +0

    다음 오류가 발생합니다. java.lang.Exception : Socket bind failed : [730048] 일반적으로 각 소켓 주소 (프로토콜/네트워크 주소/포트)를 한 번만 사용할 수 있습니다. – Narendra

    +0

    포트를 81에서 요구 사항으로 변경했습니다. –

    +0

    이것은 작동하지 않습니다. java.util.concurrent.ExecutionException을 말하는 내 콘솔에서 많은 예외가 발생합니다. org.apache.catalina.LifecycleException : 구성 요소 [StandardEngine [sample] .StandardHost [m yhostname] .StandardContext [null]을 초기화하지 못했습니다. ]] ................. 발생 원인 : org.apache.catalina.LifecycleException : 시작시 하위 컨테이너가 실패한 경우 – Narendra

    1

    가 켜져 있는지 확인하십시오 당신의 server.xml에 다음 코드를 지정할 수있는 어떤 특권 포트를 사용하려는 경우, 당신이 그것을 사용해야하기 때문에 당신이 Tomcat을 실행하는 사용자 루트 사용자 아래에.

    iptables를 사용하여 포트 80을 8080으로 리디렉션 할 수도 있습니다. 이 같은 뭔가 :

    iptables -t nat -A PREROUTING -d 192.168.10.16 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 
    

    이 당신은 /conf/server.xml에 2 개 개의 다른 서비스를 정의 할 수 있습니다

    +1

    나는이 질문에 대답한다고 생각하지 않는다 ... –

    +1

    나는 왜 안 보이지. 아마도 1024 아래의 다른 포트를 사용해야하고 예제로 포트 7080만을 제공했을 것입니다. 다른 답변도 유효하며 다른 접근 방법입니다. – Cyberzoo

    +1

    iptables가 유효한 접근법이며 사전 구성된 서버를 편집하는 것이 가능한 해결책은 아닙니다 (이 문제를 간결하게 해결하는 부적절한 Dockerized 앱이 있음) – tjborromeo

    11

    을 도움이되기를 바랍니다. 예는 다음과 같습니다

    ,

    <Service name="Catalina_2"> 
        <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" /> 
        <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" /> 
        <Engine name="Catalina_2" defaultHost="localhost"> 
         <Realm className="org.apache.catalina.realm.LockOutRealm"> 
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
         </Realm> 
         <Host name="localhost" appBase="webapps_2" unpackWARs="true" autoDeploy="true"> 
         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
           prefix="localhost_access_log." suffix=".txt" 
           pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
         </Host> 
        </Engine> 
        </Service> 
    
    
        <Service name="Catalina"> 
        <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
        <Engine name="Catalina" defaultHost="localhost"> 
         <Realm className="org.apache.catalina.realm.LockOutRealm"> 
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
         </Realm> 
         <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
           prefix="localhost_access_log." suffix=".txt" 
           pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
         </Host> 
        </Engine> 
        </Service> 
    

    : 당신은 바람둥이 힙 크기를 증가하는 데 필요한 수 있습니다.

    1

    다른 포트에 tomcat을 실행 중입니다. 우리는

    우리가 포트 없음을 변경할 필요가

    1. server.xml 파일의 서비스 태그 안에 네 가지를 변경해야합니다.우리는 더 8443 같은 8444
    2. 에있는 redirectPort을 변경해야 8080
    3. 80처럼 우리는 우리가 Stranegly하면
    관련 문제