2014-12-07 46 views
1

这个问题可能会被询问很多次,我一直在阅读,但仍然无法得到我想要的。nginx重写来隐藏应用程序名称

我有一个应用程序运行在172.17.1.10:8080/myapp我想设置nginx反向代理访问应用程序只使用sub.domain.com,隐藏“myapp”在地址栏中。

我目前的设置是:

server{ 
     listen 80; 
     server_name sub.domain.com; 
     location /myapp { 
       rewrite ^/myapp(.*) /$1 break; 
       proxy_pass http://172.17.1.10:8080; 
       proxy_redirect off; 
       proxy_set_header Host $host; 
       proxy_set_header X-Real-IP  $remote_addr; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       include /etc/nginx/proxy_params; 
     } 

} 

,但我跟上sub.domain.com观看Nginx的索引页,并sub.domain.com/myapp tomcat的索引页...我缺少什么?

回答

0

看起来你甚至不需要在这种情况下,重写,这已经足够了:

更新位置:

server{ 
    listen 80; 
    server_name sub.domain.com; 
    location/{ 
      proxy_pass http://172.17.1.10:8080/myapp/; 
      proxy_redirect off; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP  $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      include /etc/nginx/proxy_params; 
    } 

这里是服务器模拟后端的一个例子,

你172.17.1.10:8080将我的本地主机:8088:

server { 
    listen  8088; 

    location /myapp {  
     # if the "login" request param = true, will simulate a redirect to a login page to proxy; 
     if ($arg_login = "true"){ 
      return 301 http://sub.domain.com/login;    
     } 

     #otherwise return normal content 
     return 200 "$request_uri OK";   
    } 

    #Simulated login page 
    location /myapp/login {   
     echo "Login page: Provide credentials!";   
    } 

}

所以,(使用浏览器),如果我要求这一点:http://sub.domain.com/api/test

我会得到:

/MYAPP/API /测试OK

而如果我要求:http://sub.domain.com/api/test?login=true 我会得到:

登录页面:提供凭据!

+0

我这样做,我得到了无限的重定向,我使用Spring Security,它在默认情况下重定向到/ home或/登录depdends如果你有授权或不 – Kossel 2014-12-10 21:37:33

+0

好吧,我已经更新了我的答案,并提供了一个测试例。 – danielgpm 2014-12-14 17:05:23