nginx重写以隐藏应用程序名称

时间:2014-12-07 03:01:43

标签: tomcat 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索引页面...我错过了什么?

1 个答案:

答案 0 :(得分: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 / test OK

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

  

登录页面:提供凭据!