搜索
首页运维NginxNginx+Tomcat反向代理、负载均衡、集群部署的方法

nginx与其他服务器的性能比较:

tomcat服务器面向java语言,是重量级的服务器,而nginx是轻量级的服务器。apache服务器稳定、开源、跨平台,但是apache服务器不支持高并发,nginx能支持处理百万级的tcp连接,10万以上的并发连接,并且是一个很好的跨平台服务器。
nginx主要优点有可以实现高并发、部署简单、内存消耗少、成本低等,主要缺点有rewrite功能不够强大,模块没有apache的多。

本篇主要讲解 nginx + tomcat 反向代理和负载均衡的部署,以通俗实用为主。本篇文章每个部分之间没有太大关系,可根据需求分开学习。

下来看一下nginx反向代理的过程:

Nginx+Tomcat反向代理、负载均衡、集群部署的方法

nginx负载均衡的过程(会自动选择压力较小的服务器进行访问):

Nginx+Tomcat反向代理、负载均衡、集群部署的方法

可以看出,负载均衡是通过反向代理的原理实现的,所以也称 反向代理的负载均衡 。所以我们会部署负载均衡,那么反向代理也就会了。

总的来说,负载均衡实现的方式分为软件实现和硬件实现两种,硬件实现运行的效率非常高,但是对应的成本也非常高。软件实现运行效率不如硬件,但是成本相对来说低得多。而使用nginx服务器实现负载均衡,那么就是通过软件的方式来实现负载均衡,并且nginx本身支持高并发等。故而使用nginx服务器实现负载均衡,能大大节约企业的成本,并且由于nginx是服务器软件,其执行效率也是非常高。本篇的目的也就是帮助大家使用nginx实现负载均衡。

负载均衡的核心就是建立一个服务器集群,然后用户首先访问到第三方代理服务器(这里我们选用nginx),然后由代理服务器选择一个集群中的服务器,然后将请求引入选定的服务器(这里我们选用tomcat)。

如下图,通过反向代理我们实现下面的负载均衡,这里我们 假定 四台服务器公网的ip,一台做代理服务器,三台做负载均衡下的服务器:

Nginx+Tomcat反向代理、负载均衡、集群部署的方法

好了,整体架构已经基本上清晰了,下来我们来具体实现下:

提示:本篇我们基本上都是使用ssh进行相关操作的,windows下可以尝试安装putty,mac下直接使用系统自带的终端工具即可。

1.linux下搭建nginx服务器

我们在 192.168.2.20 这台服务器上搭建nginx服务器:

1)下载nginx

2)上传服务器nginx安装包

$ scp ~/downloads/nginx-1.10.2.tar.gz root@192.168.2.20:/usr/local

3)安装nginx

$ ssh root@192.168.2.20             //ssh连接
# yum -y install gcc gcc-c++ autoconf automake  //gcc、gcc-c++的库文件
# yum install -y pcre pcre-devel         //安装nginx依赖包
# yum install -y zlib zlib-devel

注意:-y表示遇到判断全部yes,autoconf表示自动配置,automake表示自动编译。

# cd /usr/local
# tar -zxvf nginx-1.10.2.tar.gz         //解压缩
# cd nginx-1.10.2                //切换到该目录下
# ./configure                  //配置
# make
# make install                 //安装

检验是否完成安装:

# cd /usr/local
# ls                      //如果存在nginx文件夹,则安装成功

经过上面的安装步骤和目录设置,nginx的启动程序就是/usr/local/nginx/sbin/nginx,默认配置文件是/usr/local/nginx/conf/nginx.conf,但是不建议直接编辑nginx.conf,一般我们都选择新建配置文件,然后在新建的配置文件中修改端口、反向代理路径等。

2.nginx的启动、停止、信号控制

1)启动nginx服务器(格式:nginx可执行文件 -c nginx配置文件):

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2)停止nginx服务器:

停止nginx服务器首先要查询nginx的主进程号(master process),假设此处查询得到1060(方便下面演示使用):

# ps -ef|grep nginx

下来看如何停止nginx服务器,停止nginx有三种方式:

从容停止:

# ps -ef|grep nginx  //查看nginx的主进程号(master process),假设此处查询得到1060
# kill -quit 1060

快速停止:

# kill -term 1060

强制停止:

# pkill -9 nginx

3)重启nginx服务器:

