Как исправить «Http11NioProtocol: Ошибка чтения запроса, игнорируется» - PullRequest
0 голосов
/ 19 сентября 2019

Сбой моего приложения весенней загрузки после запуска с NPE на сервере Tomcat при запуске на службе Azure Kubernetes с SSL.

Во-первых, что работает успешно: у меня есть минимальное приложение Spring-boot, созданное с помощьюSpring Initializr:

  • Проект Gradle
  • Java 11
  • Spring Boot 2.1.8
  • Единственная зависимость: Spring Web

Я хочу использовать его с кластером kubernetes в лазурном облаке.Для этого у меня есть служба Azure Kubernetes (AKS).И я использую клив для создания образа докера.До этого момента все отлично работало.Я могу развернуть свой образ докера в реестре Azure Docker, запустить кластер kubernetes (с 1 узлом) и получить свой «мир приветствия» после вызова «http://public -ip : 8443 / hello».Я использую порт 8443, но с обычным http, чтобы убедиться, что этот порт не является источником моей проблемы.

Я хочу, чтобы мое приложение поддерживало HTTPS, поэтому я создал самозаверяющий сертификат с помощью keytool (как описано здесь: Включить HTTPS с самозаверяющим сертификатом в Spring Boot 2.0 ).Это прекрасно работает на localhost.Он также работает внутри миникуба, работающего на localhost.Но когда я использую этот образ Docker в AKS, мое приложение перестает работать через несколько секунд после запуска.

Я активировал

logging.level.org.apache.tomcat=DEBUG
logging.level.org.apache.catalina=DEBUG

в моем application.properties.Вывод моего приложения:

2019-09-19 08:22:51.291  INFO 1 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 9.623 seconds (JVM running for 10.419)
2019-09-19 08:22:53.775 DEBUG 1 --- [o-8443-Acceptor] o.apache.tomcat.util.threads.LimitLatch  : Counting up[https-jsse-nio-8443-Acceptor] latch=1
2019-09-19 08:22:58.764 DEBUG 1 --- [o-8443-Acceptor] o.apache.tomcat.util.threads.LimitLatch  : Counting up[https-jsse-nio-8443-Acceptor] latch=2
2019-09-19 08:22:58.793 DEBUG 1 --- [nio-8443-exec-1] org.apache.tomcat.util.modeler.Registry  : Managed= Tomcat:type=RequestProcessor,worker="https-jsse-nio-8443",name=HttpRequest1
2019-09-19 08:22:58.793 DEBUG 1 --- [nio-8443-exec-1] org.apache.tomcat.util.modeler.Registry  : Looking for descriptor 
2019-09-19 08:22:58.793 DEBUG 1 --- [nio-8443-exec-1] org.apache.tomcat.util.modeler.Registry  : Introspecting 
2019-09-19 08:22:58.793 DEBUG 1 --- [nio-8443-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute virtualHost public java.lang.String org.apache.coyote.RequestInfo.getVirtualHost() null
<snipped 20 lines of "Introspected attribute xyz">
2019-09-19 08:22:58.796 DEBUG 1 --- [nio-8443-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute lastRequestProcessingTime public long org.apache.coyote.RequestInfo.getLastRequestProcessingTime() public void org.apache.coyote.RequestInfo.setLastRequestProcessingTime(long)
2019-09-19 08:22:58.796 DEBUG 1 --- [nio-8443-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute errorCount public int org.apache.coyote.RequestInfo.getErrorCount() public void org.apache.coyote.RequestInfo.setErrorCount(int)
2019-09-19 08:22:58.796 DEBUG 1 --- [nio-8443-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Setting name: org.apache.coyote.RequestInfo
2019-09-19 08:22:58.797 DEBUG 1 --- [nio-8443-exec-1] o.a.tomcat.util.modeler.BaseModelMBean   : preRegister org.apache.coyote.RequestInfo@21c6ab25 Tomcat:type=RequestProcessor,worker="https-jsse-nio-8443",name=HttpRequest1
2019-09-19 08:22:58.797 ERROR 1 --- [nio-8443-exec-1] o.a.coyote.http11.Http11NioProtocol      : Error reading request, ignored

java.lang.NullPointerException: null
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.getSslSupport(NioEndpoint.java:1392) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1593) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

Может кто-нибудь подсказать мне, в чем может быть моя проблема?Спасибо!

1 Ответ

3 голосов
/ 23 сентября 2019

Это известная ошибка в Apache Tomcat 9.0.24.Он запускается отправкой простого текста на соединитель с поддержкой TLS.Его можно игнорировать, но, поскольку он довольно шумный, вы, вероятно, захотите перейти на недавно выпущенную версию 9.0.26, где это было исправлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...