Если HTTP/2 включен, Jetty Stop-Port не работает.

Я работаю с автономной версией Jetty 9.3.9 (start.jar) и получил следующую проблему:

В Jetty включен SSL, и доступ к нему возможен только через https. Запуск и остановка причала-сервера управляются двумя сценариями оболочки, которые определяют порт остановки и ключ остановки:

java -DSTOP.PORT=PORT -DSTOP.KEY=secret start.jar

PORT и KEY – это просто заполнители

Через параметр --stop сервер Jetty останавливается корректно. Теперь, когда модуль http2 включен (он работает отлично) и выполняется стоп-скрипт, я получаю следующую ошибку (первая строка переведена).

java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:244)
at org.eclipse.jetty.start.Main.stop(Main.java:512)
at org.eclipse.jetty.start.Main.stop(Main.java:491)
at org.eclipse.jetty.start.Main.doStop(Main.java:479)
at org.eclipse.jetty.start.Main.start(Main.java:403)
at org.eclipse.jetty.start.Main.main(Main.java:75)

и сервер не выключается. При проверке с помощью ps aux также теперь есть два процесса, один из которых содержит следующую строку и также создается, когда http2 отключен:

java -DSTOP.PORT=PORT -DSTOP.KEY=secret 

Другой (новый) содержит огромный уродливый вызов java, и похоже, что он загружает разные ресурсы через Xbootclasspath

java -Xbootclasspath/p:lib/alpn/alpn-boot-8.1.7.v20160121.jar 
-Djava.io.tmpdir=/tmp -Djetty.home=jettyfolder/jetty-9.3.9 
-Djetty.base=jettyfolder/jetty-9.3.9/myappbase 
-cp jettyfolder/jetty-9.3.9/lib/apache-jsp/org.eclipse.jdt.core.compiler.
ecj-4.4.2.jar:jettyfolder/jetty-9.3.9/lib/apachejsp/org.eclipse.jetty.apache-jsp-9.3.9.v20160517.jar:jettyfolder/jetty-9.3.9/lib/apache- 

... и так далее. Вероятно, он принадлежит ALPN, которым пользуется HTTP/2.

Как только отключается http2 (например при переименовании папки start.d), студаун через порт и ключ снова работает.

Edit2, добавлен вывод start.jar --list-config:

Java Environment:
-----------------
java.home = jettyfolder/jetty-9.3.9/jdk1.8.0_91/jre
java.vm.vendor = Oracle Corporation
java.vm.version = 25.91-b14
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
java.vm.info = mixed mode
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.8.0_91-b14
java.io.tmpdir = /tmp
user.dir = jettyfolder/jetty-9.3.9/myappbase
user.language = de
user.country = DE

Jetty Environment:
-----------------
jetty.version = 9.3.9.v20160517
jetty.tag.version = master
jetty.home = jettyfolder/jetty-9.3.9
jetty.base = jettyfolder/jetty-9.3.9/myappbase

Config Search Order:
--------------------
<command-line>
${jetty.base} -> jettyfolder/jetty-9.3.9/myappbase
${jetty.home} -> jettyfolder/jetty-9.3.9

JVM Arguments:
--------------------
-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.7.v20160121.jar

System Properties:
------------------
(no system properties specified)

Properties:
-----------
java.version = 1.8.0_91
java.version.major = 1
java.version.minor = 8
java.version.revision = 0
java.version.update = 91
jetty.ssl.port = 8200
jetty.sslContext.keyManagerPassword = SOMEPASSWORD(placehoder)
jetty.sslContext.keyStorePassword = SOMEPASSWORD(placehoder)
jetty.sslContext.keyStorePath = etc/keystore
jetty.sslContext.trustStorePassword = SOMEPASSWORD(placehoder)
jetty.sslContext.trustStorePath = etc/keystore
Jetty Server Classpath:
-----------------------
Version Information on 15 entries in the classpath.
Note: order presented here is how they would appear on the classpath.
changes to the --module=name command line options will be reflected here.
    changes to the --module=name command line options will be reflected here.
0:                    3.1.0 | ${jetty.home}/lib/servlet-api-3.1.jar
1:                 3.1.0.M0 | ${jetty.home}/lib/jetty-schemas-3.1.jar
2:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-http-9.3.9.v20160517.jar
3:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-server-9.3.9.v20160517.jar
4:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-xml-9.3.9.v20160517.jar
5:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-util-9.3.9.v20160517.jar
6:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-io-9.3.9.v20160517.jar
7:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-security-9.3.9.v20160517.jar
8:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-servlet-9.3.9.v20160517.jar
9:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-alpn-server-9.3.9.v20160517.jar
10:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-webapp-9.3.9.v20160517.jar
11:          9.3.9.v20160517 | ${jetty.home}/lib/jetty-deploy-9.3.9.v20160517.jar
12:          9.3.9.v20160517 | ${jetty.home}/lib/http2/http2-common-9.3.9.v20160517.jar
13:          9.3.9.v20160517 | ${jetty.home}/lib/http2/http2-hpack-9.3.9.v20160517.jar
14:          9.3.9.v20160517 | ${jetty.home}/lib/http2/http2-server-9.3.9.v20160517.jar

Jetty Active XMLs:
------------------
${jetty.home}/etc/jetty.xml
${jetty.home}/etc/jetty-ssl.xml
${jetty.home}/etc/jetty-ssl-context.xml
${jetty.home}/etc/jetty-alpn.xml
${jetty.home}/etc/jetty-deploy.xml
${jetty.home}/etc/jetty-http2.xml
${jetty.home}/etc/jetty-https.xml

person Akkusativobjekt    schedule 08.07.2016    source источник
comment
Запустите это и обновите свой вопрос выводом... $ cd /path/to/myappbase && java -jar /path/to/jetty-dist/start.jar --list-config   -  person Joakim Erdfelt    schedule 08.07.2016
comment
с http2 или без?   -  person Akkusativobjekt    schedule 08.07.2016
comment
поскольку это происходит с http2, я говорю, что модуль http2 включен, и вы указываете конфигурацию.   -  person Joakim Erdfelt    schedule 08.07.2016
comment
Я добавил вывод start.jar --list-config   -  person Akkusativobjekt    schedule 11.07.2016


Ответы (2)


Опция -DSTOP.PORT=PORT недействительна, как заявлено.

Значение должно быть номером порта, к которому у Jetty есть разрешения для привязки.

Выберите число от 1025 до 65534 и используйте его.

Eg: -DSTOP.PORT=27272

person Joakim Erdfelt    schedule 08.07.2016
comment
Это просто заполнитель, я обновлю свой вопрос, чтобы сделать его более понятным. - person Akkusativobjekt; 08.07.2016

Наконец я нашел решение:

Вместо добавления -DSTOP.PORT=PORT -DSTOP.KEY=secret к вызову бинарника java я просто добавил его в файл start.ini сервера причала. Первые две строки моего start.ini теперь выглядят так:

-DSTOP.PORT=PORT 
-DSTOP.KEY=secret 

и это работает! Я думаю, точная позиция в файле конфигурации не имеет значения. Также оба параметра больше не видны с px aux.

person Akkusativobjekt    schedule 13.07.2016