在Ubuntu22.04上配置两个Tomcat服务并通过Nginx反向代理实现代理到两个Tomcat服务器上访问对应服务页面的详细步骤:
1.下载并安装Tomcat服务器
在终端执行以下命令,下载Tomcat安装包并解压缩(需要进入到压缩包所在目录打开终端)到两个不同的目录下,分别命名为tomcat1
和tomcat2
:
#不能用这个命令,得自己到tomcat官网下载对应的.tar.gz版本。wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.57/bin/apache-tomcat-9.0.57.tar.gz
#9.0.57.tar.gz得改成自己的版本
tar -zxvf apache-tomcat-9.0.57.tar.gz
mv apache-tomcat-9.0.57 tomcat1
cp -r tomcat1 tomcat2
这几句命令是用来创建两个 Tomcat 服务器实例的,具体含义如下:
tar -zxvf apache-tomcat-9.0.57.tar.gz
:该命令将下载的 Tomcat 压缩包解压缩,并解压出来的文件夹名称为apache-tomcat-9.0.57
。mv apache-tomcat-9.0.57 tomcat1
:该命令将解压出来的 Tomcat 文件夹名称改为tomcat1
。cp -r tomcat1 tomcat2
:该命令将tomcat1
文件夹复制一份,命名为tomcat2
。这样,我们就得到了两个相同的 Tomcat 文件夹,分别命名为tomcat1
和tomcat2
。
通过这样的方式创建两个 Tomcat 服务器实例是为了模拟在不同的机器上运行两个 Tomcat 服务器的情况。在实际的生产环境中,我们需要在不同的机器上安装和配置 Tomcat 服务器,以实现高可用性和负载均衡。
2.配置Tomcat服务器
进入每个Tomcat服务器的目录下,打开conf/server.xml
文件,将默认端口号改为不同的端口号,例如tomcat1
的端口号为8080,tomcat2
的端口号为8081。
cd tomcat1/conf/
sed -i 's/Connector port="8080"/Connector port="8080"/g' server.xml
cd ../..
cd tomcat2/conf/
sed -i 's/Connector port="8080"/Connector port="8081"/g' server.xml
cd ../..
注意这里值更改connect端口可能会出现问题:
Tomcat默认会在8005端口开启一个关闭端口(Shutdown Port),用于远程关闭Tomcat服务器。在日志信息中,报错指出无法在localhost:8005上创建服务器关闭套接字,说明另一个Tomcat服务器正在使用该端口。
如果想在同一台机器上启动多个Tomcat服务器,需要确保每个Tomcat服务器都使用不同的端口号,包括关闭端口。可以通过修改conf/server.xml文件,找到以下配置,并将其改为不同的端口号:
<Server port="8006" shutdown="SHUTDOWN">
3.如果两个Tomcat都已经启动并且修改了端口号,但是只有一个Tomcat可以正常访问,那么可能是防火墙问题:
检查是否已经打开防火墙并且阻止了第二个Tomcat的端口。使用以下命令检查防火墙设置:
sudo ufw status
如果发现8081端口被阻止,则可以使用以下命令开放该端口:
sudo ufw allow 8081/tcp
4.启动Tomcat服务器
分别进入两个Tomcat的目录下,执行以下命令启动Tomcat服务器:
cd tomcat1/bin/
./startup.sh
cd ../../
cd tomcat2/bin/
./startup.sh
cd ../../
5.测试Tomcat服务器是否启动成功
在浏览器中输入http://localhost:8080
和http://localhost:8081
,分别能够看到Tomcat服务器的欢迎页面,证明Tomcat服务器已经成功启动。
这是成功页面:
6.配置Nginx反向代理
在配置之前需要了解一下Nginx配置文件的结构(知道的可以跳过直接从(1)开始):
Nginx是一款高性能、高可靠性的Web服务器和反向代理服务器,其配置文件的格式比较简单易懂,本质上是一个文本文件。
Nginx的配置文件主要由以下几个部分组成:
- 全局块(global block):该部分定义全局配置,例如 worker_processes、pid 等参数。
- events 块:该部分配置与连接处理有关的参数,例如 worker_connections 等参数。
- http 块:该部分是配置 HTTP 服务器的地方,可以定义 server、upstream、location 等块,可以配置虚拟主机、反向代理等。
- server 块:该部分是配置虚拟主机的地方,可以指定 listen、server_name、access_log、error_log 等参数,也可以定义 location 等块。
- location 块:该部分是配置请求匹配规则和请求处理的地方,可以定义 proxy_pass、fastcgi_pass、root、rewrite 等参数,也可以嵌套其他 location 块。
下面是一个简单的 Nginx 配置文件的示例:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
index index.html;
}
location /api {
proxy_pass http://localhost:3000;
}
}
}
该配置文件分为全局块、events 块和 http 块三部分,其中 http 块下面定义了一个 server 块,该块配置了监听 80 端口、虚拟主机的 server_name、静态文件根目录等参数,以及两个 location 块,其中 /api 路径会被代理到本地的 3000 端口。
需要注意的是,Nginx 配置文件的语法非常严格,每个块的开头和结尾都必须匹配,因此在编辑配置文件时要格外注意。
(1)下载并安装Nginx服务器
在终端执行以下命令,下载Nginx安装包并安装到本地:
sudo apt-get update
sudo apt-get install nginx
(2)配置Nginx服务器
打开Nginx的 /etc/nginx/sites-available/default
文件
sudo nano /etc/nginx/sites-available/default
删除里面的所有内容并添加如下内容,需要注意upstream的名字(tomcatservers)中不能有下划线,否则会报错:
upstream tomcatservers {
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcatservers;
}
}
(3)启动Nginx服务器
执行以下命令启动Nginx服务器:
sudo systemctl start nginx
(4)测试Nginx反向代理是否配置成功
在浏览器中输入http://localhost
,分别能够看到两个Tomcat服务器的欢迎页面,证明Nginx反向代理已经成功配置。
7.至此,已经完成了在Ubuntu22.04上配置两个Tomcat服务器,并通过Nginx反向代理实现代理到两个Tomcat服务器上访问对应服务页面的步骤。
在这个配置中,Nginx服务器作为一个反向代理服务器,负责接收客户端的请求,并将请求转发给两个Tomcat服务器中的一个,根据配置的upstream
节点中定义的服务器列表进行负载均衡。客户端无需关心具体访问哪个Tomcat服务器,只需要将请求发送到Nginx服务器的IP地址或域名即可。
需要注意的是,这个配置只是一个简单的示例,实际应用中还需要考虑更多的因素,例如安全性、性能等方面的问题。
x服务器作为一个反向代理服务器,负责接收客户端的请求,并将请求转发给两个Tomcat服务器中的一个,根据配置的upstream
节点中定义的服务器列表进行负载均衡。客户端无需关心具体访问哪个Tomcat服务器,只需要将请求发送到Nginx服务器的IP地址或域名即可。
需要注意的是,这个配置只是一个简单的示例,实际应用中还需要考虑更多的因素,例如安全性、性能等方面的问题。
在安装过程中=因为对linux不太熟悉,所以碰到了很多问题,所以写下来以备日后回顾,顺便记录一下自己研究生的学习过程。
第一次写博客,大家有问题欢迎随时讨论。