前言

  nginx是一个高性能的HTTP和反向代理的服务器。它有三个最基本的功能,一是当做web服务器、二是作为反向代理服务器、三是提供负载均衡(在反向代理基础上),由于它占有内存小,并发能力强,所以在同类型的服务器中脱颖而出,淘宝,腾讯,百度等国内巨头互联网公司也常用nginx。文将与大家分享一下nginx应用在tomcat上的负载均衡实例。

一、运行环境

  ubuntu服务器一台

  nginx-1.9.15

  apache-tomcat-9.0.0(两个,由于只创建了一个ubuntu服务器,所以通过更改端口来模拟负载均衡场景)

二、ubuntu下安装nginx

1、安装openssl

  openssl是一个强大的套接字层密码库,常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序测试或其他目的使用

  nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库

命令:sudo apt-get install openssl

2、安装PCRE

  PCRE是一个perl库,包括perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库

命令:sudo apt-get install libcre3 libpcre3-dev

3、安装zlib

  zlib库提供了很多压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库

4、下载nginx-1.9.15.tar.gz

  我的百度云连接

  https://pan.baidu.com/s/1GeQSIF1QL5UiZt_kyCikPw

  之后用XFftp工具将文件上传到ubuntu上

  执行命令

  tar -zxvf nginx-1.9.15.tar.gz

5、进行configure

  cd到nginx的根目录执行

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

6、make编译

  命令:make

7、make install安装

  命令:make install

三、nginx的启动与关闭

  启动:进入nginx的sbin目录,执行./nginx

  关闭:./nginx -s stop

  刷新配置:./nginx -s reload

  启动成功之后,浏览器输入localhost出现

  

四、配置Tomcat的server.xml(修改端口)

  Tomcat91修改端口为8081

    <Server port="" shutdown="SHUTDOWN">
<Connector port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort="" />
<Connector port="" protocol="AJP/1.3" redirectPort="" />

  Tomcat92修改端口为8082

    <Server port="" shutdown="SHUTDOWN">
<Connector port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort="" />
<Connector port="" protocol="AJP/1.3" redirectPort="" />

  继续修改一下tomcat/webapps/ROOT的index.jsp,目的是为了区别两个tomcat的启动首页

五、配置nginx的nginx

upstream stonegeek.com{ #服务器集群名字
server 127.0.0.1: weight=; #集群的服务器列表,最终请求都会转发到这里执行
server 127.0.0.1: weight=; #weight是权重的意思,权重越大,分配的概率越大
}
server {
listen ; #默认监听80端口,可以改成其他端口
server_name localhost; #当前服务器的域名 #charset koi8-r; #access_log logs/host.access.log main; location / {
#root html;
#index index.html index.htm;
proxy_pass http://stonegeek.com; #要与服务器集群名字相同,如果请求为localhost:80,则交给名称为stonegeek.com的nginx集群来处理
 proxy_redirect default; }

  至此,nginx的负载均衡配置完毕

六、演示负载均衡

  刷新nginx配置:进入nginx的sbin目录 执行./nginx -s reload

  启动两个tomcat:分别进入tomcat的bin目录 执行./startup.sh

  浏览器输入http://192.168.43.230/index.jsp(192.168.43.230是我安装的ubuntu虚拟机的IP地址)

  结果展示

  

  刷新一次

  

  

七、nginx的五种负载均衡算法

 1、轮询(默认)

  每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统, 使用户访问不受影响。

 2、 weight

  weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效地利用主机资源。

upstream bakend {
server 192.168.0.14 weight=;
server 192.168.0.15 weight=;
}

 3、ip_hash

  每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题

upstream bakend {
ip_hash;
server 192.168.0.14:;
server 192.168.0.15:;
}

 4、url_hash(第三方)

  按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash。如果需要这种调度算法,则需要安装Nginx的hash软件包

upstream backend {
server squid1:;
server squid2:;
hash $request_uri;
hash_method crc32;
}

 5、fair

  比weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream-fair模块

upstream backend {
server server1;
server server2;
fair;
}

八、总结

  至此,利用nginx的反向代理来实现负载均衡的实现就已经完成了,这是基于tomcat服务器的负载均衡,因为仅仅创建了一台服务器所以通过修改端口来模拟两台服务器的效果,还可以配置其他的,比如说apache web服务器。所以nginx作为一款自由的、开源的、高性能的HTTP服务器和反向代理服务器是非常受广大开发人员青睐的,简单、高效!

  此篇文章只是介绍nginx利用反向代理实现负载均衡的简单例子,后续文章我会继续更新更多关于nginx的配置介绍,敬请期待!