当我们修改了nginx配置文件,需要重启才能生效。我们在重启之前还需要验证配置文件的正确性,然后进行重启操作:

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf   //验证
# /usr/local/nginx/sbin/nginx -s reload                  //重启

4)平滑升级nginx服务器

平滑升级不会停掉在运行着的进程,这些进程会继续处理请求,但不会再接受新请求,在这些老进程在处理完还在处理的请求后,停止。此平滑升级的过程中,新开的进程会被处理。这就是平滑升级。

# /usr/local/nginx/sbin/nginx -v       //查看当前版本

下面进行平滑升级:

# cd /usr/local
# tar -zxvf nginx-1.11.6.tar.gz       //解压缩 新版本nginx
# cd nginx-1.11.6              //切换到该目录下
# ./configure                //配置
# make
# cd /usr/local/nginx/sbin          //打开 旧版本nginx可执行文件位置
# cp nginx nginx.old         //备份 旧版本nginx可执行文件,防止升级错误而无法恢复
# cp -rfp /usr/local/nginx-1.11.6/objs/nginx /usr/local/nginx/sbin   //复制新版本可执行文件到旧版本处
# rm -f /usr/local/nginx-1.11.6.tar.gz    //善后工作 删除压缩文件
# rm -rf /usr/local/nginx-1.11.6       //删除文件夹

至此,nginx服务器平滑升级成功。

3.nginx中负载均衡的实现

我们还是先连接ssh,然后进行下面操作(一般不建议修改默认主配置文件nginx.conf,所以我们新建负载均衡配置文件fzjh.conf,保证服务器安全,如下):

# cd /usr/local/nginx/conf
# touch fzjh.conf
# vi fzjh.conf  //用vi编辑器打开文件,然后按键盘的i

注意:vi编辑器中,键盘按 i 进入 insert 状态,按 esc 退出 insert 状态。

然后输入以下配置代码(注释部分按需开启):

#设置低权限用户,为了安全而设置的
user nobody;

#工作衍生进程数
worker_processes 4;

#设置错误文件存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#设置pid存放路径(pid是控制系统中重要文件)
#pid logs/nginx.pid;

#设置最大连接数
events{
  worker_connections 1024;
}

http{
  #主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用额代理服务器,默认负载均衡方式为轮询
  upstream tomcat_client {
    #设置同一个cookie的两次/多次请求,请求的是同一台服务器
    ip_hash;
    #weight权重,默认1,权重越大访问概率越大,backup备用服务器,服务器全部崩溃后启动
    server 192.168.2.21:8080 weight=5;
    server 192.168.2.22:8080 weight=5;
    server 192.168.2.23:8080 weight=5 backup;
  }

  #开启gzip压缩,开启后,访问网页会自动压缩
  #gzip on;

  #指定服务器的名称和参数
  server {
    listen 80;
    server_name test.nginxtest.net;

    #设置字符
    #charset koi8-r;

    #location / 指用根目录做负载均衡
    location / {
      proxy_pass http://tomcat_client;
      proxy_redirect default;
      #设置代理
      proxy_set_header host $host;
      proxy_set_header x-real-ip $remote_addr;
    }
  }
}

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出负载均衡的配置文件了,下来我们加载我们的配置文件:

# /usr/local/nginx/sbin/nginx                      //启动nginx
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf    //加载配置文件

如果存在端口占用,可以使用如下命令kill掉nginx的程序:

# killall -9 nginx

至此,nginx服务器部署完毕。下面我们开始部署负载均衡下的那三台真实提供数据的服务器。

4.linux下安装jdk

我们在192.168.2.21、192.168.2.22、192.168.2.23这三台服务器安装jdk,以192.168.2.21为例:

1)下载jdk

2)上传服务器jdk安装包

$ scp ~/downloads/jdk-8u112-linux-x64.tar.gz root@192.168.2.21:/usr/local

3)安装jdk

$ ssh root@192.168.2.21         //ssh连接
# cd /usr/local
# tar -zxvf jdk-8u112-linux-x64.tar.gz //解压缩
# mv jdk1.8.0_112/ jdk         //将jdk1.8.0_112重命名为jdk
# vi /etc/profile            //用vi编辑器打开文件,然后按键盘的i

下来我们移动光标至最后面,两个回车换行,然后添加下面代码配置java的环境变量:

java_home="/usr/local/jdk"
class_path="$java_home/lib:$java_home/jre/lib"
path=".:$path:$java_home/bin"
catalina_home="/usr/local/tomcat"
export java_home catalina_home

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出了。此时我们想让其立即生效,则需要继续输入命令:

