nginx tomcat 虚拟主机?nginx可以替代tomcat吗
apache和tomcat有什么不同,为什么要整合apache 和tomcat
apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展。
apache和tomcat都可以做为独立的web服务器来运行。但是apache不能解释java程序(jsp,serverlet)
Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)
两者都是一种容器,只不过发布的东西不同。apache是html容器,功能像IIS一样,tomcat是jsp/servlet容器,用于发布JSP及JAVA的,类似的有IBM的webshere、EBA的Weblogic,sun的JRun等
apache和tomcat是独立的,在通一台服务器上可以集成。
打个比方:apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),tomcat就是一个桶(装像JAVA这样的水),而这个桶也可以不放在卡车上。
扩展资料:
Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持php,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)。Apache只支持静态网页,但像php,cgi,jsp等动态网页就需要Tomcat来处理。
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。
但是,不能将 Tomcat和 Apache Web服务器混淆,Apache Web Server是一个用 C语言实现的 HTTP web server;这两个 HTTP web server不是捆绑在一起的。Apache Tomcat包含了一个配置管理工具,也可以通过编辑 XML格式的配置文件来进行配置。Apache,nginx,tomcat并称为网页服务三剑客,可见其应用度之广泛。
参考资料:apache tomcat百度百科
面试必备:nginx知识梳理(收藏版)
Nginx概念
Nginx是一个高性能的HTTP和反向代理服务。其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好。
Nginx专为性能优化而开发,性能是其最重要的考量指标,实现上非常注重效率,能经受住高负载的考验,有报告表明能支持高达50000个并发连接数。
在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。
反向代理
在说反向代理之前,先来说说什么是代理和正向代理。
代理
代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。刚开始的时候,代理多数是帮助内网client(局域网)访问外网server用的。后来出现了反向代理,反向这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内。
正向代理
正向代理即是客户端代理,代理客户端,服务端不知道实际发起请求的客户端。
正向代理类似一个跳板机,代理访问外部资源。
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服服务上,代理服务器能够访问谷歌,这样由代理去访问谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了。
反向代理
反向代理即是服务端代理,代理服务端,客户端不知道实际提供服务的服务端。
客户端是感知不到代理服务器的存在。
是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
负载均衡
关于负载均衡,先来举个例子:
地铁大家应该都坐过吧,我们一般在早高峰乘地铁时候,总有那么一个地铁口人最拥挤,这时候,一般会有个地铁工作人员A拿个大喇叭在喊“着急的人员请走B口,B口人少车空”。而这个地铁工作人员A就是负责负载均衡的。
为了提升网站的各方面能力,我们一般会把多台机器组成一个集群对外提供服务。然而,我们的网站对外提供的访问入口都是一个的,比如www.taobao.com。那么当用户在浏览器输入www.taobao.com的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。
负载均衡(LoadBalance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
Nginx提供的负载均衡主要有三种方式:轮询,加权轮询,Iphash。
轮询
nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABCABCABCABC....
upstreammysvr{server192.168.8.1:7070;server192.168.8.2:7071;server192.168.8.3:7072;}加权轮询
根据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBCCCABBCCC....
upstreammysvr{server192.168.8.1:7070weight=1;server192.168.8.2:7071weight=2;server192.168.8.3:7072weight=3;}ip_hash
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
upstreammysvr{server192.168.8.1:7070;server192.168.8.2:7071;server192.168.8.3:7072;ip_hash;}动静分离动态与静态页面区别
静态资源:当用户多次访问这个资源,资源的源代码永远不会改变的资源(如:HTML,JavaScript,CSS,img等文件)。
动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变(如:.jsp、servlet等)。
什么是动静分离
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。
动静分离简单的概括是:动态文件与静态文件的分离。
为什么要用动静分离
为了加快网站的解析速度,可以把动态资源和静态资源用不同的服务器来解析,加快解析速度。降低单个服务器的压力。
Nginx安装windows下安装
1、下载nginx
下载稳定版本。以nginx/Windows-1.20.1为例,直接下载nginx-1.20.1.zip。下载后解压,解压后如下:
2、启动nginx
直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
打开cmd命令窗口,切换到nginx解压目录下,输入命令nginx.exe,回车即可
3、检查nginx是否启动成功
直接在浏览器地址栏输入网址回车,出现以下页面说明启动成功!
Docker安装nginx
我之前的文章也讲过Linux下安装的步骤,我采用的是docker安装的,很简单。
相关链接如下:Docker(三):Docker部署Nginx和Tomcat
1、查看所有本地的主机上的镜像,使用命令dockerimages
2、创建nginx容器并启动容器,使用命令dockerrun-d--namenginx01-p3344:80nginx
3、查看已启动的容器,使用命令dockerps
浏览器访问服务器ip:3344,如下,说明安装启动成功。
注意:如何连接不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口!
linux下安装
1、安装gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,则需要安装:
yuminstallgcc-c++
2、PCREpcre-devel安装
PCRE(PerlCompatibleRegularExpressions)是一个Perl库,包括perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库,pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。命令:
yuminstall-ypcrepcre-devel
3、zlib安装
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在Centos上安装zlib库。
yuminstall-yzlibzlib-devel
4、OpenSSL安装
OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在Centos安装OpenSSL库。
yuminstall-yopensslopenssl-devel
5、下载安装包
手动下载.tar.gz安装包,地址:nginx.org/en/download.html
下载完毕上传到服务器上/root
6、解压
tar-zxvfnginx-1.20.1.tar.gzcdnginx-1.20.1
7、配置
使用默认配置,在nginx根目录下执行
./configuemakemakeinstall
查找安装路径:whereisnginx
8、启动nginx
./nginx
启动成功,访问页面:ip:80
Nginx常用命令
注意:使用Nginx操作命令前提,必须进入到Nginx目录/usr/local/nginx/sbin
1、查看Nginx版本号:./nginx-v
2、启动Nginx:./nginx
3、停止Nginx:./nginx-sstop或者./nginx-squit
4、重新加载配置文件:./nginx-sreload
5、查看nginx进程:ps-ef|grepnginx
Nginx配置文件
Nginx配置文件的位置:/usr/local/nginx/conf/nginx.conf
Nginx配置文件有3部分组成:
1、全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,比如:worker_processes1。
这是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。一般设置值和CPU核心数一致。
2、events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接,比如:worker_connections1024
表示每个workprocess支持的最大连接数为1024,这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置。
3、http块
upstreammysvr{server192.168.8.1:7070weight=1;server192.168.8.2:7071weight=2;server192.168.8.3:7072weight=3;}0
这算是Nginx服务器配置中最频繁的部分。
演示示例反向代理/负载均衡
我们在windows下演示,首先我们创建两个springboot项目,端口是9001和9002,如下:
我们要做的就是将localhost:80代理localhost:9001和localhost:9002这两个服务,并且让轮询访问这两个服务。
nginx配置如下:
upstreammysvr{server192.168.8.1:7070weight=1;server192.168.8.2:7071weight=2;server192.168.8.3:7072weight=3;}1
我们先将项目打成jar包,然后命令行启动项目,然后在浏览器上访问localhost来访问这两个项目,我也在项目中打印了日志,操作一下来看看结果,是不是两个项目轮询被访问。
可以看到,访问localhost,这两个项目轮询被访问。
接下来我们将权重改为如下设置:
upstreammysvr{server192.168.8.1:7070weight=1;server192.168.8.2:7071weight=2;server192.168.8.3:7072weight=3;}2
重新加载一个nginx的配置文件:nginx-sreload
加载完毕,我们再访问其localhost,观察其访问的比例:
结果显示,9002端口的访问次数与9001访问的次数基本上是3:1。
动静分离
1、将静态资源放入本地新建的文件里面,例如:在D盘新建一个文件data,然后再data文件夹里面在新建两个文件夹,一个img文件夹,存放图片;一个html文件夹,存放html文件;如下图:
2、在html文件夹里面新建一个a.html文件,内容如下:
upstreammysvr{server192.168.8.1:7070weight=1;server192.168.8.2:7071weight=2;server192.168.8.3:7072weight=3;}3
3、在img文件夹里面放入一张照片,如下:
4、配置nginx中nginx.conf文件:
upstreammysvr{server192.168.8.1:7070weight=1;server192.168.8.2:7071weight=2;server192.168.8.3:7072weight=3;}4
5、启动nginx,访问其文件路径,在浏览器输入,如下:
6、在浏览器输入
Nginx工作原理mater&worker
master接收信号后将任务分配给worker进行执行,worker可有多个。
worker如何工作
客户端发送一个请求到master后,worker获取任务的机制不是直接分配也不是轮询,而是一种争抢的机制,“抢”到任务后再执行任务,即选择目标服务器tomcat等,然后返回结果。
worker_connection
发送请求占用了woker两个或四个连接数。
普通的静态访问最大并发数是:worker_connections*worker_processes/2,若是HTTP作为反向代理来说,最大并发数量应该是worker_connections*worker_processes/4。当然了,worker数也不是越多越好,worker数和服务器的CPU数相等时最适宜的。
优点
可以使用nginx–sreload热部署,利用nginx进行热部署操作每个woker是独立的进程,若其中一个woker出现问题,其他继续进行争抢,实现请求过程,不会造成服务中断。
总结
关于Nginx的基本概念、安装教程、配置、使用实例以及工作原理,本文都做了详细阐述。希望本文对你有所帮助。
作者:初念初恋
linux下一个tomcat可以部署多个工程吗
毫无疑问tomcat跟nginx,apache这些一样,也是支持多个虚拟主机的。无论是在Linux下,还是Windows下面,它们的用法都是一样的,跟操作系统无关的。
有一种办法是你可以启动多个tomcat,每一个tomcat一个工程,通过绑定不同的端口来访问您的工程,当然了这种方式不符合题目的要求。
另外一种就是通过host的方式来指定工程,在Linux下部署好你的tomcat之后,在conf目录下有一个文件叫server.xml,这个配置文件就是管理您的工程或者虚拟主机的文件,找到如下的配置,按需要添加即可。
Hostname="web-one"appBase="/home/web/"unpackWARs="true"autoDeploy="true"xmlValidation="false"xmlNamespaceAware="false">
Contextpath=""docBase="/home/web/web-one"debug="0"reloadable="true"/>
/Host>
Hostname="web-two"appBase="/home/web/"unpackWARs="true"autoDeploy="true"xmlValidation="false"xmlNamespaceAware="false">
Contextpath=""docBase="/home/web/web-two"debug="0"reloadable="true"/>/Host>
可以的,可系统没有关系!只要站点名不同,就可以部署!~安装jdk配置jdk环境变量安装tomcat找到conf下的service.xmlvi命令打开编辑host标签中添加多个站点添加多个context,指定项目路径和站点名