nginx作为负载均衡根据定义将不同的用户请求分发到不同的服务器,同时也解决了因单点部署服务器故障导致的整个应用不能访问的问题

在加入nginx之后,如果多个服务器中的一个或多个(不是全部)发生故障,均不影响用户的正常使用,会将用户请求分发到可以提供服务的服务器上

 

本节实例仅实现 一个nginx + 2个tomcat + redis实现java web应用的自由切换,并保持用户会话信息,对前端用户完全不可见。

会话的共享是为了保证用户在首次登录系统后已经后续的会话不会因为nginx重新分发到其他服务器而再次登录,达到会话信息共享

 

本例在windows下采用的是

nginx 1.9.13  

tomcat 7.0.64

redis 2.8

 

操作步骤:

① 准备两个tomcat,并修改端口,修改tomcat/webapps/ROOT中index.jsp内容为:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String username = request.getParameter("username");
    System.out.println("username:"+username);
    
    if(username!=null){
        session.setAttribute("userSession", username);
        System.out.println("value in session is :" + session.getAttribute("userSession"));
    }
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ngix+tomcat+redis session共享验证</title>
</head>
<body>


<form action="index.jsp">
     <input type="text" name="username" value=""/>
     <br/>
     <input type="submit" value="保存信息到session"/>
</form>

<hr/>

<!-- 不同tomcat请使用不同mark 以便识别  -->
你访问的tomcat 端口为:8898   tomcat001
<br/>
session值为: <%=session.getAttribute("userSession") %>
</body>
</html>

并保证两个tomcat都能正常启动,并能正常访问

 

② 下载ngix并修改conf文件如下

#Nginx所用用户和组
#user  niumd niumd;

#工作的子进程数量(通常等于CPU数量或者2倍于CPU)
worker_processes  1;

#错误日志存放路径
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#指定pid存放文件
pid        logs/nginx.pid;

events {
        #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue
    #use epoll;
    
    #允许最大连接数
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

        #定义日志格式
    #log_format  main  '$remote_addr - $remote_user [$time_local] $request '
    #                  '"$status" $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  off;
    access_log  logs/access.log;

    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
 
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    #keepalive_timeout  75 20;

    include    gzip.conf;
       upstream localhost {
         #ip_hash
      #ip_hash; #测试时请不要打开ip_hash 否则不会在不同server间跳转,第一次访问的哪一个就会一直访问哪一个server
      
      #下面为配置的server列表,weight表示权重,值越大分配到的请求就越多,默认为1.
      server localhost:8898 weight=1;
      server localhost:8899 weight=1;
     }

    server {
            listen       8888; #8888为监听的端口,所以访问时就要通过 ip:8888来访问
            server_name  localhost;   

            location / {
                    proxy_connect_timeout   3;
                    proxy_send_timeout      30;
                    proxy_read_timeout      30;
                    proxy_pass http://localhost; #这里的名字要和上面upstream后面跟的名字一致
            }
            
   }
}
View Code

相关文章:

  • 2021-07-18
  • 2021-12-10
  • 2021-07-03
  • 2022-12-23
  • 2021-12-02
  • 2022-12-23
  • 2021-12-14
猜你喜欢
  • 2017-11-27
  • 2021-08-16
  • 2021-07-04
  • 2022-01-03
相关资源
相似解决方案