1. Linux上软件安装
2. Ngnix 的使用
3. 使用Ngnix搭建Tomcat集群
1、Linux上软件的安装
参考视频和文档,在Linux上安装JDK,MySQL、Tomcat、Redis。
Linux上软件的安装方式
1. 二进制发布包
软件已经针对具体平台编译打包发布,只要解压,修改配置即可。(各个Linux平台的发布包可能不兼容)
2. RPM包
软件已经按照redhat的包管理工具规范RPM进行打包发布,需要获取到相应的软件RPM发布包,然后用RPM命令进行安装。(不会将安装软件所需要依赖的其他软件一同安装,如果我们安装的软件依赖其他软件,需要将其他软件安装后,才能安装我们需要的软件)
3. Yum在线安装
软件已经以RPM规范打包,但发布在了网络上的一些服务器上,可用yum在线安装服务器上的rpm软件,并且会自动解决软件安装过程中的库依赖问题。(会安装依赖软件,但是需要联网)
4. 源码编译安装
软件以源码工程的形式发布,需要获取到源码工程后用相应开发工具进行编译打包部署。
上传下载工具(FTP的客户端工具):基于FTP协议所制作的上传下载工具。主要有如下几类工具(所有软件的使用方法见视频3)
1、FileZilla:图形化界面,Windows向Linux传送文件(绿色版本,打开直接使用即可);
2、lrzsz:使用yum install lrzsz安装,安装的时候网络必须保持连接。但是我们之前设置了IP为静态,静态的ip地址是不会自动解析域名的,导致无法连接网络,这里可以将IP临时修改为动态的,也可以按下面文章的方法进行修改,使得虚拟机在静态下可以连接网络,但是可以联网之后,CRT就没办法连接到虚拟机,目前不设置虚拟机可以上网!!(后面有需要再设置静态下可以上网也可以连接CRT)
上传是指从window的upload目录下选择文件上传到Linux当前目录下,必须将想上传到Linux的文件拖到upload目录;而下载是指从Linux系统下载文件到Windows的download目录,最后下载的内容在download目录(我们之前设置了上传目录为upload,下载目录为download)
虚拟机静态IP下联网
3、使用Linux自带的工具sftp:使用alt + p 组合键打开sftp窗口,使用put 命令上传(上传到当前用户所在的操作目录,root用户是root文件夹),使用get命令下载。同样,上传是指从Windows上传到Linux,下载是指从Linux下载到Windows(下载到Windows的文档目录下)。
具体参考文档与视频。
1、Linux平台是32位,使用getconf LONG_BIT 查询;
2、一般情况下会将软件安装到“/usr/local”这个目录下,我们在这个目录下创建一个新的jdk文件夹进行安装;
3、我们Linux系统自己携带JDK,我们需要将其卸载再安装我们自己的jdk;
4、将JDK的安装包解压(tar.gz文件),随后配置环境变量就可以使用。
具体参考文档与视频。
1、注意使用32位版本,安装在/usr/loacl/mysql文件夹下;
2、将系统自带的mysql卸载;
3、解压mysql的包,注意这只是一个tar文件,解压不需要加z;
4、先安装服务端,再安装客户端,安装服务端的时候,出现
A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !
You will find that password in '/root/.mysql_secret'.
这个文件下的内容为:
# The random password set for the root user at Thu Mar 5 22:22:03 2020 (local time): kxAKZ0y6hyAhSyX4
这个是随机的密码,我们安装好客户端登录就需要这个密码。
5、登录命令:mysql -uroot -pkxAKZ0y6hyAhSyX4 ,安装后先启动MYSQL的服务,随后才能登录,启动服务:service mysql start。
登录后必须先设置密码,我们设置密码为:root 即可。
设置完成之后我们就可以执行数据库的命令,如:show databases; ,注意命令后加;
问题:
我们必须要在linux的mysql中开启远程访问权限(参考视频5与文档)。随后还是无法登录,可能是防火墙的问题,我们将防火墙关闭。实际生产过程中,我们使得防火墙放行这个MYSQL服务,而不是关闭防火墙,学习过程中,我们将防火墙关闭即可。封闭防火墙:service iptables stop
具体参考文档与视频。
1、将tomcat的包放到/usr/local/tomcat7目录下,直接解压就可以使用;
2、进入tomcat7/apache-tomcat-7.0.57/ 下,执行“./startup.sh”,便开启Tomcat,在浏览器通过http://192.168.91.127:8080/ 可以访问到。停止使用“./shutdown.sh”
具体参考文档与视频。
1、Redis是源码安装的方式,Redis是c语言编写,我们需要对其源码进行编译,之后才能进行安装。
2、安装gcc-c++ :yum install gcc-c++ ,我们安装的时候发现无法下载,这使得因为我们将IP地址设置为静态,此时无法连接到网络,我们临时将BOOTPROTO=dhcp其设置为动态,然后再CRT中创建一个新的“192.168.91.129”连接(此时动态分配的连接是192.168.91.129,静态IP我们设置为192.168.91.127)即可连接上,这时linux就可以上网,进入 /usr/local ,执行下载后,再修改回来BOOTPROTO=static,修改回来后六级192.168.91.127。
我们在虚拟机中安装gcc可能会快一点。
3、安装gcc后,就可以下载Redis源码:wget http://download.redis.io/releases/redis-3.0.4.tar.gz ,下载完成之后进行解压,解压完成之后,进入:redis-3.0.4,随后进行编译安装:make,编译后安装:make PREFIX=/usr/local/redis install ,这样既安装成功
安装完成后,我们进入:/usr/local/redis/bin 目录下面,有如下文件,redis-server启动Redis,redis-cli访问Redis。
随后我们进行配置,我们将:/usr/local/redis-3.0.4 路径下的redis.conf复制到 /usr/local/redis/bin 目录下面。这样算配置成功,这样就可以启动Redis。启动服务器的时候注意要指定配置文件:./redis-server ./redis.conf ,这样就启动了Redis。
2、部属项目到Linux
我们将我们写的web案例打包成一个war包,放到Linux的tomcat服务器的webapps目录下即可。我们使用之前写过的:G:\idea_java_project\ 目录下的maven_web项目来测试即可。
1、首先,将项目的pom.xml文件里面的jdk版本修改为1.7,因为我们的linux中安装的是1.7版本(以后再使用这个项目记得修改为1.8,因为Windows中我们安装的是1.8版本的jdk);
2、我们在<build>标签下设置<finalName>linux-web</finalName>,将最后打包的项目的war包名命名为linux-web,浏览器访问的时候也使用这个名字来访问项目!
3、视频中的案例没有源码给我们,没办法操作,我们在操作数据库部分观看视频的操作即可(这部分是黑马旅游网的数据库代码,等搞完黑马旅游网之后可以回来做做看)。(注意,如果想通过SQLyog访问linux的数据库,必须在linux中登录数据库:mysql -uroot -proot ,在任意目录下都可以登录数据库,登录数据库之前必须先开启数据库)
这里注意:
1)如何将本机Windows的MYSQL数据库导出到桌面,再导入到SQLyog中Linux的数据库中?
2)注意在druid.properties中指定数据库的字符集;
3)修改2处绝对路径,将其修改为相对路径;
4、在IDEA中将项目打包成为war。想上传war包到linux,首先找到war包:G:\idea_java_project\maven_web\target\linux-web.war,在所在项目的target文件夹下面。将war包拷贝到lrzsz的upload目录下面。随后在Linux中进入:/usr/local/tomcat7/apache-tomcat-7.0.57/bin,这个目录下面,使用“./startup”启动Tomcat。随后到:webapps目录下,将rz将war包上传,由于Tomcat启动,会自动将war包解压。
项目的war包解压,且Tomcat服务器启动,项目部属成功
另外,也可以克隆一个会话,在logs目录下面,动态查看:tail -f catalina.out 日志文件。
我们访问:http://192.168.91.129:8080/linux-web/,发现页面正常打印信息。成功将项目部属到Tomcat!
3、Nginx概述
课程目标:
目标1:掌握Nginx的安装
目标2:掌握Nginx的静态网站部署
目标3:理解Nginx的反向代理与负载均衡,能够配置反向代理与负载均衡
什么是Nginx(见视频9的概述,理解好什么是Nginx)
Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔·西索夫(Igor Sysoev)所开发,官方测试 nginx 能够支支撑 5 万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定。
Nginx 应用场景
1、http 服务器。Nginx 是一个 http 服务可以独立提供 http 服务。可以做网页静态服务器。(不能做动态网站的服务器);
2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用 nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
注:
4、Nginx在Linux下的安装
参考文档与视频即可。下面是注意点:
1、实际开发过程中,MYSQL、Redis、Tomcat、Nginx等都会使用一个独立的Linux进行安装,现在为了学习方便,将这些软件安装在一起,使用端口区分即可;
2、同样在/usr/local 目录下面安装Nginx
安装完成之后,在:/usr/local/nginx 目录下面的文件为下图,其中conf是配置文件目录,html是静态资源存放的目录(可以修改),sbin是启动文件的目录,其他2个是Nginx的安装包以及解压包(我们路径的配置与视频略有不同,注意)
我们进入/usr/local/nginx/sbin ,运行“./nginx”,就启动Nginx。随后访问:http://192.168.91.129/(Nginx端口号默认80),出现如下,Nginx安装成功。
停止,在:/usr/local/nginx/sbin 目录下,使用“./nginx -s stop”杀死进程,可以停止Nginx。(注意启动任何文件,前面都要加“./”)。也可以使用“./nginx -s quit”停止,这会保存配置再推出,较为温和,正常退出。
使用“./nginx -s reload”重新加载配置文件,重新加载Nginx,相当于重启。
5、Nginx的功能
5.1 静态网站部属
将/资料/静态页面/index目录下的所有内容 上传到服务器的/usr/local/nginx/html下即可访问。(具体见视频11解析)
1、在路径:/usr/local/nginx/conf 下的nginx.conf配置文件,我们要大量修改这个文件的内容,直接在vim中修改很麻烦,可以使用EditPlus辅助。EditPlus还可以把本机对应的资源上传到Linux服务器上。
2、在EditPlus中,我们将conf文件下的nginx.conf文件夹注释全部清除,主要看下面的内容
server {
listen 80; //端口默认是80
server_name localhost; //域名或IP
//默认访问的位置
location / {
root html; //默认访问/usr/local/nginx/html 路径
index index.html index.htm;//默认使用html文件夹下的index.html首页
}
}
3、我们将资料中的index文件夹复制到ngnix目录下面,index文件夹中有一个index.html文件,我们修改nginx.conf文件的内容。
location / {
root index;//将html修改为index
index index.html index.htm;
}
4、修改后我们,我们重启Nginx,访问:http://192.168.91.129/,出现如下页面,这是我们设置的默认访问页面,访问Linux的ip地址时就会默认访问index文件夹下的index.html页面。
如果我们想通过Nginx访问其他静态资源,可以将资源放在html目录下面,通过路径可以直接访问到html目录下面的静态资源。
5.2 虚拟主机-端口绑定
虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。虚拟主机技术极大的促进了网络技术的应用和普及。同时虚拟主机的租用服务也成了网络时代的一种新型经济形式。总结来说,虚拟主机就是在同一个Nginx中部属多个项目。
//首先我们对配置文件nginx.conf进行解析
server {
listen 80; //端口默认是80
server_name localhost; //域名或IP
location / {
root html; //默认访问资源的目录
index index.html index.htm;//默认访问的资源名称(欢迎页)
}
error_page 500 502 503 504 /50x.html; //错误页面,可以不要
location = /50x.html {
root html;
}
}
我们可以在nginx.conf中,将server部分再复制一份,放到下面,这样就相当于部属了2个网站。如下,我们在EditPlus中将regist放到nginx目录下面,设置另一个server的内容如下:
server {
listen 81;
server_name localhost;
location / {
root index;
index index.html index.htm;
}
}
server {
listen 82;
server_name localhost;
location / {
root regist;
index regist.html;
}
}
之后我们重启Nginx:./nginx -s reload
访问:http://192.168.91.129:81/,内容如下图
访问:http://192.168.91.129:82/,内容如下图
这样便实现再Nginx中在不同的端口来部属不同的项目,在浏览器中可以通过访问同一IP地址不同的端口来访问不同的静态项目(在Nginx中虚拟出多个主机)。
5.3 虚拟主机-域名绑定
什么是域名:
域名(Domain Name),是由一串用“点”分隔的字符组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。域名是一个IP地址上有“面具” 。域名的目的是便于记忆和沟通的一组服务器的地址(网站,电子邮件,FTP等)。域名作为力所能及难忘的互联网参与者的名称。域名按域名系统(DNS)的规则流程组成。在DNS中注册的任何名称都是域名。域名用于各种网络环境和应用程序特定的命名和寻址目的。通常,域名表示互联网协议(IP)资源,例如用于访问因特网的个人计算机,托管网站的服务器计算机,或网站本身或通过因特网传送的任何其他服务。世界上第一个注册的域名是在1985年1月注册的。
域名级别
(1)顶级域名
顶级域名又分为两类:
一是国家顶级域名(national top-level domainnames,简称nTLDs),200多个国家都按照ISO3166国家代码分配了顶级域名,例如中国是cn,美国是us,日本是jp等;
二是国际顶级域名(international top-level domain names,简称iTDs),例如表示工商企业的 .Com .Top,表示网络提供商的.net,表示非盈利组织的.org,表示教育的.edu,以及没有限制的中性域名如.xyz等。大多数域名争议都发生在com的顶级域名下,因为多数公司上网的目的都是为了赢利。但因为自2014年以来新顶级域名的发展,域名争议案件数量增长幅度越来越大[5] 。为加强域名管理,解决域名资源的紧张,Internet协会、Internet分址机构及世界知识产权组织(WIPO)等国际组织经过广泛协商, 在原来三个国际通用顶级域名:(com)的基础上,新增加了7个国际通用顶级域名:firm(公司企业)、store(销售公司或企业)、Web(突出WWW活动的单位)、arts(突出文化、娱乐活动的单位)、rec (突出消遣、娱乐活动的单位)、info(提供信息服务的单位)、nom(个人),并在世界范围内选择新的注册机构来受理域名注册申请。
例如:baidu.com
(2)二级域名
二级域名是指顶级域名之下的域名,在国际顶级域名下,它是指域名注册人的网上名称,例如 ibm,yahoo,microsoft等;在国家顶级域名下,它是表示注册企业类别的符号,例如.top,com,edu,gov,net等。
中国在国际互联网络信息中心(Inter NIC) 正式注册并运行的顶级域名是CN,这也是中国的一级域名。在顶级域名之下,中国的二级域名又分为类别域名和行政区域名两类。类别域名共7个, 包括用于科研机构的ac;用于工商金融企业的com、top;用于教育机构的edu;用于政府部门的 gov;用于互联网络信息中心和运行中心的net;用于非盈利组织的org。而行政区域名有34个,分别对应于中国各省、自治区和直辖市。
例如:map.baidu.com
(3)三级域名
三级域名用字母( A~Z,a~z,大小写等)、数字(0~9)和连接符(-)组成, 各级域名之间用实点(.)连接,三级域名的长度不能超过20个字符。如无特殊原因,建议采用申请人的英文名(或者缩写)或者汉语拼音名 (或者缩写) 作为三级域名,以保持域名的清晰性和简洁性。
例如:
item.map.baidu.com
域名与IP绑定:
一个域名对应一个 ip 地址,一个 ip 地址可以被多个域名绑定。
本地测试可以修改 hosts 文件(C:\Windows\System32\drivers\etc)
可以配置域名和 ip 的映射关系,如果 hosts 文件中配置了域名和 ip 的对应关系,不需要走dns 服务器来解析域名。(视频13-00.50解析)
192.168.177.129 www.hmtravel.com
192.168.177.129 regist.hmtravel.com
比如我们输入:https://www.baidu.com,首先回去hosts文件查询有没有这个域名对应的ip地址,如果有,就将ip返回,再通过80端口去访问这个IP;如果没有,就会通过DNS(域名解析)服务器去查找域名以及IP的对应关系,再通过找到的IP访问。
域名绑定实现虚拟主机:找到C:\Windows\System32\drivers\etc路径下的hosts文件,添加如下内容并保存
192.168.91.129 www.lkj.com //顶级域名
192.168.91.129 regist.lkj.com //二级域名
这样就实现域名绑定,我们访问:http://www.lkj.com:82/,或者访问:http://regist.lkj.com:82/ ,都可以访问到注册页面。因为我们访问www.lkj.com或者regist.lkj.com,回去hosts文件查找器对应的IP地址,查找到为:192.168.91.129,就会去访问这个IP地址,也就是我们Linux的IP地址。
接下来,我们尝试通过不同的域名访问同一个端口,可以访问到不同的页面(项目)。我们需要修改nginx.conf文件。
server {
listen 80;
server_name www.lkj.com;//通过这个域名访问80端口首页是index.html
location / {
root index;
index index.html index.htm;
}
}
server {
listen 80;
server_name regist.lkj.com;//通过这个域名访问80端口首页是regist.html
location / {
root regist;
index regist.html;
}
}
修改后重启Nginx,访问:http://regist.lkj.com/80 (80可以不要)就是访问到regist页面,访问 :http://www.lkj.com/80 (80可以不要)就是访问到index.html页面。
这就是通过不同的域名访问同一个IP地址的同一个端口,我们可以访问到不同的资源。(域名解析)
总结:我们可以通过访问同一个域名的不同端口来访问不同项目(端口解析),也可以通过不同域名访问同一个端口来访问不同的项目(域名解析)。
5.4 反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理代理的是服务端。
反向代理的实现:
//准备工作
(1)将travel案例部署到tomcat中(ROOT目录),上传到服务器。(我们没有这个案例)
我们到/usr/local/tomcat7/apache-tomcat-7.0.57/webapps 目录下面,有一个之前部属的linux-web.war项目,我们希望这个项目成为root项目,将来我们访问的时候就不需要输入相应的项目名称访问。
我们将这个webapps下面的文件全部删除,再在IDEA中将maven_web项目打包成为root包。在IDEA中设置:<finalName>ROOT</finalName>,打包为ROOT.war,将其放到upload下,使用rz命令上传到webapps目录下。
(2)启动TOMCAT,输入网址http://192.168.91.129:8080 可以看到maven_web项目的index.jsp文件内容
到/usr/local/tomcat7/apache-tomcat-7.0.57/bin 目录下面,执行./startup.sh 启动服务器。访问:http://192.168.91.129:8080/ 可以看到相应的资源。(注意war包必须写为全大写ROOT.war)
这是直接访问Tomcat,下面我们使用Nginx作为代理访问。
1、同样在nginx.conf文件进行配置。
upstream tomcat-maven{
//tomcat-maven名字可以随便起
server 192.168.91.129:8080; //配置我们要被Nginx代理的服务器(这里是Tomcat服务器,Tomcat服务器在Linux中的IP与端口为:192.168.91.129:8080)
}
server {
listen 80;
server_name www.lkj.com;
location / {
# root index;
proxy_pass http://tomcat-maven; //
index index.html index.htm;
}
}
这样子反向代理配置完毕,将来我们输入域名/IP(端口是80不需要输入):www.lkj.com ,输入这个域名,就会去找代理 proxy_pass ,代理告诉它走的是这个主机 : http://tomcat-maven ,就会去找主机下的IP和端口并访问:192.168.91.129:8080。
2、测试:我们在:/usr/local/nginx/sbin 目录下启动Nginx: ./nginx ,访问:http://www.lkj.com/ 域名也可以访问到前面直接访问Tomcat的那个界面。当然此时也可以:http://192.168.91.129:8080/ 直接访问Tomcat。(集体流程见视频16解析)
5.5 负载均衡
什么是负载均衡?
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
我们使用多个Tomcat同时部属同一个项目,同时对外提供服务,这形成了Tomcat集群。
步骤:
1、将Tomcat复制几份:首先到:/usr/local/tomcat7/apache-tomcat-7.0.57/bin 目录下面停止Tomcat,最后到Tomcat的根目录下:/usr/local/tomcat7 ,随后复制3个tomcat:cp -r apache-tomcat-7.0.57 tomcat1(如下图)
2、修改3个新增Tomcat的端口,在EditPlus中找到3个Tomcat的文件夹,在 /usr/local/tomcat7 目录下。在每一个Tomcat的conf目录下的server.xml修改,将3个Tomcat的所有端口都修改不同,参考视频修改。
3、修改完成后,我们启动3个Tomcat。用:tomcat1/bin/startup.sh 命令快速启动。
4、这个时候Tomcat配置完毕,我们接下来要修改nginx.conf的配置文件。同样在EditPlus中修改。
upstream tomcat-maven{
//增加2个Tomcat路径
server 192.168.91.129:8080;
server 192.168.91.129:8081;
server 192.168.91.129:8082;
}
server {
listen 80;
server_name www.lkj.com;
location / {
# root index;
proxy_pass http://tomcat-maven;
index index.html index.htm;
}
}
现在我们访问域名 www.lkj.com ,就会去找代理路径:tomcat-maven ,而tomcat-maven会在它下面随机访问一个Tomcat对应的IP地址,此时每一个地址访问到的几率都是相同的。
测试:刷新Nginx,为了区别,我们在3个Tomcat中修改index.jsp的内容,同样在EditPlus中操作即可。随后我们访问:http://www.lkj.com/ ,刷新会访问到不同的内容,说明Ngnix服务器在动态分配Tomcat资源。
当然,我们还可以设置每一个Tomcat被访问的权重:
upstream tomcat-maven{
//增加2个Tomcat路径
server 192.168.91.129:8080 weight=2; //默认weight=1,配置这个后3个权重变为2:1:1
server 192.168.91.129:8081;
server 192.168.91.129:8082;
}