Tomcatをipv4アドレスにバインドするにはどうすればよいですか?


32

最近、apache solr typo3コミュニティのインストールスクリプトを使用してtomcatをインストールし、偶然に「lsof -i」を介してポートでリッスンしているプロセスに問い合わせると、 "、それはipv6プロトコルにバインドされていました。私はどこでもグーグルで検索しましたが、ほとんどはTomcatコネクタでアドレスを0.0.0.0に設定するとこの問題が解決すると言い、他の人はJAVA_OPTS = "-Djava.net.preferIPv4Stack = true"を設定すると言います。動作しない前者を試しましたが、後者はどこに置くべきかわかりません。私がどこかで読んだ1つの解決策は、setenv.shに置くことを提案しましたしかし、Tomcatインストールでこのファイルが見つかりません。これに関する現時点でのご協力をお願いいたします。tomcatバージョンは6.xで、OSはubuntu 11.10です。ありがとう


1
lsof -i経由でリッスンしているIP /ポートは何ですか?
becomingwisest

@becomingwisest 8080
ダーク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が存在するかどうかを確認し、存在する場合は実行されます。

したがって、1 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を

現在、この問題を抱えているほとんどの人が新しいバージョンのtomcatを使用している可能性が高いため、これを答えとして選択しています。
ダークスター

27

OK、ようやく解決しました。私はこれとヘンクの解決策を試すように指示されました。どちらもリモート仮想サーバーで動作するようには見えませんでした。私は共有カーネル空間にいるので、プロバイダーがこれを防いでいるという事実を推測しています。いずれにせよJAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses、catalina.shスタートアップスクリプトに追加しました。これにより、tomcatをipv6にバインドする問題が修正されたようです。


3
共有カーネルを使用してVPSを使用しています... D'oh!
ヘンク

これは、Tomcat 8ではもう機能しないようです。
OrtomalaLokni

1
Tomcat 8では、このオプションは機能しませんでしたが、nevencの答えは機能しました。
エデンショー

4

catalina.shを変更するための正しい構文は次のとおりです。

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

3

このインストーラー「TYPO3用Apache Solr」を使用した場合、ファイル内のアドレスを変更できます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アドレスにバインドされているにもかかわらず、このリターンでtcp6 0 0 XXXX:8080 ::: * LISTENのipv6を探していることを示しています。私は奇妙だと思うが、Macでホストされている友人のvmでも問題が再現されている。
ダークスター1

そして、IPv6が無効になっているときは?Ubuntu 11.10のハウツーは次のとおりです。pario.no/ 2011/12/09
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

Debian 8は、/ etc / default / grubでお気に入りのエディターを使用して移動します。セクションGRUB_CMDLINE_LINUX_DEFAULT = "quiet" **を探して、次に示すようにipv6.disable = 1を追加します

GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable = 1 quiet"

保存して終了。同じディレクトリで/ etc / default / tomcat8のお気に入りのエディターを使用し、コメントアウトされるJAVA_OPTS =のセクションを探し、その行の下に以下を追加します。JAVA_OPTS = "$ JAVA_OPTS -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses = true"

保存して終了

コマンドプロンプトでupdate-grubと入力し、sudoでsudoを使用している場合は、tomcat8 サービスを再起動しますtomcat8 restart

これでIPv4を使用できるはずです。

今後の投稿で完全なパスとファイル名を含めてください。ありがとうございました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.