• Windows下使用Nginx+tomcat配置负载均衡


          Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强。

          对于反向代理,百度百科上有一段描述:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

          这里讲得很直白。反向代理方式实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。这样说,其实nginx完成的就是这样的工作。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处理的是tomcat。

         说到上面的方式,也许很多人又会想起来,这样可以把静态文件交由nginx来进行处理。对,很多用到nginx的地方都是作为静态服务器,这样可以方便缓存那些静态文件,比如CSS,JS,html,htm等文件。

    下面展示Nginx的基本配置:

    (1) Nginx下载安装

      从Nginx官网下载页面(http://nginx.org/en/download.html)下载稳定版本(Stable version)的Windows版本


      解压到D盘,将文件夹名改为nginx(为了方便,不是必要)

    (2)Nginx配置文件

      Nginx配置文件默认在conf目录,主要配置文件为nginx.conf,下面是nginx作为前端反向代理服务器的配置。

      nginx.conf文件代码如下:

    #user  nobody;
    #工作进程数:这个数值要根据服务器CPU核心数来配置,如6核12线程的cpu可以配置为6或12
    #当启动nginx后我们打开任务管理器,可以看到nginx.exe在进程中有两个
    #nginx是多进程的,任务管理器中nginx中的数目对应的是主线程 + work的数目(worker_processes配置)
    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,window下不指定。  
        #use epoll;  
        
        #设置单个进程同时打开的最大连接数,这个值设置大些能接受较多的连接,当然这需要cpu和内存支持哦
        worker_connections  2048;   
    }
    
    
    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  logs/access.log  main;
    
        #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  0;
        keepalive_timeout  65;
    
        #gzip  on;
        
        upstream localhost {
          #在此处设置tomcat服务器信息,同样tomcat也可以不在同一主机中。这里设置了两个tomcat服务,比重是1:1了。 localhost更换为服务器的IP
          #根据ip计算将请求分配各个后端tomcat,许多人误认为可以解决session问题,其实并不能。
          #同一机器在多网情况下,路由切换,ip可能不同
          #开启ip_hash,同一个ip地址请求时只能进入一个服务器,可以间接解决session不能共享问题
          ip_hash;
          server  localhost:8080 weight=1;
          server  10.8.6.23:8080 weight=1;
         }
         
        server {
            #这个很关键,它是nginx监听的端口,80端口在浏览器url中可以不写
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
           #access_log  logs/host.access.log  main;
    
            location / {
                proxy_pass http://localhost;
                root   html;
                index  index.html index.htm;
                proxy_connect_timeout   3;
                proxy_send_timeout      30;
                proxy_read_timeout      30;
            }
            
            #jsp直接请求tomcat,我们先要去掉之前配的location /,避免全部请求被拦截了。
                #location ~ .jsp$ {  
                #        proxy_pass http://localhost;  
                #}  
                
                #nginx把静态文件缓存到文件夹里,我们先要去掉之前配的location /,避免全部请求被拦截了。
                #location ~ .(html|js|css|png|gif)$ {  
                #    root D:apache-tomcat-7.0.57webappsROOT;  
                #}  
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ .php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #location ~ .php$ {
            #    root           html;
            #    fastcgi_pass   127.0.0.1:9000;
            #    fastcgi_index  index.php;
            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            #    include        fastcgi_params;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    }

    本人测试的是在2台机器上不同的tomcat,如果想在一台机器上配置2个tomcat,首先要保证2个tomcat能同时启动起来,那么就需要设置tomcat的端口号不同了,复制一份tomcat文件,在tomcat目录下的server.xml文件里修改3处端口号(port):

    <Server port="8005" shutdown="SHUTDOWN">
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

    当2个tomcat确定能同时启动了,只需修改下面配置内容中的server的IP和端口号即可:

    upstream localhost {
          #在此处设置tomcat服务器信息,同样tomcat也可以不在同一主机中。这里设置了两个tomcat服务,比重是1:1了。 localhost更换为服务器的IP
          #根据ip计算将请求分配各个后端tomcat,许多人误认为可以解决session问题,其实并不能。
          #同一机器在多网情况下,路由切换,ip可能不同
          #开启ip_hash,同一个ip地址请求时只能进入一个服务器,可以间接解决session不能共享问题
          ip_hash;
          server  localhost:8080 weight=1;
          server  10.8.6.23:8080 weight=1;

    (3) Nginx启动和停止命令

      Nginx目前只支持命令行操作,操作前先进入Dos命令环境,并进入Nginx部署目录。

        1)   start nginx: 启动Nginx,这里也许你会看到一个窗口一闪而过,实际上已经启动成功了,这时我们可以去任务管理器看一下进程,可以看到有两个nginx.exe,这是因为nginx是多进程的,任务管理器中nginx中的数目对应的是主线程 + work的数目(worker_processes配置)。

        2)   nginx -t:检查配置文件中是否有错,当我们修改了Nginx的配置文件里可以用此命令检查一下。

        3)   nginx -s reload:我们修改了文件,是不是就意思着必须先关了nginx再重新启动了,其实不必,Nginx可以用此命令重新加载文件的。

        4)   nginx -s stop:停止Nginx


    至此Windows下Nginx+tomcat负载均衡配置结束。

  • 相关阅读:
    学习Python第五天
    学习Python第三天
    Mongodb
    JMS links
    笔记整理
    a* products
    String
    business knowledge
    [Java coding] leetcode notes
    [Java Basics3] XML, Unit testing
  • 原文地址:https://www.cnblogs.com/aqsunkai/p/6690615.html
Copyright © 2020-2023  润新知