前言

一、Nginx 负载均衡实现原理

1、Nginx 实现负载均衡是通过反向代理实现

反向代理(Reverse Proxy) 是指以 代理服务器(例:Nginx) 来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器(例:Tomcat),并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器(例:Nginx)对外就表现为一个反向代理服务器。一键获取22年最新面试题刷题手册

我们从客户端的视野来看,实际上客户端并不知道真实的服务提供者是哪台服务器,它只知道它请求了反向代理服务器。因此反向代理这种方式又对外隐藏了真实服务器的地址,从一定程度上降低了安全隐患。

2、Nginx 配置反向代理的主要参数

1)upstream 服务池名 {}

作用:配置后端服务器池,以提供响应数据

2)proxy_pass http:// 服务池名

作用:配置将访问请求转发给后端服务器池的服务器处理

二、Nginx 动静分离实现原理

1、动静分离原理

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由 Nginx 提供服务,动态资源由 Nginx 转发至后端。

2、Nginx 静态处理优势

Nginx 处理静态页面的效率远高于 Tomcat 的处理能力
若 Tomcat 的请求量为1000次,则 Nginx 的请求量为6000次
Tomcat 每秒的吞吐量为0.6M,Nginx 的每秒吞吐量为3.6M
Nginx 处理静态资源的能力是 Tomcat 处理的6倍

三、Nginx + Tomcat 动静分离、负载均衡配置步骤

环境准备

注意: 脚本不太完美,请勿执行第二次

1、部署 Nginx 负载均衡服务器

安装Nginx服务详情请看:​ ​web服务之Nginx网站服务​​

下面是Nginx服务一键脚本,使用source或者. 执行脚本即可

#!/bin/bash
#脚本说明:编译安装nginx服务
#注意:使用前请将nginx-1.12.0.tar.gz放入/opt目录下#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0#安装所需开发包和编译环境、编译器
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make#创建程序用户,便于准确控制访问
useradd -M -s /sbin/nologin nginx#解压安装包
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/#编译安装nginx;指定安装路径、指定用户名、组名、启用模块以支持统计状态
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-file-aio --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_modulemake && make install#软链接便于系统识别nginx操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/#添加nginx系统服务
echo '[Unit]
Descriptinotallow=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service#赋权及开启服务、开启开机自启
chmod 754 /lib/systemd/system/nginx.service
systemctl restart nginx.service
systemctl enable nginx.service

2、部署两台 Tomcat 应用服务器

安装Tomcat服务详情请看:​ ​web服务之Tomcat ​​​

下面是Tomcat服务一键脚本,使用source或者. 执行脚本即可

#!/bin/bash
#安装Tomcat服务#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0#安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm#设置JDK环境变量
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH' > /etc/profile.d/java.shsource /etc/profile#安装并启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh

3、动静分离配置

Tomcat服务详情请看:​ ​web服务之Tomcat​​

1)Tomcat1 server 配置

mkdir /usr/local/tomcat/webapps/testvim /usr/local/tomcat/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1:www.test1.com");%>
</body>
</html>#修改配置文件
vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidatinotallow="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
</Host>/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

2)Tomcat2 server 配置

mkdir /usr/local/tomcat/webapps/testvim /usr/local/tomcat/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 1:www.test2.com");%>
</body>
</html>#修改配置文件
vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidatinotallow="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
</Host>/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

3)Nginx server 配置

#准备静态页面和静态图片
echo '<html><body><h1>this is static</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cd /usr/local/nginx/html/img

vim /usr/local/nginx/conf/nginx.conf
......
http {......
#gzip on;upstream tomcat_server {server 192.168.163.11:8080 weight=1;server 192.168.163.12:8080 weight=1;
}server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;#配置Nginx处理动态页面请求,将 .jsp 文件请求转发到Tomcat 服务器处理location ~ .*\.jsp$ {proxy_pass http://tomcat_server;proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#配置Nginx处理静态图片请求location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img/;expires 10d;}location / {root html;index  index.html index.htm;}systemctl restart nginx.service

4、访问测试

测试静态页面效果