# source /etc/profile

此时profile文件就更新了,此时环境变量就配置成功了。下面我们验证一下jdk是否安装配置成功:

# java -version

如果返回java版本号则安装成功。

5.linux下搭建tomcat服务器

我们在192.168.2.21、192.168.2.22、192.168.2.23这三台服务器搭建tomcat服务器,以192.168.2.21为例:

1)下载tomcat

2)上传服务器tomcat安装包

$ scp ~/downloads/apache-tomcat-8.5.9.tar.gz root@192.168.2.21:/usr/local

3)安装tomcat

$ ssh root@192.168.2.21         //ssh连接
# cd /usr/local
# tar -zxvf apache-tomcat-8.5.9.tar.gz //解压缩
# mv apache-tomcat-8.5.9/ tomcat    //将apache-tomcat-8.5.9重命名为tomcat

4)设置tomcat网页文件目录

tomcat默认网页文件的路径是 /usr/local/tomcat/webapps/root,但是一般我们不在这里存放,我们在linux根目录新建 data/wwwroot 目录:

# mkdir /data             //新建目录
# mkdir /data/www
# mkdir /data/www/root
# cd /usr/local/tomcat/conf
# vi server.xml            //用vi编辑器打开server.xml配置文件,打开后键盘按i

我们找到host节点下的appbase=”webapps”,修改为:appbase="/data/www"

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出配置文件了,然后重启tomcat即可生效,此时tomcat的网页文件目录就变成了 /data/www/root 了。

配置tomcat环境变量,我们在配置jdk的时候已经配置好了,可以回头看一下。

6.tomcat的启动、停止

1)启动tomcat服务器

# /usr/local/tomcat/bin/startup.sh

2)停止tomcat服务器:

# /usr/local/tomcat/bin/shutdown.sh

到此,nginx + tomcat 负载均衡 集群 已经部署完毕了。不过有了服务器,肯定也少不了数据库,下面拓展一下linux下安装mysql数据库的方法。

7.linux下安装mysql数据库

我们重新找了 192.168.2.30 这台服务器上mysql数据库:

1)下载mysql数据库

2)上传mysql数据库安装包

$ scp ~/downloads/mysql-5.1.51.tar.gz root@192.168.2.30:/usr/local

3)安装mysql

$ ssh root@192.168.2.30         //ssh连接
# groupadd mysql            //建立mysql的组
# useradd mysql -g mysql        //增加用户mysql到mysql的组中

# yum list|grep ncurses
# yum -y install ncurses-devel
# yum install ncurses-devel

# cd /usr/local
# tar -zxvf mysql-5.1.51.tar.gz     //解压缩
# cd mysql-5.1.51

# ./configure --prefix=/usr/local/mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-readline --with-sll 
//配置,设置安装路径,设置编译mysql不带共享库,设置编译client不带共享库,设置要以rmp的方式安装tar包,设置以rmp的方式安装opensll

# make
# make install             //安装,在make[4]的时候等待时间比较长,几分钟到十几分钟,都是正常现象

# /usr/local/mysql/bin/mysql_install_db --user    //对安装好的mysql进行初始化
# cp ./support-files/mysql.server /etc/init.d/mysql //将mysql启动服务复制到系统中并重命名为mysql
# cp ./support-files/my-medium.cnf /etc/my.cnf    //复制规则文件
# chmod 755 /etc/init.d/mysql            //更改文件权限

//文件权限由三个数字组成,第一位:文件拥有者的权限,第二位:文件拥有者同组的人的权限,第三位:文件拥有者非同组人的权限
//7:可读可写可执行,5:可读可执行

# cd /usr/local/mysql
# chown -r mysql .                  //将 /usr/local/mysql 的拥有者更改为mysql
# chgrp -r mysql .                  //将 /usr/local/mysql 归到mysql组中

# ps -ef|grep mysql
# kill -9 3632          //将mysql所有进程号依次杀死,这里假定是3632
# /usr/local/mysql/bin/mysql_install_db --user=mysql    //再次初始化
# service mysql start                   //启动mysql
# /usr/local/mysql/bin/mysqladmin -u root password '123456' //设置mysql密码

到此mysql就安装成功了,下来我们测试一下:

# /usr/local/mysql/bin/mysql -u root -p

如果输入密码后可以登进mysql,那么就测试成功。下面我们设置mysql允许开启远程连接:

