Am o instanță ERDDAP care rulează pe un server Tomcat în spatele unui proxy invers NGINX.
Mediul este complet pe Kubernetes, RP este un controler de intrare NGINX care transmite cererea pe portul 443 către instanța de serviciu de pe portul 8080 asociată containerului în care rulează Tomcat (și instanța ERDDAP).
Am gasit acest tutorial (https://www.n0r1sk.com/post/nginx-reverse-proxy-with-ssl-offloading-and-apache-tomcat-backends/) care arată cum se configurează server.xml pentru un Tomcat în spatele unui proxy invers, astfel încât conectorul HTTP pentru serverul meu Tomcat este:
<Connector server="Apache" secure="true" port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
proxyPort="443"
relaxedPathChars='[]|'
relaxedQueryChars='[]:|{}^\`"<>' />
Cu această configurație, când solicit adresa URL https://erddap.ve.ismar.cnr.it/erddap:
GET /erddap/HTTP/1.1
Gazdă: erddap.ve.ismar.cnr.it
ID-cerere X: 484e514b4038614090bf34061e9287f3
X-Real-IP: 10.104.235.192
X-Redirecționat-Pentru: 10.104.235.192
X-Forwarded-Host: erddap.ve.ismar.cnr.it
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Scheme: https
...
Primesc urmatorul raspuns:
HTTP/1.1 302
Strict-Transport-Security: max-age=0
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protecție: 1; mod=bloc
variază: Origine
Acces-Control-Permite-Acreditări: adevărat
Acces-Control-Expose-Heaters: Acces-Control-Permite-Origine, Acces-Control-Permite-
Acreditări
Locație: https://erddap.ve.ismar.cnr.it/erddap/index.html
Lungimea conținutului: 0
Data: joi, 24 februarie 2022 17:55:41 GMT
Server: Apache
și totul funcționează bine cu redirecționarea proxy și răspunsul backend Tomcat.
Dar dacă adaug în configurația Tomcat Connector schema de parametri="https" așa cum este sugerat în tutorialul menționat mai sus:
<Connector server="Apache" secure="true" port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
proxyPort="443"
scheme="https"
relaxedPathChars='[]|'
relaxedQueryChars='[]:|{}^\`"<>' />
aceeași cerere eșuează și primesc următorul răspuns de la Tomcat:
HTTP/1.1 302
Strict-Transport-Security: max-age=0
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protecție: 1; mod=bloc
variază: Origine
Acces-Control-Permite-Acreditări: adevărat
Acces-Control-Expose-Heaters: Acces-Control-Permite-Origine, Acces-Control-Permite-
Acreditări
Locație: (nespecificat)/erddap/index.html
Lungimea conținutului: 0
Data: joi, 24 februarie 2022 18:02:44 GMT
Server: Apache
Puteți observa că antetul „Locație:” este complet greșit cu prefixul „(nespecificat)” și determină clientul să facă cererea ulterioară pentru adresa URL https://erddap.ve.ismar.cnr.it/erddap/(not%20specified)/erddap/index.html (și bineînțeles că cererea eșuează).
Mă poate ajuta cineva dintre voi să identific unde ar putea fi problema în configurația mea Tomcat?
De ce comportamentul este atât de diferit doar adăugând parametrul scheme="https" în server.xml?
Multe mulțumiri in avans,
Pierpaolo