Linux安装Nginx反向代理,负载均衡Tomcat(轮询)+shell脚本安装(底部)

  • A+
所属分类:Nginx

Tomcat是一个流行的开源Servlet容器,适用于Java Web应用,特别适合中小型企业和开发环境。它处理客户端请求,管理Servlet生命周期,支持JSP。组件包括Catalina、Coyote、Jasper、Naming、Security和Cluster。适用于开发和中小型生产环境,跨平台,社区支持活跃。安装简便,配置通过XML文件,提供安全特性。

主机应用软件
Nginxnginx-1.26.2.tar.gz
Tomcat1jdk-8u202-linux-x64.tar.gz+apache-tomcat-9.0.102.tar.gz
tomcat2jdk-8u202-linux-x64.tar.gz+apache-tomcat-9.0.102.tar.gz

Tomcat1,Tomcat2安装Tomcat服务

wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz        //下载jdk
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz           
     //下载Tocmat
tar xf jdk-8u202-linux-x64.tar.gz -C /usr/local/        //解压jdk
ln -s /usr/local/jdk1.8.0_202/ /usr/local/jdk

设置jdk环境变量

vim /etc/profile.d/jdk.sh
# Java JDK
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
source /etc/profile        //重新加载环境变量
java -version
Linux安装Nginx反向代理,负载均衡Tomcat(轮询)+shell脚本安装(底部)

部署Tomcat

