หนึ่งจะได้รับ tomcat ผูกกับที่อยู่ ipv4 ได้อย่างไร


32

ฉันเพิ่งติดตั้ง tomcat ผ่านสคริปต์การติดตั้งจาก apache solr typo3 community และใช้เวลา 3 วันที่ผ่านมาพยายามหาสาเหตุว่าทำไมมันไม่ทำงานจนกว่าจะมีโอกาสฉันสังเกตเห็นว่าเมื่อฉันสอบถามกระบวนการฟังพอร์ตผ่าน "lsof -i "มันถูกผูกไว้กับโปรโตคอล ipv6 ฉัน googled ทุกที่และส่วนใหญ่บอกว่าการตั้งค่าที่อยู่เป็น0.0.0.0ในตัวเชื่อมต่อ tomcat ช่วยแก้ไขปัญหานี้คนอื่นพูดว่าการตั้งค่าJAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; ฉันลองใช้อดีตซึ่งใช้งานไม่ได้ แต่อย่างหลังฉันไม่แน่ใจว่าจะใส่ไว้ที่ไหน ทางออกหนึ่งที่ฉันอ่านแนะนำให้วางไว้ในsetenv.shแต่ฉันไม่พบไฟล์นี้ในการติดตั้งโพงของฉัน ฉันขอขอบคุณความช่วยเหลือในขณะนี้เกี่ยวกับเรื่องนี้ รุ่น Tomcat คือ 6.x และระบบปฏิบัติการเป็น Ubuntu 11.10 ขอบคุณ


1
มันใช้ ips / พอร์ตอะไรฟังบน lsof -i?
กลายเป็น

@becomingwisest 8080.
Dark Star1

คุณถูกต้อง - ไฟล์ setenv.sh ไม่มีอยู่นอกกรอบ คุณต้องสร้างไฟล์ setenv.sh ในไดเรกทอรี bin ของ CATALINA_BASE หรือ CATALINA_HOME สคริปต์เริ่มต้นตรวจสอบว่าคุณสร้างไฟล์หรือไม่หากคุณสร้างไฟล์กำหนดเอง (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
ฉันจะใช้ CATALINA_OPTS แทน JAVA_OPTS โดยเฉพาะถ้าคุณมีตัวเลือก JVM อื่น ๆ ที่คุณต้องการส่งผ่านไปยัง JVM เมื่อ Tomcat เริ่มทำงาน หากคุณใช้ JAVA_OPTS ตัวเลือกเดียวกันนี้จะถูกส่งไปยังการปิดตัว Tomcat ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ / คาดหวัง ใช้ CATALINA_OPTS แทน :)
nevenc

ฉันเลือกสิ่งนี้เป็นคำตอบในตอนนี้เนื่องจากคนส่วนใหญ่ที่มีปัญหานี้ในวันนี้น่าจะใช้ Tomcat รุ่นใหม่กว่า
ดาร์กสตาร์

27

ตกลงฉันแก้ไขมันได้ในที่สุด ฉันถูกสั่งให้ลองใช้วิธีนี้และวิธีการแก้ปัญหาของ Henk ดูเหมือนว่าจะไม่ทำงานกับเซิร์ฟเวอร์เสมือนระยะไกล ฉันคาดเดาความจริงที่ว่าเพราะฉันอยู่ในพื้นที่เคอร์เนลที่ใช้ร่วมกันดังนั้นผู้ให้บริการป้องกันนี้ ไม่ว่าในกรณีใดก็ตามที่ฉันเพิ่ม: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesไปยังสคริปต์เริ่มต้น catalina.sh และที่ดูเหมือนจะแก้ไขปัญหาการเชื่อมโยง tomcat กับ ipv6


3
ดังนั้นคุณจึงใช้ VPS ร่วมกับเคอร์เนลที่ใช้ร่วมกัน ...
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 สำหรับ TYPO3 " คุณสามารถเปลี่ยนที่อยู่ในไฟล์server.xmlได้ ค่าเริ่มต้นชี้ไปที่ localhost ดังนั้นมองหา 127.0.0.1 และเปลี่ยนเป็นที่อยู่ IPv4 ที่คุณต้องการ อย่าลืมรีสตาร์ท Tomcat6 เพื่อให้การเปลี่ยนแปลงมีผล

UPDATE, 20120521

ดูความคิดเห็นของฉันด้านล่างเกี่ยวกับวิธีปิดการใช้งาน IPv6 บน Ubuntu 11.10

ฉันได้ทำการทดสอบสิ่งนี้บน Virtualbox-VM บน Mac ของฉันแล้ว ที่อยู่สำหรับพอร์ตเชื่อมต่อ 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 ::: * ฟัง ซึ่งฉันคิดว่าแปลก แต่ปัญหาก็ถูกจำลองบน vm ของเพื่อนซึ่งโฮสต์บน mac
ดาร์กสตาร์ 1

และเมื่อปิดใช้งาน IPv6 นี่คือวิธีการสำหรับ Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ubuntu-11-10
Henk


0

พร้อมกับคำตอบอื่น ๆ ที่ใช้ setenv.sh และ CATALINA_OPTS ...

การใช้ Tomcat SSL กับ APR วิธีเดียวที่ฉันจะทำให้ Tomcat เชื่อมกับ ipv4 คือการเพิ่มสิ่งนี้ลงใน config ของตัวเชื่อมต่อ:

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

Debian 8 นำทางไปสู่การใช้โปรแกรมแก้ไขรายการโปรดของคุณใน/ etc / default / grub ; มองหาส่วนGRUB_CMDLINE_LINUX_DEFAULT = "เงียบ" ** แล้วเพิ่ม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 เริ่มบริการใหม่ tomcat8

คุณควรจะใช้ IPv4 ทันที

กรุณาโพสต์ในอนาคตรวมถึงเส้นทางที่สมบูรณ์และชื่อไฟล์ ขอขอบคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.