0

kombiniert habe ich Nginx Proxy mit folgender Konfiguration:Wie Kontextpfad in nginx abzustreifen, zuul und oauth

upstream gateway_server { 
    ip_hash; # sticky session on as there will be more than one destination 
    server app.server:8080; 
} 

server { 

    listen     0.0.0.0:80; 
    server_name    my.domain.net; 
    root     /var/www/gateway; 

    proxy_redirect   off; 
    proxy_buffering   off; 
    proxy_connect_timeout 5s; 
    proxy_read_timeout  120s; 
    proxy_next_upstream  error timeout http_502 http_503 http_504; 
    proxy_set_header  X-Real-IP $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header  X-Forwarded-Host $host; 
    proxy_set_header  X-Forwarded-Proto $http_x_forwarded_proto; 
    proxy_set_header  Host $host; 
    proxy_intercept_errors on; 

location/{ 
    proxy_pass    http://gateway_server/my-application/; 
} 

location /loginPage { 
    proxy_pass    http://gateway_server/loginPage; 
} 

location ^~ /login { 
    proxy_pass    http://gateway_server/login; 
} 

location /logout { 
    proxy_pass    http://gateway_server/logout; 
} 

location /css { 
    proxy_pass    http://gateway_server/css; 
} 


error_page 502 503 504 @maintenance; 
location @maintenance { 
    rewrite ^(.*)$   /maintenance.html break; 
} 

error_page 404 /404.html; 
location = /404.html { 
    rewrite ^(.*)$   /404.html break; 
} 

error_page 500 /500.html; 
location = /500.html { 
    rewrite ^(.*)$   /500.html break; 
} 
} 

Der Gateway-Server an meinem zuul Proxy zeigt, die eine einfache SpringBoot Anwendung ist kommentierten mit @EnableZuulProxy. Die Routen werden wie folgt konfiguriert:

# Zuul configuration 
zuul: 
    host: 
    socket-timeout-millis: 300000 # 5 minutes 
    sensitiveHeaders: 
    routes: 
    my-application: 
     path: /my-application/** 
     serviceId: my-application 
     stripPrefix: false 

my-Anwendung ist eine Feder Boot-Anwendung mit Winkel Front-End kombiniert. Neben dem Routing ist Gateway-Server auch verantwortlich für die Authentifizierung - es kommuniziert mit out OAuth2 Multi-Provider. Wenn ein Benutzer nicht authentifiziert ist, und versucht, my.domain.net Nginx Proxies der Aufruf an zuul (app.server: 8080/my-application/) zu nennen Gateway-Server OAuth2 Protokoll startet und leitet Benutzer auf eine Login-Seite, wo man seinen/ihren Provider (facebook, google, intern) auswählen kann. Die gesamte Authentifizierung wird vom Frühling verwaltet - ich mache keine benutzerdefinierten Dinge. Nach erfolgreichem Login wird der Benutzer zu my.domain.net/my-application anstatt zu my.domain.net umgeleitet. Haben Sie eine Idee, welches Element in meiner Infrastruktur diesen Kontextpfad hinzufügt? Hast du eine Idee, wie ich es entfernen könnte?

Antwort

0

Sie brauchen nur stripPrefix zu verwenden: true, weil Ihre config:

path: /my-application/** 
serviceId: my-application 
stripPrefix: false 

Feder /my-application/ zu halten erzählt (die 'Vorsilbe' in zuul Verständnis) nach Redirect.

+0

Ich kann stripPrefix = true hier nicht verwenden, da "/ my-application" der Kontextpfad in diesem Dienst ist (und dies ist wichtig, da die Anwendung Ajax-Aufrufe verwendet, um zahlreiche Ressourcen unter diesem Pfad zu erhalten) –