一、介绍
tomcat对于java的作用
nginx+tomcat+java环境
1、tomcat本身就能对外提供http协议请求
2、但还是建议前面挡一个nginx
二、先构建Nginx+Mysql+Tomcat环境
2.1 系统环境
sed -ri 's/enforcing/disabled/g' /etc/sysconfig/selinux
systemctl stop firewalld
setenforce 0
iptables -t filter -F
2.2 安装nginx
配置官方yum源
# 1、必须先安装包
yum install yum-utils -y
# 2、然后配置源
# 注意下面的内容里有$符号,如果你用cat >> xx.repo <<EOF重定向指令创建文件会丢失$符号
# 所以还是建议直接vi编辑文件写入
vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
安装nginx
yum remove nginx* -y
yum install nginx* -y
执行以下命令,启动Nginx并设置开机启动。
systemctl start nginx
systemctl enable nginx
systemctl status nginx.service # 查看启动状态
2.3 安装MySQL
后续测试包不需要,就不装了,若需安装,请参考:https://egonlin.com/?p=9154 第1.3小节
2.4 安装tomcat
2.4.1 安装jdk
Tomcat 10 + jdk 1.8启动会报错,换成Tomcat 9就可以了
# 1、yum安装JDK1.8.0。
yum -y install java-1.8.0-openjdk*
# 2、验证安装
[root@web02 conf]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)
配置环境变量
find /usr/lib/jvm -name 'java-1.8.0-openjdk-1.8.0*'#输出/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64
vim /etc/profile # 添加
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
立即生效
source /etc/profile
2.4.2 安装tomcat
Tomcat下载地址官网会持续更新。如果上述下载地址失效,请您直接访问Tomcat官网获取:https://tomcat.apache.org/
找到core处下载
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.87/bin/apache-tomcat-9.0.87.tar.gz --no-check-certificate
tar -zxvf apache-tomcat-9.0.87.tar.gz
mv apache-tomcat-9.0.87 /usr/local/tomcat/
useradd www
chown -R www.www /usr/local/tomcat/
2.4.3 启动
/usr/local/tomcat/bin/catalina.sh start
2.4.4 配置文件介绍
<server> ---> 可以监听一个端口,从此端口上可以远程向该实例发送shutdown关闭命令。
<service> ---> 是一个逻辑组件,用于绑定connector和container,有一个service就是一个服务
<connector PORT /> ---> 此处监听的端口才是对外暴露服务的端口,connector称之为连接器,它监听到的请求会交给engine具体处理处理
<engine>---> 接请求,按照分析的结果将相关参数传递给匹配出的虚拟主机
<host name=www.a.com appBase=/www/a > ----> 相当于nginx中的listen
<context path="" docBase=/www/a /> ---> 相当于nginx中的localtion
<context path="/xuexi" docBase=/www/a/xuexi />
</host>
<host>
<context />
</host>
</engine>
</service>
</server>
详解见:
https://egonlin.com/?p=9221
三、部署war包
war包:相当于java程序的压缩包
测试war包:打包了java程序
gitee地址:https://gitee.com/egonlin/helloworld-war
百度网盘链接:https://pan.baidu.com/s/1y-wHi22J4DbUgkwEZd-bAw 提取码:Egon
上传到/usr/local/tomcat/webapps/下,tomcat会自动将其解压
chmod -R 755 /usr/local/tomcat/webapps/
tomcat可以当成web服务用,所以可以直接访问其8080端口
三、配置nginx转发tomcat
通过http协议转发
cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/local/tomcat/webapps/helloworld;
index index.jsp index.html;
}
location ~ \.jsp$ {
rewrite ^/(.*)$ /helloworld/$1 break;
# 把请求转发到上面定义的Tomcat服务器
proxy_pass http://127.0.0.1:8080;
# 设置HTTP头部字段
proxy_set_header Host $host:$server_port;
# 设置真实IP地址
proxy_set_header X-Real-IP $remote_addr;
# 设置转发服务器的相关信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
proxy_pass http://127.0.0.1:8080; 后面不能跟uri路径
proxy_pass http://127.0.0.1:8080/helloworld/; 语法错误
所以我们只能用rewrite重写路径
rewrite ^/(.*)$ /helloworld/$1 break;
例如请求
http://www.egonlin.com/a/b/c/1.jsp
请求中的uri,注意是uri部分/a/b/c/1.jsp会被重写为/helloworld/a/b/c/1.jsp
我们tomcat默认的网站根目录为/usr/local/tomcat/webapps
拼在 一起最终的系统路径为:
/usr/local/tomcat/webapps/helloworld/a/b/c/1.jsp
rewrite ^/(.*)$ /hellworld/$1 break;后面的break是什么意思
"break" 在 Nginx 配置中的 "rewrite" 指令内的意义是当匹配到符合规则的 URL 时,重写该 URL,
然后不在继续匹配其他的 "location" 块,而是立即在当前 "location" 中处理请求。
简而言之,就是让 Nginx 在应用了 "rewrite" 指令改变了请求的路径后,不再去查找可能会匹配新路径的其他 "location" 块,
而是在当前 "location" 块下继续处理请求。