浏览器访问 http://192.168.163.10/
浏览器访问 http://192.168.163.10/pika.jpg

测试负载均衡效果,不断刷新浏览器测试

浏览器访问 http://192.168.163.10/test/index.jsp

一文解读Nginx+Tomcat实现负载均衡、动静分离相关推荐

  1. Nginx 反向代理 负载均衡 动静分离 高可用 原理

    1.Nginx简介 1.1 概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能 ...

  2. nginx+apache实现负载均衡+动静分离配置(编译安装)

    一.编译安装nginx cd /usr/local/src wget http://nginx.org/download/nginx-1.6.3.tar.gz tar -zxvf nginx-1.6. ...

  3. Nginx 方向代理/负载均衡/动静分离/高可用

    一,反向代理 正向代理:正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端.这里客户端是要进行 ...

  4. Nginx+Tomcat服务器负载均衡实践方案

    1.    为何选择Nginx+Tomcat做负载均衡? 1.1. Nginx是什么? Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3 ...

  5. nginx+tomcat的负载均衡

    nginx+tomcat的负载均衡 一. Nginx的安装配置 1. Nginx服务器端 Nginx服务器的IP:192.168.5.108 Tomcat01的IP:   192.168.5.102 ...

  6. nginx+tomcat+memcached负载均衡

    2019独角兽企业重金招聘Python工程师标准>>> nginx+tomcat+memcached负载均衡 负载均衡: 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服 ...

  7. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  8. Nginx+Tomcat实现负载均衡、动静分离集群部署

    Nginx+Tomcat实现负载均衡.动静分离集群部署 一.Tomcat多实例部署 1.安装好jdk 2.安装tomcat 3.配置tomcat环境变量 4.修改tomcat2中的server.xml ...

  9. Nginx+Tomcat+Redis负载均衡实现Session共享

    Nginx+Tomcat+Redis负载均衡实现Session共享 环境描述 tomcat1:192.168.194.100:18080 tomcat2:192.168.194.100:28080 N ...

最新文章

  1. $(document).ready(function() {})不执行的问题
  2. 突破安全狗防注入及上传的一些思路
  3. MyBatis-Plus 代码生成器
  4. 拨号云服务器怎么自动配置网关_云服务器配置网站卡慢怎么办
  5. ubuntu server版本安装指南(1)
  6. C++ 一定要使用strcpy_s()函数 等来操作方法c_str()返回的指针
  7. 夺命雷公狗---ECSHOP---01-解决报错问题
  8. 在opensuse tumbleweed 上开发51单片机
  9. java如何制作浪漫表白界面_表白网页在线制作详细教程-我要表白网-最浪漫的表白网页在线生成网站...
  10. 第一讲:经典系统的基础 课后题答案解析
  11. hexo搭建博客系列(六)百度,必应,谷歌收录
  12. 计算机网络图标不见了,电脑网络图标不见了怎么恢复
  13. D365几个功能开发思路
  14. Ping值和带宽之间关系
  15. 计算机操作系统学习(六)设备管理
  16. Python爬虫-利用xpath解析爬取58二手房详细信息
  17. React Native适配安卓IOS刘海屏、异形屏方案
  18. Web-big、html、css、JavaScript、vue、webpack、git、微信小程序、uni-app、性能优化、兼容性、网络请求、web安全、其他
  19. 荣耀手表2给女生带来无数次无法拒绝的心动
  20. majicMIX realistic 模型

热门文章

  1. 【C语言】字符串拷贝函数(strcpy)与内存拷贝函数的不同及内存拷贝函数(memcpy)的模拟实现
  2. signature=fd82bf674fc173553f5da4f30d99acae,Munition device
  3. struts2教程:12、自定义类型转换器
  4. 准备去「技术出海峰会」看看
  5. HTML5小游戏动手做(一):简单的连连看
  6. 两分钟教你使用两款可视化工具
  7. EclipseTomcat服务器启动超时
  8. matlab中如何从一个矩阵的行列中找出 0 元素的个数 或者位置 并作为判断条件
  9. 《Effective STL》重读笔记整理
  10. IC Compiler 实验一