2014-12-07 47 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