linux服务器部署tomcat和Nginx
项目需要,申请了三台测试机器,好在测试机里面光秃秃的什么都没有,我就可以好好的学习一把玩一把了!接下来以图文的形式讲一下我所碰到的坑以及小小的收获吧!
一、准备工作
首先你得有一台可以玩的linux服务器,知道用户名和密码,然后你需要在windows电脑上安装两个可以连上linux服务器的工具,Xshell 5和Xftp 5,安装教程不多说,补图说明如何连上服务器:
xshell连接界面如下,输入好主机ip后点击确定,xshell会弹出窗口输入用户名和密码即可连接成功!

xftp连接界面如下,填空就可以了,很简单不多说,提一下这里为什么选择SFTP而不选择FTP呢,看http://blog.sina.com.cn/s/blog_7a06b2f7010116rw.html就可以明白了!

二、安装部署工作
若要部署项目到到linux服务器上,安装jdk和tomcat是必不可少的,在这里要强调的是,如果你的一个服务器上要部署多个应用时,那就需要针对每一个应用都有自己的tomcat,因为不同的应用下面,tomcat的配置肯定是不一样的,对于这种情况,可以安装一个tomcat安装目录和多个应用下的tomcat的工作目录,对于相同的部分可以共享安装目录的tomcat,下面再分别详细介绍该如何操作,如何安装tomcat和jdk到你的服务器上
1.目录划分
这是很重要的一步,可以按照下图这种方式新建目录,该目录下面放置与项目启动和部署访问相关的一些文件,大家可以看到,我在这个目录下面放置了多个版本的jdk和多个版本的tomcat,项目部署过程中具体使用哪个tomcat和jdk都是可以通过配置实现的。

对于实际的应用,我们专门放在一个实例目录下,建立好每个应用的名字,然后该目录下面放置相应的war包,以及解压后的文件,等着tomcat读取该目录部署该应用,如下:

2.修改配置
每个应用下面的tomcat我们也放置在一个目录下面方便管理,如下图,但是得注意每个tomcat的配置

/bin目录下面,start.sh文件和stop.sh文件都要修改,首先要指定jdk路径,类似于配置环境变量,其次就是要,指定tomcat工作目录的tomcat路径,大家可以注意到,CATALINA_HOME和CATALINA_BASE分别对应tomcat的安装目录和工作目录,然后大家从最后一行可以看到项目启动使用的是安装目录下面的start.sh,但是项目启动使用的tomcat配置文件则是每个应用tomcat自己所配置的配置文件。stop.sh也是同样的道理。

对于使用xshell执行./start.sh和./stop.sh都是需要权限的,若出现没有权限,咱们可以使用xftp对start.sh邮件修改权限,按如图所示,打上勾勾即可。

/conf目录下面,需要注意修改的配置有,首先是server.xml文件,修改对应的端口号,每个应用的tomcat都需要修改不同的端口号,不然会导致启动多个tomcat时端口占用而没法启动,最好记住这个这个应用配置的tomcat的端口号,后面使用nginx做端口映射时会用到;

另外一个要修改的地方就是,Catalina目录下的localhost目录下的ROOT.xml文件,该文件用于指定tomcat启动时,加载哪个目录下的项目实例

其他的/logs目录、/temp目录、/webapps目录、/work目录不需要修改;从上面也可以看出来,目录划分非常清晰,分别划分为,服务安装目录(jdk、tomcat、nginx等),应用实例目录,以及应用部署目录,大家在使用玩linux服务器部署多个项目时,也可以按照这种方式划分。
3.nginx实现80端口反向代理
按道理说,这个时候我们就可以把我们自己应用的war包传到相应的目录下面解压,然后去对应的应用tomcat工作目录下面执行./start.sh就可以启动该项目了!大家不妨可以先试试看。
项目部署好后,我们配置好hosts开始访问了,这个时候我们会发现,必须得加上上面配置好的tomcat端口号才可以访问,我们能不能不加上端口号(使用默认的80端口)访问呢?上面也提到了,对于不同的tomcat我们配置了不同的端口号,原因就是一个端口号只能给一个tomcat去使用,这就意味着,项目访问必须得添加端口号访问,但是,要做到每一个应用都可以使用80端口访问我们也是可以做到的,这时候就要使用到nginx了,安装好nginx后我们添加部分配置就可以做到反向代理,对不同应用使用的80端口访问转发到相应的端口号,在tomcat看来,外部请求还是使用了tomcat配置的端口号,这样也就实现了我们想要的效果,具体配置如下(当然我们也得做好相应的目录划分工作):
nginx目录如下:

我们只需要关心/conf目录下面的nginx.conf配置文件,具体配置信息我也打开给大家看了,注意到最后一行了么,"include domains/*",表示该配置还没有完,包含/domains目录下的所有配置文件,