# /usr/local/mysql/bin/mysql -u root -p

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
//创建用户用于远程连接(root:用户名,%:所有电脑都可以连接,也可以设置某个ip地址运行连接,123456:密码)

mysql> flush privileges;      //立即生效

下面我们查询一下数据库的用户:

mysql> select distinct concat('user: ''',user,'''@''',host,''';') as query from mysql.user;
mysql> \q              //登出

找一台电脑测试一下,使用navicat远程登录mysql,登进成功。

以上是Nginx+Tomcat反向代理、负载均衡、集群部署的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除
NGINX SSL/TLS配置:使用HTTPS确保您的网站NGINX SSL/TLS配置:使用HTTPS确保您的网站Apr 10, 2025 am 09:38 AM

通过Nginx配置SSL/TLS来确保网站安全,需要以下步骤:1.创建基本配置,指定SSL证书和私钥;2.优化配置,启用HTTP/2和OCSPStapling;3.调试常见错误,如证书路径和加密套件问题;4.应用性能优化建议,如使用Let'sEncrypt和会话复用。

NGINX面试问题:ACE您的DevOps/System Admin面试NGINX面试问题:ACE您的DevOps/System Admin面试Apr 09, 2025 am 12:14 AM

Nginx是高性能的HTTP和反向代理服务器,擅长处理高并发连接。1)基本配置:监听端口并提供静态文件服务。2)高级配置:实现反向代理和负载均衡。3)调试技巧:检查错误日志和测试配置文件。4)性能优化:启用Gzip压缩和调整缓存策略。

NGINX缓存技术:改善网站性能NGINX缓存技术:改善网站性能Apr 08, 2025 am 12:18 AM

Nginx缓存可以通过以下步骤显着提升网站性能:1)定义缓存区和设置缓存路径;2)配置缓存有效期;3)根据不同内容设置不同的缓存策略;4)优化缓存存储和负载均衡;5)监控和调试缓存效果。通过这些方法,Nginx缓存能减少后端服务器压力,提升响应速度和用户体验。

带Docker的NGINX:部署和缩放容器化应用程序带Docker的NGINX:部署和缩放容器化应用程序Apr 07, 2025 am 12:08 AM

使用DockerCompose可以简化Nginx的部署和管理,通过DockerSwarm或Kubernetes进行扩展是常见的做法。1)使用DockerCompose定义和运行Nginx容器,2)通过DockerSwarm或Kubernetes实现集群管理和自动扩展。

高级NGINX配置:掌握服务器块和反向代理高级NGINX配置:掌握服务器块和反向代理Apr 06, 2025 am 12:05 AM

Nginx的高级配置可以通过服务器块和反向代理实现:1.服务器块允许在一个实例中运行多个网站,每个块独立配置。2.反向代理将请求转发到后端服务器,实现负载均衡和缓存加速。

NGINX性能调整:针对速度和低潜伏期进行优化NGINX性能调整:针对速度和低潜伏期进行优化Apr 05, 2025 am 12:08 AM

Nginx性能调优可以通过调整worker进程数、连接池大小、启用Gzip压缩和HTTP/2协议、使用缓存和负载均衡来实现。1.调整worker进程数和连接池大小:worker_processesauto;events{worker_connections1024;}。2.启用Gzip压缩和HTTP/2协议:http{gzipon;server{listen443sslhttp2;}}。3.使用缓存优化:http{proxy_cache_path/path/to/cachelevels=1:2k

NGINX安全性硬化:保护您的Web服务器免受攻击NGINX安全性硬化:保护您的Web服务器免受攻击Apr 04, 2025 am 12:06 AM

Nginx安全强化可以通过以下步骤实现:1)确保所有流量通过HTTPS传输,2)配置HTTP头增强通信安全性,3)设置SSL/TLS加密数据传输,4)实施访问控制和速率限制防范恶意流量,5)使用ngx_http_secure_link_module模块防范SQL注入攻击,这些措施能有效提升Nginx服务器的安全性。

NGINX负载平衡:配置高可用性和可扩展性NGINX负载平衡:配置高可用性和可扩展性Apr 03, 2025 am 12:12 AM

Nginx通过配置负载均衡可以实现高可用性和可扩展性。1)定义上游服务器组,2)选择合适的负载均衡算法如轮询、加权轮询、最少连接或IP哈希,3)优化配置并监控调整服务器权重,以确保最佳性能和稳定性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器