useradd -s /sbin/nologin tomcat        //创建tomcat用户
tar xf apache-tomcat-9.0.102.tar.gz -C /usr/local/        //解压tomcat
ln -s /usr/local/apache-tomcat-9.0.102/ /usr/local/tomcat
chown -R tomcat:tomcat /usr/local/tomcat/*

配置开机自启文件

vim /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/usr/local/apache-tomcat-9.0.102
Environment=CATALINA_BASE=/usr/local/apache-tomcat-9.0.102
Environment=CATALINA_PID=/usr/local/apache-tomcat-9.0.102/temp/tomcat.pid

ExecStart=/usr/local/apache-tomcat-9.0.102/bin/startup.sh
ExecStop=/usr/local/apache-tomcat-9.0.102/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

重新加载 systemd 管理器的主配置文件并启动

systemctl daemon-reload
systemctl start tomcat.service
systemctl enable tomcat.service
Tomcat优化
rm -rf /usr/local/tomcat/webapps/*        //删除多余工程项目
mkdir -pv /usr/local/tomcat/webapps/www
vim /usr/local/tomcat/webapps/www/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>java web page</title>
    </head>
    <body>
        <% out.println("Welcome to Tomcat1 test page.");%>        //第二台tomcat服务器改为Tomcat2用于验证
    </body>
</html>

Nginx安装

curl -O https://nginx.org/download/nginx-1.26.2.tar.gz        //下载nginx
yum -y install pcre-devel openssl-devel        //安装依赖
useradd -s /sbin/nologin -M nginx        //创建nginx用户
tar xf nginx-1.26.2.tar.gz        //解压
cd nginx-1.26.2/
./configure --prefix=/usr/local/nginx-1.26.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-stream        //配置
make && make install        编译安装
ln -s /usr/local/nginx-1.26.2/ /usr/local/nginx
chown -R nginx:nginx /usr/local/nginx*

配置开机自启文件

vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
#PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重新加载 systemd 管理器的主配置文件并启动

systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service

编写nginx.conf

# 设置运行 Nginx 工作进程的用户和用户组
user nginx nginx;

# 设置工作进程的数量,auto 表示根据 CPU 核心数自动调整
worker_processes auto;

# 设置 Nginx 的错误日志文件路径
error_log /usr/local/nginx/logs/error.log;

# 设置 Nginx 主进程的 PID 文件路径
pid /run/nginx.pid;

# 事件区块,用于配置工作进程连接的特性
events {
    # 每个工作进程可以同时打开的最大连接数
    worker_connections 1024;
}

# HTTP 服务器区块
http {
    # 包含 MIME 类型定义文件
    include mime.types;
    # 默认 MIME 类型
    default_type application/octet-stream;

    # 定义日志格式
    log_format tomcat 'remote_addr - remote_user [time_local] "request" '
                     'status body_bytes_sent "http_referer" '
                     '"http_user_agent" "http_x_forwarded_for"';

    # 设置访问日志文件路径
    access_log /usr/local/nginx/www_tomcat_com_access.log tomcat;

    # 启用 sendfile 传输文件
    sendfile on;
    #tcp_nopush on; # 启用 TCP_NOPUSH 功能,需要 sendfile 开启

    # 保持连接的超时时间
    keepalive_timeout 60;

    # 负载均衡配置,定义 Tomcat 服务器集群
    upstream tomcatservers {
        server 192.168.18.11:8080 max_fails=3 fail_timeout=30s; # Tomcat 服务器 1        //改为自己的Tomcat服务器IP
        server 192.168.18.12:8080 max_fails=3 fail_timeout=30s; # Tomcat 服务器 2        //改为自己的Tomcat服务器IP
        # 可以继续添加更多服务器
    }

    # 服务器区块,定义虚拟主机的配置
    server {
        # 监听 80 端口
        listen 80;
        # 服务器名称
        server_name localhost;

        # 反向代理设置,匹配所有请求
        location / {
            # 将请求代理到定义的 Tomcat 服务器集群
            proxy_pass http://tomcatservers;
            # 设置代理请求头,传递原始请求信息
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # 自定义错误页面
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            # 指定错误页面的根目录
            root /usr/share/nginx/html;
        }
    }

    # 其他服务器配置可以在此添加
}
/usr/local/nginx/sbin/nginx -t        //检查配置文件
systemctl reload nginx.service        //重载

服务验证

Linux安装Nginx反向代理,负载均衡Tomcat(轮询)+shell脚本安装(底部)

两台Tomcat服务器执行shell脚本

vim tomcat.sh
#!/bin/sh
/usr/bin/wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz
/usr/bin/wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
tar zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/
/usr/bin/tar zvxf apache-tomcat-9.0.102.tar.gz -C /usr/local/
/usr/bin/ln -s /usr/local/jdk1.8.0_202/ /usr/local/jdk
/usr/bin/cat > /etc/profile.d/jdk.sh << "EOF"
# Java JDK
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
EOF
source /etc/profile
java -version
/usr/sbin/useradd -s /sbin/nologin tomcat
/usr/bin/ln -s /usr/local/apache-tomcat-9.0.102/ /usr/local/tomcat
/usr/bin/chown -R tomcat:tomcat /usr/local/tomcat/*
/usr/bin/rm -rf /usr/local/tomcat/webapps/*
/usr/bin/mkdir -pv /usr/local/tomcat/webapps/www/
/usr/bin/cat > /usr/local/tomcat/webapps/www/index.jsp << EOF
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>java web page</title>
    </head>
    <body>
        <% out.println("Welcome to Tomcat test page.");%>
    </body>
</html>
EOF
/usr/bin/cat > /etc/systemd/system/tomcat.service << EOF
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/usr/local/apache-tomcat-9.0.102
Environment=CATALINA_BASE=/usr/local/apache-tomcat-9.0.102
Environment=CATALINA_PID=/usr/local/apache-tomcat-9.0.102/temp/tomcat.pid

ExecStart=/usr/local/apache-tomcat-9.0.102/bin/startup.sh
ExecStop=/usr/local/apache-tomcat-9.0.102/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
EOF
/usr/bin/systemctl daemon-reload
/usr/bin/systemctl enable --now tomcat.service
sh tomcat.sh

Nginx服务器执行shell脚本

vim nginx.sh
curl -O https://nginx.org/download/nginx-1.26.2.tar.gz
yum -y install pcre-devel openssl-devel
/usr/sbin/useradd -s /sbin/nologin -M nginx
/usr/bin/tar zxvf nginx-1.26.2.tar.gz
cd nginx-1.26.2/
./configure --prefix=/usr/local/nginx-1.26.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-stream
/usr/bin/make
/usr/bin/make install
/usr/bin/ln -s /usr/local/nginx-1.26.2/ /usr/local/nginx
/usr/bin/cat > /usr/local/nginx/conf/nginx.conf << "EOF"
user nginx nginx;
worker_processes auto;
error_log /usr/local/nginx/logs/error.log;
pid /run/nginx.pid;
events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;
    log_format tomcat 'remote_addr - remote_user [time_local] "request" '
                     'status body_bytes_sent "http_referer" '
                     '"http_user_agent" "http_x_forwarded_for"';
    
    access_log /usr/local/nginx/www_tomcat_com_access.log tomcat;
    sendfile on;
    keepalive_timeout 60;
    upstream tomcatservers {
        server 192.168.18.11:8080 max_fails=3 fail_timeout=30s;        //修改为自己tomcat1服务器的IP
        server 192.168.18.12:8080 max_fails=3 fail_timeout=30s;        //修改为自己tomcat2服务器的IP
    }
    server {
        listen 80;
        server_name localhost;
        location / {
            proxy_pass http://tomcatservers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }
}
EOF
/usr/bin/chown -R nginx:nginx /usr/local/nginx*
/usr/bin/cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
#PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
/usr/bin/systemctl daemon-reload
/usr/bin/systemctl enable --now nginx.service
sh nginx.sh
xxx

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: