Làm thế nào để một tomcat liên kết với địa chỉ ipv4?


32

Gần đây tôi đã cài đặt tomcat thông qua một tập lệnh cài đặt từ cộng đồng apache solr typo3 và đã dành 3 ngày cuối cùng để tìm hiểu tại sao nó không hoạt động cho đến khi tình cờ tôi nhận thấy rằng khi tôi truy vấn quá trình nghe trên cổng thông qua "lsof -i ", Nó bị ràng buộc với giao thức ipv6. Tôi đã googled ở khắp mọi nơi và hầu hết nói rằng cài đặt địa chỉ thành 0,0.0.0 trong trình kết nối tomcat giải quyết vấn đề này, những người khác nói rằng thiết lập JAVA_OPTS = "- Djava.net.preferIPv4Stack = true" ; Tôi đã thử cái trước không hoạt động nhưng cái sau tôi không chắc nên đặt nó ở đâu. Một giải pháp tôi đọc được ở đâu đó đề nghị đưa nó vào setenv.shnhưng tôi không thể tìm thấy tập tin này trong cài đặt tomcat của tôi. Tôi sẽ đánh giá cao bất kỳ sự giúp đỡ tại thời điểm này liên quan đến điều này. Phiên bản tomcat là 6.x và HĐH là Ubuntu 11.10. Cảm ơn


1
Nó đang nghe trên cổng nào, thông qua lsof -i?
trở thành

@becomingwisest 8080.
Ngôi sao đen tối1

Bạn đã đúng - tập tin setenv.sh không tồn tại ngoài hộp. Bạn cần tạo tệp setenv.sh trong thư mục bin CATALINA_BASE hoặc CATALINA_HOME. Các tập lệnh khởi động kiểm tra xem bạn đã tạo tập tin chưa, nếu bạn đã tạo tập tin tùy chỉnh (setenv.sh) - tập lệnh khởi động gọi nó, nếu không thì bỏ qua và tiếp tục.
nevenc

Câu trả lời:


28

Nhiều đề xuất cập nhật catalina.shkịch bản khởi động. Vâng, giải pháp đó sẽ hoạt động, nhưng catalina.shkịch bản không có nghĩa là được tùy chỉnh / cập nhật. Thay vào đó, tất cả các thay đổi sẽ đi vào tập lệnh tùy chỉnh setenv.sh.

LƯU Ý: TOMCAT_HOME/bin/setenv.shkhông tồn tại theo mặc định, bạn cần tạo nó. Kiểm tra catalina.shtập lệnh và bạn sẽ thấy tập lệnh khởi động kiểm tra nếu setenv.shtồn tại và thực thi nếu có.

Vì vậy, tôi khuyên bạn nên tạo TOMCAT_HOME/bin/setenv.shtập lệnh mới với một dòng duy nhất:

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

3
Tôi cũng sẽ sử dụng CATALINA_OPTS thay vì JAVA_OPTS, đặc biệt nếu bạn có các tùy chọn JVM khác mà bạn muốn chuyển vào JVM khi khởi động Tomcat. Nếu bạn sử dụng JAVA_OPTS, các tùy chọn tương tự sẽ được chuyển vào tắt máy Tomcat, có thể không phải là những gì bạn muốn / mong đợi. Sử dụng CATALINA_OPTS thay thế :)
nevenc

Tôi đang chọn đây là câu trả lời vì hầu hết mọi người gặp phải vấn đề này ngày nay rất có thể sẽ sử dụng phiên bản mới hơn của tomcat.
Dark Star1

27

Ok tôi cuối cùng đã giải quyết nó. Tôi đã được hướng dẫn để thử giải pháp này và Henk. Cả hai dường như không hoạt động với máy chủ ảo từ xa. Tôi đoán thực tế là vì tôi đang ở trên một không gian kernel được chia sẻ nên nhà cung cấp ngăn chặn điều này. Trong mọi trường hợp tôi đã thêm: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addressesvào tập lệnh khởi động catalina.sh và điều đó dường như đã khắc phục vấn đề ràng buộc tomcat với ipv6.


3
Vì vậy, bạn đang sử dụng VPS với kernel được chia sẻ ... D'oh!
Henk

Điều này dường như không hoạt động nữa với tomcat 8.
Ortomala Lokni

1
Với tomcat 8, tùy chọn này không phù hợp với tôi, nhưng câu trả lời của nevenc đã có hiệu quả.
Edenshaw

4

Cú pháp đúng để sửa đổi catalina.sh sẽ là:

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

3

Nếu bạn đã sử dụng trình cài đặt này: " Apache Solr cho TYPO3 ", bạn có thể thay đổi địa chỉ trong tệp server.xml. Các điểm mặc định tới localhost, vì vậy hãy tìm 127.0.0.1 và thay đổi nó thành địa chỉ IPv4 mà bạn muốn. Đừng quên khởi động lại Tomcat6 để những thay đổi có hiệu lực.

CẬP NHẬT, 20120521

Xem bình luận của tôi dưới đây về cách vô hiệu hóa IPv6 trên Ubuntu 11.10.

Tôi đã thử nghiệm thành công điều này trên Virtualbox-VM trên máy Mac của mình. Địa chỉ của cổng kết nối 8080 đã được thay đổi từ 127.0.0.1 thành 0.0.0.0 in server.xml.

Sau đó, vô hiệu hóa IPv6 làm cho "tcp6" biến mất, do đó, nó bị ràng buộc với một địa chỉ chỉ có IPv4.

Trước / với IPv6 được bật:

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

Sau / IPv6 bị vô hiệu hóa:

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

Đã thử điều này và điều đó không hoạt động netstat cho thấy mặc dù quá trình bị ràng buộc với một địa chỉ ipv4, nó vẫn đang tìm kiếm một ipv6 a la này trở lại: tcp6 0 0 XXXX: 8080 ::: * LISTEN. mà tôi nghĩ là kỳ quặc nhưng vấn đề cũng đã được sao chép trên vm của bạn tôi được lưu trữ trên máy mac.
Ngôi sao đen tối1

Và khi IPv6 bị vô hiệu hóa? Đây là cách hướng dẫn cho Ubuntu 11.10: pario.no/2011/12/09/disable-ipv6-on-ub
Henk


0

Cùng với câu trả lời khác bằng cách sử dụng setenv.sh và CATALINA_OPTS ...

Sử dụng Tomcat SSL với APR, cách duy nhất tôi có thể khiến Tomcat liên kết với ipv4 là thêm phần này vào cấu hình trình kết nối:

address="0.0.0.0"

server.xml trông như thế này:

<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 điều hướng đến sử dụng trình soạn thảo yêu thích của bạn trên / etc / default / grub ; hãy tìm phần GRUB_CMDLINE_LINUX_DEFAULT = "quiet" ** sau đó thêm ipv6.disable = 1 , như được thấy bên dưới

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 yên lặng"

Lưu và thoát. Trong cùng một thư mục sử dụng trình soạn thảo yêu thích của bạn trên / etc / default / tomcat8, sau đó tìm phần có JAVA_OPTS = sẽ được nhận xét, thêm dòng dưới đây vào dòng đó. JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

Lưu và thoát

Tại dấu nhắc lệnh gõ update-grub , nếu bạn có sử dụng sudo với sudo, sau đó khởi động lại dịch vụ tomcat8 tomcat8 khởi động lại

Bạn nên có mặt trên IPv4 ngay bây giờ.

Xin vui lòng trong các bài viết trong tương lai bao gồm các đường dẫn đầy đủ và tên tập tin. Cảm ơn bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.