这个时候我们把相应的每个应用的nginx配置,用不同命名的文件配置好就可以了

然后再来看看怎么配置吧,监听auction.center.jd.net:80域名访问,然后转发到本机的127.0.0.1的1605端口访问,从配置中我们也可以看到,对于一些异常状态,如http_500 http_502 http_504等会记录下来,做不同的处理,一般情况下可以跳转到网站首页等等,然后就是记录日志,配置好了这个配置文件,我们一定不能忘了新建日志目录,不然nginx找不到目录,启动会报错。

做完了这些工作之后,还没完,我们需要重启nginx,具体怎么重启我就不多说了,百度上很多相关资料,如果重启失败,咱们干脆来狠招,杀掉nginx进程,然后再使用nginx service start命令启动nginx服务。
在我们做完这些工作之后,是不是就可以使用我们熟悉的方式(不添加端口号)访问了呢,嗯对是的没错就是这样的,很多人在顾虑是不是还要重启tomcat重新部署应用,那只能说明你对网络层的nginx路由转换那一层没有理解,我们访问的域名首先通过我们配置的hosts做DNS解析,转换到对应的Ip,找到ip对应的服务器,经过服务器的防火墙,然后当我们对服务器配置Nginx后,Nginx首先会拦截请求,对请求做处理和分发,最终才会打到相应的tomcat上(个人理解,可能理解的也不到位,勿喷),这时候我们就可以满怀信心的访问域名发送请求了!!
4.踩坑
额。。不好!!空欢喜一场,跳转到首页,还是没法访问指定应用,当我试着加上端口号后,“奇迹”般的能访问,这就说明咱们配置的Nginx没有生效,问题出在哪呢?
下面说下我的解题思路吧,首先我们得确认所有的请求都走到了Nginx,这时候就体现了日志的好处了,当我们使用80端口访问我们的应用时,盯着日志去看,一遍两遍三遍。。没有日志,这个时候我们粗略的可以断定根本就没有经过Nginx服务,并不能确定nginx服务对于服务器没有生效,应为也许是咱们的日志配置的有问题呢,这个时候我做出一个大胆的操作,那就是关掉,nginx服务访问,还是跳转到网站首页,怎么回事?难道跳转到首页不是通过nginx配置的?的确,公司在网络层就已经做了处理,这个时候我很迷茫,完全就是各种尝试,不妨修改tomcat配置,把其中一个应用配置成80端口,这样总可以访问了吧,很快,修改完成并部署好,就等着地址栏输入域名访问了,因为Nginx服务已经关闭了,这时候的请求肯定是直接打到tomcat上的,访问一次两次三次,“奇迹”般的居然不能访问,纳尼???这时候灵光一闪,绝对是服务器防火墙禁用了80端口,赶紧试着在本地telnet 192.168.108.37 80 果然不能访问,证明了我的猜测是对的,这时候就好办了,只要在防火墙中开通80端口访问权限即可,下面补充下如何在CentOS下配置iptables防火墙放开80端口。
1.打开iptables的配置文件,代码如下:vi /etc/sysconfig/iptables
2.通过/etc/init.d/iptables status,命令查询是否有打开80端口,如果没有可通过两种方式处理
3.第一种方式:修改vi /etc/sysconfig/iptables命令添加使防火墙开放80端口,代码如下:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
4.关闭/开启/重启防火墙 代码如下:/etc/init.d/iptables stop (#start 开启 、#restart 重启)
5.第二种方式:通过命令去添加端口,代码如下:
[root@centos httpd]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@centos httpd]# /etc/rc.d/init.d/iptables save
[root@centos httpd]# /etc/init.d/iptables restart
6.查看效果:[root@centos httpd]# /etc/init.d/iptables status
7.补充一句,推荐使用第二种方式,操作简单,成功率高,就拿我来说吧,当我使用第一种方式修改防火墙配置的时候,重启失败,使用第二种方式,完美成功
三、总结
最后结果也是预料之中,即使tomcat配置了1605端口,我们照样能使用80端口访问,这就是nginx的强大之处,不过几兆的安装包,居然能发挥如此多的作用,这是我刚学nginx入门,了解的很浅陋,但是通过这一次实践让我对nginx有所好感,慢慢的我会从认识到了解到熟知(虽然不能相知相爱)。
补充:上面讲的这么多都是基于会一些基本linux命令的,对于不知道如何创建文件,修改文件,上传war包,启动tomcat,查看进程,查看日志等等基本命令的,最好还是先学习下基本的linux命令,慢慢的你会发现,许多能用xftp可视化界面做的事情,我们更喜欢去用命令操作。
linux服务器部署tomcat和Nginx的更多相关文章
- Linux服务器上Tomcat的Web工程部署
Linux服务器上Tomcat的Web工程部署 部署Web应用到Tomcat服务器就是将开放好的JavaWeb应用打包成war包,然后发布到tomcat服务器的webapps目录下: 步骤1,先进入t ...
- 在linux上部署tomcat服务
在linux上部署tomcat 1.安装JDK 2.下载tomcat http://tomcat.apache.org/download-70.cgi 3.上传到服务器,并解压 4.上传war包或者已 ...
- Linux服务器部署.Net Core笔记:目录
目录 Linux服务器部署.Net Core笔记:一.开启ssh服务 Linux服务器部署.Net Core笔记:二.安装FTP Linux服务器部署.Net Core笔记:三.安装.NetC ...
- Linux服务器部署系列之八—Sendmail篇
Sendmail是目前Linux系统下面用得最广的邮件系统之一,虽然它存在一些不足,不过,目前还是有不少公司在使用它.对它的学习,也能让我们更深的了解邮件系统的运作.下面我们就来看看sendmail邮 ...
- Linux服务器部署系列之七—OpenLDAP篇
LDAP(轻量级目录访问服务),通过配置这个服务,我们也可以在linux下面使用目录的形式管理用户,就像windows下面的AD一样,方便我们管理.下面我们就一起来配置openldap服务.本文运行环 ...
- Linux服务器部署系列之一—Apache篇(下)
接上篇 linux服务器部署系列之一—Apache篇(上) 四.管理日志文件 Apache日志分为访问日志和错误日志两种: 1)访问日志 用于记录客户端的访问信息,文件名默认为access_lo ...
- Linux服务器部署系列之二—MySQL篇
MySQL是linux环境中使用最广泛的数据库之一,著名的“LAMP黄金组合”就要用到MySQL.关于MySQL的优点及作用,我就不多讲了,网上很多这样的文章. 今天我们要谈的是MySQL服务器的部署 ...
- 如何在linux服务器部署Rstudio server,配置ODBC远程访问win 服务器上的SQL server
如何在linux服务器部署Rstudio server,配置ODBC后通过RODBC包远程访问SQL server 背景介绍:之前写过一篇文章,提到近期要部署Rstudio server(搭建数据分析 ...
- 关于linux下部署JavaWeb项目,nginx负责静态资源访问,tomcat负责处理动态请求的nginx配置
1.项目的运行环境 linux版本 [root@localhost ~]# cat /proc/version Linux version -.el6.x86_64 (mockbuild@x86-.b ...
随机推荐
- T-3-java核心API-基础类
一.API 现成的类(程序) Java API是java(Oracle)提供的系统标准API. 第三方的jar包API,如:JUnit.jar. 可以自己开发一些API. 一般情况下任何技术都有现成的 ...
- .Net WebApi开发SharePoint出现System.IO.FileNotFoundException: 找不到位于的 Web 应用程序
System.IO.FileNotFoundException: 找不到位于 http://xxx/sites/xxxx 的 Web 应用程序.请确认正确键入了此 URL.如果此 URL 需要提供现有 ...
- s6-9 TCP 定时器
TCP 定时器管理 重传定时器(retransmission timer,Positive ackn. with retransmit) 最重要的定时器 TCP 定时器管理 持续定时器(per ...
- 【慕课网实战】六、以慕课网日志分析为例 进入大数据 Spark SQL 的世界
DataFrame它不是Spark SQL提出的,而是早起在R.Pandas语言就已经有了的. A Dataset is a distributed collection of data:分布式的 ...
- 收集几个html和element-ui的录入控件
我希望有一个控件去显示或输入账本的金额 先做一些资料收集,也希望大家给个建议 输入银行账号会设置每四位添加一个空格 https://blog.csdn.net/wkx18330698534/artic ...
- prim算法和克鲁斯卡尔算法
Prim 设图G=(V,E)是一个具有n个顶点的连通网,其生成树的顶点集合为U.首先把v0放入U,再在所有的u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树,并把该边的v加入U集合 ...
- 用pyspider爬取并解析json字符串
获取堆糖网站所有用户的id 昵称及主页地址 #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-06-21 13:57: ...
- api controller 接口接收json字符串参数
{"data":{"alarmRepeatTimes":2,"currentMode":1,"moduleResetTimeout ...
- Teradata Delete Database and Drop Database
DELETE DATABASE and DELETE USER statements delete all data tables, views, and macros from a database ...
- 使用Spring+MySql实现读写分离(二)spring整合多数据库
紧接着上一章,因为现在做的项目还是以spring为主要的容器管理框架,所以写以下spring如何整合多个数据源. 1. 背景 我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较 ...