Puncte:0

Apache Proxypass redirecționează „localhost:port” ca șir URL în loc de serviciul local al portului

drapel cz

Mediu inconjurator

Versiunea serverului: Apache/2.4.6 (CentOS)


Am două servere care sunt aproape duplicate.

aaa.com. și bbb.com.

Au aproape aceleași seturi de reguli Apache.

aaa.com. config

<Location "/serviceEndpoint/">
  ProxyPass http://localhost:8100/serviceEndpoint/
  ProxyPassReverse http://localhost:8100/serviceEndpoint/
</Location>
<Location "/fruit/apple">
  ProxyPass "/fruit/apple" "http://localhost:8100/serviceEndpoint/fruit/apple"
  ProxyPassReverse "/fruit/apple" "http://localhost:8100/serviceEndpoint/fruit/apple"
</Location>

Asa de /serviceEndpoint este un serviciu care folosește portul 8100 și /fructe/măr este un servlet al acestuia.

bbb.com. config

<VirtualHost _default_:80>
  ProxyPass "/serviceEndpoint/" "http://localhost:20100/serviceEndpoint/"
  ProxyPassReverse "/serviceEndpoint/" "http://localhost:20100/serviceEndpoint/"

  ProxyPass "/fruit/apple" "http://localhost:20100/serviceEndpoint/fruit/apple"
  ProxyPassReverse "/fruit/apple" "http://localhost:20100/serviceEndpoint/fruit/apple"
</VirtualHost>

Arată la fel, dar se află în VirtualHost:80, dacă asta face ceva diferit.
(*editez am testat folosind aceeași configurație, dar rezultatul a fost același)

Problemă

Ambii aaa.com/fruit/apple sau bbb.com/fruit/apple lucrează bine.

Dar, atunci când serviciul de utilizare response.sendRedirect()(java) și redirecționează browserul către /fructe/măr,
numai aaa.com. lucrări şi bbb.com. încearcă să conecteze literal http://localhost:20100/fruit/apple din browserul clientului.

aaa.com antetul răspunsului de redirecționare

HTTP/1.1 302
Data: Luni, 09 mai 2022 08:01:29 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Strict-Transport-Securitate: max-age=63072000; include SubDomains
Locație: /fruit/#!/some_controller
Lungimea conținutului: 0
Set-Cookie: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Cale=/serviceEndpoint; Numai Http
Set-Cookie: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Sigur; HttpOnly; SameSite=Strict
X-XSS-Protecție: 1; mod=bloc
Keep-Alive: timeout=15, max=95
Conexiune: Keep-Alive

bbb.com antetul răspunsului de redirecționare

HTTP/1.1 302
Data: Luni, 09 mai 2022 08:01:29 GMT
Server: Apache-Coyote/1.1
X-Frame-Options: SAMEORIGIN
Strict-Transport-Securitate: max-age=63072000; include SubDomains
Locație: http://localhost:20100/fruit/#!/some_controller
Lungimea conținutului: 0
Set-Cookie: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Cale=/serviceEndpoint; Numai Http
Set-Cookie: JSESSIONID=4EA61F0E6031621E540DBDC9F6C54D64; Sigur; HttpOnly; SameSite=Strict
Keep-Alive: timeout=15, max=95
Conexiune: Keep-Alive

Întrebare

Din setările Apache, ce poate cauza acest comportament și cum ar trebui să remediez acest lucru?

drapel in
Redirecționarea nu vine de la Apache. Configurați serviciul dvs. de backend cu adresa URL adecvată către care să vă redirecționați.
Lunartist avatar
drapel cz
@GeraldSchneider Calea de redirecționare este `/fruit/apple` și serviciul funcționează bine cu `aaa.com`. Ce ar putea cauza această discrepanță?
Lunartist avatar
drapel cz
@GeraldSchneider `aaa.com` operează pe Tomcat 8.5, iar `bbb.com` operează pe Tomcat 8.0. Ar afecta modul în care se comportă `response.sendRedirect()`?
Puncte:0
drapel cz

A fost diferența Tomcat. Tomcat 8.0 redirecționează către localhost, în timp ce 8.5 redirecționează în mod normal.

Puncte:0
drapel us
Rob

Acea Directiva ProxyPassReverse definește domeniul de aplicare al căilor URL pentru care Apache le corectează cel mai mult în răspunsurile back-end, pentru a se asigura că vizitatorii site-ului sunt prezentate cu o adresă URL corectă care se potrivește cu solicitările lor cu Apache

ProxyPassReverse „/fruit/apple” „http://localhost:20100/serviceEndpoint/fruit/apple”

The bbb.example.com răspunsul redirecționează către

 Locație: http://localhost:20100/fruit/#!/some_controller
                                       \
                                        `- lipsește „mărul”. 

si de aceea Locație antetul nu este corectat de directiva ProxyPassReverse.

Se pare că fie aplicația back-end nu creează URL-uri autoreferențiale corecte și trebuie să rezolvați asta în aplicația back-end, fie ați făcut o presupunere incorectă și configurația dvs. apache ar trebui să fie:

ProxyPass "/fruit/" "http://localhost:20100/serviceEndpoint/fruit/"
ProxyPassReverse "/fruit/" "http://localhost:20100/serviceEndpoint/fruit/"
Lunartist avatar
drapel cz
`aaa.com.` redirecționează în mod normal către `https://aaa.com/apple/#!/some_controller`. Ce ar putea face această diferență?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.