Nexus 3.64.0-04 NPE Error While Login - Sonatype Nexus Repository - Sonatype Community
Nexus 3.64.0-04 NPE Error While Login
post by onurridvanoglu on Apr 25, 2024
Hey there,
I’ve a Nexus Repository server running on Docker. I’ve also configured an LDAP for log-ins. Also SSL is configured with a certificate. There was around a 30-45 min time period where some of the users could not log-in to the Nexus UI. When I checked the logs I see the following error multiple times ( more than 500 times this is logged to nexus.log):
2024-04-25 13:43:13,116+0000 WARN [qtp1894689916-2544] *SYSTEM org.eclipse.jetty.server.HttpChannel - null
java.lang.NullPointerException: null
at org.sonatype.nexus.bootstrap.jetty.DockerSubdomainRequestCustomizer.customize(DockerSubdomainRequestCustomizer.java:44)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:483)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.lang.Thread.run(Thread.java:750)
2024-04-25 13:43:13,116+0000 WARN [qtp1894689916-3367] *SYSTEM org.eclipse.jetty.server.HttpChannel - null
java.lang.NullPointerException: null
at org.sonatype.nexus.bootstrap.jetty.DockerSubdomainRequestCustomizer.customize(DockerSubdomainRequestCustomizer.java:44)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:483)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at java.lang.Thread.run(Thread.java:750)```
I couldn't not find any duplicate errors online. Any ideas?
## post by mpiggott on Apr 26, 2024
The code suggests somehow the URI for the request is `null`. If you’ve made alterations to Jetty’s configuration perhaps these are incorrect, or perhaps you have some software on your network making bogus requests?
## post by onurridvanoglu on Apr 29, 2024
Hey there Matthew,
Thank you for the reply. I actually changed the jetty-https.xml config location in order to implement the SSL using my own certificate. I’ll explain the steps and configs below.
I’m running the Nexus Repository as a container using docker. Here is my _docker-compose.yaml_ file:
```yaml
version: '3'
services:
nexus:
image: sonatype/nexus3:3.64.0
container_name: nexus3.6
ports:
- "8081:8081"
- "8443:8443"
volumes:
- /data:/nexus-data
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
```
While doing the SSL configurations I noticed that the _/nexus-data_ doesn’t include the _etc/jetty_ directory inside it so here is the _nexus.repository_ file below:
```ini
# Jetty section
application-port=8081
application-port-ssl=8443
# application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,/opt/sonatype/sonatype-work/nexus3/etc/jetty/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml
# As can be seen from above, I've given direct location as /opt/sonatype...
#nexus-context-path=/${NEXUS_CONTEXT}
# Nexus section
# nexus-edition=nexus-pro-edition
# nexus-features=\
# nexus-pro-feature
# nexus.hazelcast.discovery.isEnabled=true
```
And finally here is the _jetty-https.xml_ file where I’ve defined the keystore location and it’s password:
```auto
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<!--
==== HTTPS ====
Set the following inside nexus.properties:
application-port-ssl: the port to listen for https connections
-->
<Ref refid="httpConfig">
<Set name="secureScheme">https</Set>
<Set name="securePort"><Property name="application-port-ssl" /></Set>
</Ref>
<New id="httpsConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Arg><Ref refid="httpConfig"/></Arg>
<Call name="addCustomizer">
<Arg>
<New id="secureRequestCustomizer" class="org.eclipse.jetty.server.SecureRequestCustomizer">
<!-- 7776000 seconds = 90 days -->
<Set name="stsMaxAge"><Property name="jetty.https.stsMaxAge" default="7776000"/></Set>
<Set name="stsIncludeSubDomains"><Property name="jetty.https.stsIncludeSubDomains" default="false"/></Set>
<Set name="sniHostCheck"><Property name="jetty.https.sniHostCheck" default="false"/></Set>
</New>
</Arg>
</Call>
</New>
<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">
<Set name="KeyStorePath">/opt/sonatype/sonatype-work/nexus3/etc/ssl/keystore</Set>
<Set name="KeyStorePassword">password</Set>
<Set name="KeyManagerPassword">password</Set>
<Set name="TrustStorePath">/opt/sonatype/sonatype-work/nexus3/etc/ssl/keystore</Set>
<Set name="TrustStorePassword">password</Set>
<Set name="EndpointIdentificationAlgorithm"></Set>
<Set name="NeedClientAuth"><Property name="jetty.ssl.needClientAuth" default="false"/></Set>
<Set name="WantClientAuth"><Property name="jetty.ssl.wantClientAuth" default="false"/></Set>
<Set name="IncludeProtocols">
<Array type="java.lang.String">
<Item>TLSv1.2</Item>
</Array>
</Set>
</New>
<Call name="addConnector">
<Arg>
<New id="httpsConnector" class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="acceptors" type="int"><Property name="jetty.https.acceptors" default="-1"/></Arg>
<Arg name="selectors" type="int"><Property name="jetty.https.selectors" default="-1"/></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.sonatype.nexus.bootstrap.jetty.InstrumentedConnectionFactory">
<Arg>
<New class="org.eclipse.jetty.server.SslConnectionFactory">
<Arg name="next">http/1.1</Arg>
<Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
</New>
</Arg>
</New>
</Item>
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config"><Ref refid="httpsConfig" /></Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="host"><Property name="application-host" /></Set>
<Set name="port"><Property name="application-port-ssl" /></Set>
<Set name="idleTimeout"><Property name="jetty.https.timeout" default="30000"/></Set>
<Set name="acceptorPriorityDelta"><Property name="jetty.https.acceptorPriorityDelta" default="0"/></Set>
<Set name="acceptQueueSize"><Property name="jetty.https.acceptQueueSize" default="0"/></Set>
</New>
</Arg>
</Call>
</Configure
```
I didn’t think that changing the _jetty-https.xml_ location would cause such a thing to be honest.
I hope I explained the situation clearly. Thanks!
## post by engin.mahmut on Jun 1, 2024
Hi Onur,
The error you encountered might indicate that HTTP and HTTPS redirects in the network traffic (such as through a reverse proxy) are not working correctly. I resolved the same issue by configuring a middleware in Traefik reverse proxy and ensuring that requests are redirected to HTTPS.
Best regards.