Nginx 怎么能指定到Tomcat下的一个web应用(目前server配置是127.0.0.3:8081,能否是127.0.0.3:8081/a ?)

松松的 发布于 2015/03/06 10:55
阅读 683
收藏 0

问题情况:Nginx的后端有两个机器节点(假设IP分别是127.0.0.3和127.0.0.4),它们上面分别安装tomcat(都装有两个应用a.war和b.war),统一对外访问的浮动IP是127.0.0.2,现在后端127.0.0.3上的a.war包异常以后,页面在访问http://127.0.0.2/a时候还是会访问到127.0.0.3上面,导致出现404错误,我们想让nginx发现127.0.0.3上的a服务有异常后,不再访问它,而去访问127.0.0.4上的a服务,nginx.conf应该怎么配置;

以下是我们工程中nginx.conf的配置,现在请求大神们指点,怎么配置才能符合我上面提的要求?

   upstream backend
    {
        server    127.0.0.3:8081 srun_id=90fa435c79a94ab5aaef3e6466ea19b0;
        server    127.0.0.4:8081 srun_id=2842466ed7f741dd8f68e335043ed091;
        jvm_route $cookie_JSESSIONID reverse;
    }

    server {
        listen       80;
        server_name  localhost;

        access_log  off;

        location / {

            proxy_set_header  Host $host;
            proxy_set_header  x-forwarded-for  $remote_addr;

            proxy_pass  http://backend;
            proxy_connect_timeout 900;
            proxy_read_timeout 900;
            proxy_send_timeout 900;
        }
        location = /server.crt {
            root   conf;
        }
    location @test {
        proxy_pass http://backend;
    }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

加载中
0
松松的

没有人知道这个情况吗?是不是不能这么配置,给个肯定的答复也行啊。

0
skyim
skyim
@松松的 服务器关闭,肯定不能访问,你这个只是报错而已,nginx只是做反向代理而已,不包括帮你解决服务器错误
0
松松的

引用来自“skyim”的评论

@松松的 服务器关闭,肯定不能访问,你这个只是报错而已,nginx只是做反向代理而已,不包括帮你解决服务器错误

是的!如果把127.0.0.3这个TOMCAT直接停止服务了,Nginx就不会再访问了;那我们现在这样的需求有没有什么好的办法解决吗?因为tomcat中还包括b.war这个服务,不能停止它,我们就想实现一旦127.0.0.3上的a.war服务出现异常了,就让nginx访问127.0.0.4上的a服务

0
松松的

引用来自“skyim”的评论

@松松的 服务器关闭,肯定不能访问,你这个只是报错而已,nginx只是做反向代理而已,不包括帮你解决服务器错误

是的!如果把127.0.0.3这个TOMCAT直接停止服务了,Nginx就不会再访问了;那我们现在这样的需求有没有什么好的办法解决吗?因为tomcat中还包括b.war这个服务,不能停止它,我们就想实现一旦127.0.0.3上的a.war服务出现异常了,就让nginx访问127.0.0.4上的a服务

松松的
两台服务器上的a.war一摸一样,在实际运行过程中可能出现127.0.0.3上的a服务异常了,而127.0.0.4上的a服务正常运行,这很有可能的.
skyim
skyim
@松松的 我有个疑问,两台服务器的a.war代码不一样吗?为啥一台出现问题,还能够访问另外一台
0
Qsion
Qsion

如果是127.0.0.3主动返回的异常,nginx是不会处理的.如果是无法链接后端tomcat服务器导致的异常,你可以upstream里配置两台后端tomcat负载均衡,一台无法访问会自动切换另一台

0
松松的

引用来自“skyim”的评论

@松松的 服务器关闭,肯定不能访问,你这个只是报错而已,nginx只是做反向代理而已,不包括帮你解决服务器错误

引用来自“松松的”的评论

是的!如果把127.0.0.3这个TOMCAT直接停止服务了,Nginx就不会再访问了;那我们现在这样的需求有没有什么好的办法解决吗?因为tomcat中还包括b.war这个服务,不能停止它,我们就想实现一旦127.0.0.3上的a.war服务出现异常了,就让nginx访问127.0.0.4上的a服务

两台服务器上的a.war一摸一样,在实际运行过程中可能出现127.0.0.3上的a服务异常了,而127.0.0.4上的a服务正常运行,这很有可能的.

0
松松的

引用来自“Qsion”的评论

如果是127.0.0.3主动返回的异常,nginx是不会处理的.如果是无法链接后端tomcat服务器导致的异常,你可以upstream里配置两台后端tomcat负载均衡,一台无法访问会自动切换另一台

我们现在就是这么配置的,现在的情况不是连接不上tomcat,确实是127.0.0.3上的a服务异常了,我试过如果直接关闭127.0.0.3上的tomcat的话,nginx确实会直接访问127.0.0.4上的a服务

   upstream backend
    {
        server    127.0.0.3:8081 srun_id=90fa435c79a94ab5aaef3e6466ea19b0;
        server    127.0.0.4:8081 srun_id=2842466ed7f741dd8f68e335043ed091;
        jvm_route $cookie_JSESSIONID reverse;
    }

符合你后半句的情况

skyim
skyim
@松松的 两台服务器上的a.war一摸一样,在实际运行过程中可能出现127.0.0.3上的a服务异常了,而127.0.0.4上的a服务正常运行,这很有可能的.
0
hejindan88V
hejindan88V

这个很简单啊,nginx 配合下就可以了

check interval

c

松松的
兄弟,怎么配合使用,能否给个简单的配置样例?
0
hejindan88V
hejindan88V
upstream api_java {

        server 192.168.1.55:8087;

server 192.168.1.56:8087;

        check interval=1500 rise=2 fall=2 timeout=1000 type=http;
        check_http_send "GET /check/status HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx;
}


server {
        listen     80;
        charset utf-8;
        server_name www.baidu.com;
        index index.html index.htm index.php;


        location  / {
                proxy_pass http://api_java;
                include proxy.conf;
        }

     

        access_log   /var/log/nginx/${host}_${hostname}.log main;

}


GET /check/status 这个要自己实现给nginx 一个检测后端状态的 机制

松松的
要支持这种检测好像需要nginx_upstream_check_module支持嘛?
返回顶部
顶部