一、Nginx的介绍和安装
(一)Nginx的概述
(二)Nginx的应用场景
1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器
2、虚拟主机。可以实现在一个服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用Nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器限制的情况。
(三)Linux下的Nginx的安装
1、检索当前环境是否安装了Nginx
ps aux | grep nginx
2、安装Nginx
(1) 下载Nginx
官网地址:http://nginx.org/en/download.html
(2)将下载的nginx-1.8.0.tar.gz上传到linux操作系统
(3)对nginx进行解压缩到/usr/local下
tar zxf nginx-1.8.0.tar.gz -C /usr/local
(4)安装nginx需要先将官网下载的源码进行编译,需要安装gcc
yum install gcc-c++
(5)在linux上安装pcre库
yum install -y pcre pcre-devel
(6)需要在linux上安装zlib库
yum install -y zlib zlib-devel
(7)需要在linux安装openssl库
yum install -y openssl openssl-devel
(8)进入nginx-1.8.0目录,使用configure命令进行按装
注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及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
(9)编译安装
先使用 make 进行编译,然后使用 make install 再进行按装。makemake install
3、启动Nginx
进入nginx装好的nginx目录下的sbin目录下键入 ./nginx进行启动
4、访问测试
在浏览器键入:http://192.168.18.200
二、Nginx实现负载均衡
(一)负载均衡介绍
1、什么是负载均衡
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。负载均衡构建在原有网络 结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
2、负载均衡设计思想
一台普通服务器的处理能力是有限的,假如能达到每秒几万个到几十万个请求,但却无法在一秒钟内处理上百万个甚至更多的请求。但若能将多台这样的服务器组成一个系统,并通过软件技术将所有请求平均分配给所有服务器,那么这个系统就完全拥有每秒钟处理几百万个甚至更多请求的能力。这就是负载均衡最初的基本设计思想。
负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求按照某种策略分配到服务器集合的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡解决了大量并发访问服务问题,其目的就是用最少的投资获得接近于大型主机的性能。
3、负载均衡的分类
(1)集中式
即在服务的提供方和消费方之间使用独立的LB设施,如Nginx(反向代理服务器),由该设施负责把访问请求通过某种策略转发至服务的提供方!
(2)进程式
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选出一个合适的服务器。Ribbon 就属于进程式LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址!
(二)正向代理
Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
- 简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理。
- 需要在客户端配置代理服务器进行指定网站访问
(三)反向代理
- 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
- 我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
(四)负载均衡环境搭建
1、安装配置第一个tomcat
(1)上传jdk-8u161-linux-x64.tar.gz到/usr/local目录下
(2)对jdk-8u161-linux-x64.tar.gz进行解压缩
tar -zxf jdk-8u161-linux-x64.tar.gz
(3)编辑/etc/profile进行环境变量设置
#JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
(4)重新进profile进行加载
source /etc/profile
(5)解压apache-tomcat-9.0.21.tar.gz并改名为tomcat1
source /etc/profile
(6)修改tomcat的webapps/ROOT/index.jsp 标题为8081
(7)修改tomcat1的端口
2、安装配置第二个tomcat
tar -zxf apache-tomcat-9.0.21.tar.gz
mv apache-tomcat-9.0.21 tomcat1
3、配置Nginx管理多个tomcat
upstream tomcat{
server 192.168.18.200:8081;
server 192.168.18.200:8082;
}
location / {
proxy_pass http://tomcat;
index index.html index.htm;
}
(五)发动请求测试负载均衡
三、Nginx实现动静分离
(一)动静分离介绍
(1)什么是动静分离
(2)动静分离优势
(二)动静分离配置
(1)创建文件名show.jsp的文件并在tomcat1上进行部署
<%@ page language="java" import="java.util.Date,java.text.SimpleDateFormat"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<h1>这是tomcat1主页</h1>
<%
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate=sdf.format(date);
out.println(strDate+"<br>");
%>
<img src="images/aaa.jpg">
</body>
</html>
(2)在tomcat2上部署show.jsp文件
<%@ page language="java" import="java.util.Date,java.text.SimpleDateFormat"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
3.在nginx上配置动静分离
4.测试
输入http://192.168.18.200/show.jsp
<body>
<h1>这是tomcat2主页</h1>
<%
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate=sdf.format(date);
out.println(strDate+"<br>");
%>
<img src="images/aaa.jpg">
</body>
</html>
(3)在nginx上配置动静分离
upstream tomcat{
server 192.168.18.201:8081 weight=2;
server 192.168.18.201:8082;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat;
index index.html index.htm;
}
location ~\.(jsp|do|action)$ {
proxy_pass http://tomcat;
}
location ~\.(html|css|js|gif|jpg|png|bmp|swf)$ {
root /usr/local/staticresources;
}