2016-11-21 121 views
1

我正在使用獨立jetty 9.1.5部署java webapp。 我想jetty使用IPv4而不是IPv6,但我無法做到! 當我鍵入netstat -tnlp我可以看到下面的結果:如何強制Jetty使用IPv4

tcp6  0  0 127.0.0.1:554   :::*     LISTEN  27535/java 

...所以,告訴我Jetty是使用IPv6,即使在我jetty-http.xml文件我有:

<Set name="host"><Property name="jetty.host" default="127.0.0.1" /></Set> 

我也開始有以下java選項的碼頭:

-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses 

...但無濟於事; Jetty一直在使用IPv6,我還沒有能夠強制它使用IPv4。 任何想法?

回答

1

Java is making the decision to use IPv4 or IPv6,而不是碼頭。

碼頭9.1.5很舊,考慮升級到至少Jetty 9.2.x系列。

示例127.0.0.1:554不是IPv6本地地址,netstat輸出中有某些內容關閉。

在您的${jetty.base}/start.ini中指定jetty.host,請勿編輯jetty-http.xml

重要說明:請勿編輯,更改,刪除,重命名,移動等${jetty.home}中的任何內容。在您的${jetty.base}中指定您的配置。

您是否嘗試使用127.0.0.1:554連接到正在運行的服務器? (它可能會工作)

如果你不希望Java默認到IPv6,那麼Java命令行選項應該是這樣的......

$ cd /path/to/mybase 
$ java -Djava.net.preferIPv4Stack=true -jar /path/to/jetty-dist/start.jar 

但是,如果你沒有你的機器上的IPv4堆棧(比如沒有IPv4地址的網絡接口,這是一個非常常見的設置),那麼這個java命令行選項/參數幾乎沒有意義。

+0

原來,我在'''{{jetty.base}/bin/jetty.sh'''的啓動腳本的JAVA_OPTIONS上添加了'''-Djava.net.preferIPv4Stack = true'',並且沒有影響。當我修改'''{{jetty.base}/start.ini'''上的JAVA_OPTIONS時,它就起作用了。你能讓我知道爲什麼嗎? – user3621841