nginx的负载均衡实战的更多相关文章

  1. nginx:负载均衡实战(二) keepalived入门

    1.keepalived介绍 顾名思义,keepalived就是保持网络在线的,用来保证集群高可用HA的服务软件.主要防止出现单点故障(坏了一个点导致整个系统架构不可用) 2.详解keepalived ...

  2. nginx:负载均衡实战(四)nginx+keepalived配置双机热备

    1.下载安装 下载keepalived地址:http://www.keepalived.org/download.html 解压安装: tar -zxvf keepalived-.tar.gz 安装o ...

  3. 14、Nginx四层负载均衡

    1.Nginx四层负载均衡基本概述 1.1.什么是四层负载均衡 四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,它的组装在四层基础之上,无论四层还是七层都 ...

  4. nginx实现负载均衡、缓存功能实战

    nginx实现负载均衡.缓存功能实战 什么是正向代理?应用场景:翻墙 什么是反向代理?例如:haproxy和nginx   Nginx实现反向代理 nginx代理基于是ngx_http_proxy_m ...

  5. Nginx网络架构实战学习笔记(三):nginx gzip压缩提升网站速度、expires缓存提升网站负载、反向代理实现nginx+apache动静分离、nginx实现负载均衡

    文章目录 nginx gzip压缩提升网站速度 expires缓存提升网站负载 反向代理实现nginx+apache动静分离 nginx实现负载均衡 nginx gzip压缩提升网站速度 网页内容的压 ...

  6. centos7使用haproxy1.7.5实现反向代理负载均衡实战

    使用haproxy实现反向代理负载均衡实战环境准备:两台虚拟机 # yum install -y gcc glibc gcc-c++ make screen tree lrzsz node1源码编译安 ...

  7. 死磕nginx系列--使用nginx做负载均衡

    使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...

  8. nginx+tomcat负载均衡

    最近练习nginx+tomcat负载均衡.根据一些资料整理了大体思路,最终实现了1个nginx+2个tomcat负载均衡. 安装JDK 1>进入安装目录,给所有用户添加可执行的权限 #chmod ...

  9. 使用Nginx实现负载均衡

    使用Nginx实现负载均衡 一.nginx简介 nginx是一个高性能的HTTP服务器和反向代理服务器.它起初是俄罗斯人Igor Sysoev开发的,至今支撑者俄罗斯的很多大型的网站. 二.nginx ...

随机推荐

  1. Android-打包AAR步骤以及最为关键的注意事项!

    ### 简介 最近因为项目的要求,需要把开发的模块打包成aar,供其他项目调用,在搞了一段时间后,发现这里还是有很多需要注意的地方,所以记录一下,帮助大家不要走弯路. **首先何为aar包?** ![ ...

  2. 005 Python开发环境配置

    目录 一.概述 二.Python语言概述 2.1 Python语言的诞生 2.2 Monty Python组合 三.Python语言系统开发环境配置 四.Python程序编写与运行 4.1 Pytho ...

  3. ReentrantLock——可重入锁的实现原理

    一. 概述 本文首先介绍Lock接口.ReentrantLock的类层次结构以及锁功能模板类AbstractQueuedSynchronizer的简单原理,然后通过分析ReentrantLock的lo ...

  4. fastjson对象,JSON,字符串,map之间的互转

    1.对象与字符串之间的互转 将对象转换成为字符串 String str = JSON.toJSONString(infoDo); 字符串转换成为对象 InfoDo infoDo = JSON.pars ...

  5. TypeScript泛型

    泛型的概念 指不预先确定的数据类型,具体的类型要在使用的时候才能确定.咋一听,是不是觉得JavaScript本身就是这样?这是由于理解有误.前面说“在使用的时候确定”,而非在程序执行的时候确定. 泛型 ...

  6. BZOJ 刷题总结(持续更新)

    本篇博客按照题号排序(带*为推荐题目) 1008 [HNOI2008]越狱 很经典的题了..龟速乘,龟速幂裸题,, 1010 [HNOI2008]玩具装箱toy* 斜率优化 基本算是裸题. 1012 ...

  7. asp.net core IdentityServer4 概述

    概览 现代应用程序看上去大都是这样的: 最常见的交互是: 浏览器与Web应用程序通信 Web应用程序与Web API通信(有时是独立的,有时是代表用户的) 基于浏览器的应用程序与Web API通信 本 ...

  8. 括号匹配(c语言实现)

    ⭐ 我的网站: www.mengyingjie.com ⭐ 1要求 编写程序检查该字符串的括号是否成对出现,而且不能交叉出现. 输入: 一个字符串,里边可能包含"()"." ...

  9. 【翻译】Docker Compose 与Docker Stack的不同

    翻译原文 Docker引擎在1.12 版本集成了Docker Swarm,  带来了一些新工具. 现在可以无需安装 Docker Compose, 就可以利用docker-compose.yml 文件 ...

  10. 全文搜索引擎 Elasticsearch

    写在前面 最近在学Elasticsearch , 我相信只要是接触过开发的都会听过Elasticsearch或ELK这么一个技术. 主要用来做全文检索或大数据分析等,之前一直处理了解状态. 所以打算系 ...