Nginx+tomcat实现负载均衡

Nginx 反向代理初印象

Nginx (“engine x”) 是一个高性能的HTTP和反向代理 服务器,也是一个IMAP/POP3/SMTP服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:京东、新浪、网易、腾讯、淘宝等。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

Nginx+tomcat实现负载均衡_第1张图片

为什么要用Nginx

1、热部署

我个人觉得这个很不错。在master管理进程与worker工作进程的分离设计,使的Nginx具有热部署的功能,那么在7×24小时不间断服务的前提下,升级Nginx的可执行文件。也可以在不停止服务的情况下修改配置文件,更换日志文件等功能。

2、可以高并发连接

这是一个很重要的一个特性!在这一个 互联网 快速发展, 互联网 用户数量不断增加,一些大公司、网站都需要面对高并发请求,如果有一个能够在峰值顶住10万以上并发请求的Server,肯定会得到大家的青睐。理论上,Nginx支持的并发连接上限取决于你的内存,10万远未封顶。

3、低的内存消耗

在一般的情况下,10000个非活跃的HTTP Keep-Alive 连接在Nginx中仅消耗2.5M的内存,这也是Nginx支持高并发连接的基础。

4、处理响应请求很快

在正常的情况下,单次请求会得到更快的响应。在高峰期,Nginx可以比其他的Web服务器更快的响应请求。

5、具有很高的可靠性

Nginx是一个高可靠性的Web服务器,这也是我们为什么选择Nginx的基本条件,现在很多的网站都在使用Nginx,足以说明Nginx的可靠性。高可靠性来自其核心框架代码的优秀设计、模块设计的简单性;并且这些模块都非常的稳定。

代理和反向代理到底有什么区别

代理服务器通常分为两类,即转发代理(forward proxy)服务器和反向代理(reverse proxy)服务器。转发代理服务器又通常简称为代理服务器,我们常提到的代理服务器就指的是转发代理服务器。

转发代理服务器

普通的转发代理服务器是客户端与原始服务器之间的一个中间服务器。为了从原始服务器获取内容,客户端发送请求到代理服务器,然后代理服务器从原始服务器中获取内容再返回给客户端。客户端必须专门地配置转发代理来访问其他站点,如在浏览器中配置代理服务器地址及端口号等。

转发代理服务器的一个典型应用就是为处于防火墙后的内部客户端提供访问外部Internet网,比如校园网用户通过代理访问国外网站,公司内网用户通过公司的统一代理访问外部Internet网站等。转发代理服务器也能够使用缓存来缓解原始服务器负载,提供响应速度。

反向代理服务器

而反向代理服务器则相反,在客户端来看它就像一个普通的Web服务器。客户端不要做任何特殊的配置。客户端发送普通的请求来获取反向代理所属空间的内容。反向代理决定将这些请求发往何处,然后就好像它本身就是原始服务器一样将请求内容返回。

反向代理服务器的一个典型应用就是为处于防火墙后的服务器提供外部Internet用户的访问。反向代理能够用于在多个后端服务器提供负载均衡,或者为较慢的后端服务器提供缓存。此外,反向代理还能够简单地将多个服务器映射到同一个URL空间。

两者区别

两者的相同点在于都是用户和服务器之间的中介,完成用户请求和结果的转发。主要的不同在于:

1.转发代理的内部是客户端,而反向代理的内部是服务器。即内网的客户端通过转发代理服务器访问外部网络,而外部的用户通过反向代理访问内部的服务器。

2.转发代理通常接受客户端发送的任何请求,而反向代理通常只接受到指定服务器的请求。如校园网内部用户可以通过转发代理访问国外的任何站点(如果不加限制的话),而只有特定的请求才发往反向代理,然后又反向代理发往内部服务器。

Nginx安装与配置

1.首先访问Nginx官网 https://nginx.org/ 下载安装包:

Nginx+tomcat实现负载均衡_第2张图片

2.解压到相应的目录,比如我是d盘 然后修改目录名字为nginx,进入nginx目录 双击nginx.exe 来启动nginx

