我有以下配置的Nginx代理:
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;
}
}
gateway-server 指向我的zuul代理,这是一个使用 @EnableZuulProxy 注释的简单SpringBoot应用程序。路由配置如下:
# Zuul configuration
zuul:
host:
socket-timeout-millis: 300000 # 5 minutes
sensitiveHeaders:
routes:
my-application:
path: /my-application/**
serviceId: my-application
stripPrefix: false
my-application 是一个结合角度前端的Spring Boot应用程序。除路由外, gateway-server 还负责身份验证 - 它与OAuth2多提供程序进行通信。当用户未经过身份验证,并尝试调用 my.domain.net 时,Nginx代理调用zuul( app.server:8080 / my-application / ) gateway-server 启动Oauth2协议,并将用户转发到登录页面,在那里可以选择他/她的提供商(facebook,google,internal)。整个身份验证由spring管理 - 我不做任何自定义事情。成功登录后,用户将被重定向到 my.domain.net/my-application ,而不是 my.domain.net 。 您是否知道我的基础架构中的哪个元素添加了此上下文路径?你知道我怎么能把它删除?
答案 0 :(得分:0)
你只需要使用stripPrefix:true,因为你的配置:
path: /my-application/**
serviceId: my-application
stripPrefix: false
告诉spring在重定向后保留/my-application/
(zuul理解中的'前缀')。