如何在nginx,zuul和oauth中结合使用上下文路径

时间:2016-07-26 07:30:22

标签: nginx oauth spring-cloud spring-security-oauth2 netflix-zuul

我有以下配置的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 。 您是否知道我的基础架构中的哪个元素添加了此上下文路径?你知道我怎么能把它删除?

1 个答案:

答案 0 :(得分:0)

你只需要使用stripPrefix:true,因为你的配置:

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

告诉spring在重定向后保留/my-application/(zuul理解中的'前缀')。