바람둥이가 ipv4 주소에 어떻게 바인딩됩니까?


32

최근 아파치 solr typo3 커뮤니티의 설치 스크립트를 통해 tomcat을 설치했으며 우연히 그 이유를 알아 내기 위해 지난 3 일을 보냈습니다. "lsof -i ", 그것은 ipv6 프로토콜에 바인딩되었습니다. 나는 모든 곳에서 구글을 검색했으며 대부분 tomcat 커넥터에서 주소를 0.0.0.0 으로 설정 하면이 문제가 해결 된다고 말하고 다른 사람들은 setting JAVA_OPTS = "-Djava.net.preferIPv4Stack = true" ; 나는 작동하지 않는 전자를 시도했지만 후자는 어디에 넣을지 잘 모르겠습니다. setenv.sh 에 넣을 것을 제안하는 어딘가에서 읽은 한 가지 해결책하지만 Tomcat 설치 에서이 파일을 찾을 수 없습니다. 나는 이것에 관한 모든 도움을 주셔서 감사합니다. Tomcat 버전은 6.x이고 OS는 우분투 11.10입니다. 감사


1
lsof -i를 통해 어떤 IP / 포트를 청취하고 있습니까?
becomingwisest

@becomingwisest 8080.
Dark Star1

맞습니다. setenv.sh 파일이 기본적으로 존재하지 않습니다. CATALINA_BASE 또는 CATALINA_HOME bin 디렉토리에 setenv.sh 파일을 작성해야합니다. 시작 스크립트는 파일을 작성했는지, 사용자 정의 (setenv.sh) 파일을 작성했는지 확인합니다. 시작 스크립트는 파일을 호출합니다. 그렇지 않으면 무시하고 계속 진행합니다.
nevenc

답변:


28

많은 사람들이 catalina.sh시작 스크립트 업데이트를 제안했습니다 . 예, 해당 솔루션은 작동하지만 catalina.sh스크립트를 사용자 정의 / 업데이트해서는 안됩니다. 모든 변경 사항은 대신 사용자 지정 스크립트로 이동해야합니다 setenv.sh.

참고 : TOMCAT_HOME/bin/setenv.sh기본적으로는 존재하지 않으므로 작성해야합니다. 체크 catalina.sh스크립트를하고있는 경우에는 시작 스크립트 수표를 볼 수 setenv.sh있는, 그리고 그것을 않는 경우 실행합니다.

따라서 TOMCAT_HOME/bin/setenv.sh한 줄로 새 스크립트 를 만드는 것이 좋습니다 .

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "

3
특히 Tomcat 시작시 JVM에 다른 JVM 옵션을 전달하려는 경우 JAVA_OPTS 대신 CATALINA_OPTS를 사용합니다. JAVA_OPTS를 사용하는 경우 동일한 옵션이 Tomcat 종료로 전달됩니다. 대신 CATALINA_OPTS를 사용하십시오 :)
nevenc

오늘이 문제를 겪고있는 대부분의 사람들이 최신 버전의 바람둥이를 사용하고 있기 때문에 이것을 지금 정답으로 선택하고 있습니다.
다크 스타 1

27

좋아 나는 마침내 그것을 해결했다. 나는 이것 과 Henk의 해결책 을 시도 하도록 지시 받았다 . 어느 것도 원격 가상 서버에서 작동하지 않는 것 같습니다. 공유 커널 공간에 있기 때문에 공급자가 이것을 방지한다는 사실을 추측하고 있습니다. 어쨌든 나는 JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressescatalina.sh 시작 스크립트 에 다음 을 추가 했는데 그것은 tomcat을 ipv6에 바인딩하는 문제를 수정 한 것으로 보입니다.


3
공유 커널이있는 VPS를 사용 중입니다 ... D' oh!
Henk

이는 8 바람둥이로 더 이상 작동하지 않을 것
Ortomala Lokni

1
Tomcat 8에서는이 옵션이 효과가 없었지만 nevenc의 답변은 효과가있었습니다.
Edenshaw

4

catalina.sh를 수정하는 올바른 구문은 다음과 같습니다.

JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "

3

이 설치 프로그램 ( " Apache Solr for TYPO3 ")을 사용한 경우 파일에서 주소를 변경할 수 있습니다 server.xml. 기본값은 localhost를 가리 키므로 127.0.0.1을 찾아 원하는 IPv4 주소로 변경하십시오. 변경 사항을 적용하려면 Tomcat6을 다시 시작해야합니다.

업데이트, 20120521

Ubuntu 11.10에서 IPv6을 비활성화하는 방법에 대한 아래 내 의견을 참조하십시오.

내 Mac의 Virtualbox-VM에서 성공적으로 테스트했습니다. 커넥터 포트 8080의 주소가 127.0.0.1에서 0.0.0.0 인치로 변경되었습니다 server.xml.

그런 다음 IPv6을 비활성화하면 "tcp6"이 사라 지므로 IPv4 전용 주소에 바인딩됩니다.

IPv6 사용 전 / 사용시 :

# netstat -anp | grep 8080   
tcp6       0      0 :::8080                 :::*                    LISTEN      1972/java

이후 / IPv6 비활성화 :

# netstat -anp | grep 8080   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2045/java

이것도 시도했지만 작동하지 않았습니다 netstat는 프로세스가 ipv4 주소에 바인딩되어 있음에도 불구하고 여전히 ipv6 a la를 찾고 있음을 나타냅니다. tcp6 0 0 XXXX : 8080 ::: * LISTEN. 나는 이상하다고 생각하지만 문제는 Mac에서 호스팅되는 내 친구의 vm에서도 복제되었습니다.
다크 스타 1

그리고 IPv6가 비활성화되면? Ubuntu 11.10의 사용법
Henk


0

setenv.sh 및 CATALINA_OPTS를 사용하는 다른 답변과 함께 ...

Tomcat SSL을 APR과 함께 사용하여 Tomcat을 ipv4에 바인딩 할 수있는 유일한 방법은 이것을 커넥터 구성에 추가하는 것입니다.

address="0.0.0.0"

server.xml은 다음과 같습니다.

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150"
               SSLEnabled="true"
               scheme="https"
               compression="off"
               connectionTimeout="1190"
               address="0.0.0.0"
               >

-2

데비안 8은 / etc / default / grub 에서 좋아하는 편집기를 사용하여 이동합니다 ; GRUB_CMDLINE_LINUX_DEFAULT = "quiet"** 섹션을 찾은 다음 ipv6.disable = 1 을 추가하십시오 ( 아래 참조).

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 조용한"

저장하고 종료. 동일한 디렉토리에서 / etc / default / tomcat8 에서 선호하는 편집기를 사용 하고 주석 처리 될 JAVA_OPTS = 섹션을 찾아 해당 라인 아래에 다음을 추가하십시오. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

저장하고 종료

명령 프롬프트에서 update-grub을 입력하십시오. sudo와 함께 sudo를 사용하는 경우 tomcat8 service를 다시 시작하십시오.

이제 IPv4에 있어야합니다.

향후 게시물에는 완전한 경로와 파일 이름이 포함되어 있습니다. 고맙습니다

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