三、web应用层-部署java程序

一、介绍

tomcat对于java的作用

file

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

file

file

file

配置官方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  # 查看启动状态

file

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处下载

file

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

file

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端口

file

三、配置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" 块下继续处理请求。
上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术