Nginx+tomcat实现负载均衡_第3张图片
通过查看进程来查看Nginx是否启动成功,可以看到Nginx已经启动(为什么有几个,我也不清楚~_~)

Nginx+tomcat实现负载均衡_第4张图片

3.此时 直接在浏览器地址栏输入:localhost 便能看到 欢迎页面,说明你虚拟主机已经搭建好了
Nginx+tomcat实现负载均衡_第5张图片

Nginx+Tomcat 负载均衡

通过上面的安装与配置,Nginx就算是可以运行了,但是如何与Tomcat结合,实现负载均衡呢?既然要实现负载均衡,那肯定不是一个服务器,这里说说的服务器是我们自己配置的Tomcat服务器。如何在同一台电脑上配置多个服务器,在我的另外一篇博客中有说明,不清楚的可以转到这里查看[ 一台机器上同时开启多个Tomcat服务器] (http://blog.csdn.net/dylanzr/article/details/52101782)

1.配置好Tomcat服务器之后,要实现通过Nginx来反向代理,那么此时就需要修改Nginx的配置文件,进去到Nginx目录,找到conf下的nginx.conf文件,用记事本打开。

#Nginx所用用户和组,window下不指定  
#user  niumd niumd;  

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

#错误日志存放路径  
#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;  

    #允许最大连接数  
    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  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{  
    #Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配
    #1、轮询(默认)
    #每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    #2、weight
    #指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    #2、ip_hash
    #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    #3、fair(第三方)
    #按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    #4、url_hash(第三方)
    #按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。  
      #ip_hash; 

      server localhost:8080;  
      server localhost:8088;
     }  

    server {  
            listen       80;  
            server_name  localhost;     

            location / {  
                   proxy_connect_timeout 3; #nginx跟后端服务器连接超时时间(代理连接超时) 
                   proxy_send_timeout 30; #后端服务器数据回传时间(代理发送超时) 
                   proxy_read_timeout 30; #连接成功后,后端服务器响应时间(代理接收超时) 
                   proxy_pass http://localhost;

   }  
}  
}

需要设置的地方有:
tomcat服务器端口号server localhost:8080; server localhost:8088;这两个端口号在 一台机器上同时开启多个Tomcat服务器有讲到。

修改完配置文件后需要通过重新加载配置问来来使其生效:
Nginx+tomcat实现负载均衡_第6张图片

nginx -s reload 是直接加载nginx.conf文件,并不检测nginx.conf文件是否有错误。
nginx -t 则会检查nginx.conf文件是否有错,并会现实相关错误信息,所以建议用此命令。

最终实现结果
在浏览器中输入localhost,结果为:
Nginx+tomcat实现负载均衡_第7张图片

刷新几次后,可能会切换到令一个服务器,这样就实现了负载均衡。
Nginx+tomcat实现负载均衡_第8张图片

可能遇到的问题:

由于端口冲突,当我们在Nginx配置文件中默认设置listen 80端口时,可能无法实现反向代理的功能,也就是我们在浏览器中输入localhost的时候无法跳转到Tomcat的主页,解决方法有两个:

1.修改Nginx配置文件中listen的端口号,设置为其他端口,比如说9090,这时在浏览器中输入localhost:9090就可以实现跳转。

2.既然80端口被占用了,那我们只需要释放这个端口就好了,cmd->netstat -ano 80 查看80端口被占用的情况:
Nginx+tomcat实现负载均衡_第9张图片

再通过PID号来查看到底是哪个进程或者程序占用了80端口:
Nginx+tomcat实现负载均衡_第10张图片
结果发现都是nginx.exe 本身,那就不能通过kill pid是释放这个端口啦。

后来百度发现原来这个端口还被system占用,解决的办法:进入注册表中
找到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTP下的Start修改其值为0,然后重启电脑,重启电脑,重启电脑,重要的事情说三遍!!

http://www.tuicool.com/articles/VV7nim6
http://www.tuicool.com/articles/eiYRbu

你可能感兴趣的:(java)