Tomcat

Tomcat

是什么?

是web应用服务器

是java语言开发的(jvm“java虚拟机”)

tomcat通常作为一个servlet和jsp容器,单独运行在后端

作用:

1) 可以作为 web 应用服务器,处理静态 web 页面,如 html 页面,但性能一般 2)还可以作为 Servlet/JSP 容器,处理 java 语言开发的 jsp 动态页面应用程序,这也是 tomcat 主要的应用场景

tomcat由一系列的组件构成,核心组件有三个:

  • web容器:完成web服务器的功能

  • servlet容器:名字为Catalina,用于处理servlet代码

  • jsp容器:用于将jsp动态网页翻译成servlet代码

servlet:处理servlet代码、连接数据库

Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

jsp:在HTML网页中插入java代码、实现动态页面

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以“<%”开头,以“%>”结束。JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

image-20230905182124750

tomcat组件(两个)

  • connector(连接器)——暴露监听端口、接收客户端请求、返回响应消息给客户端

  • container(容器)——处理请求

container包含4个子容器

  • engine:引擎,用来管理多个虚拟主机,一个container最多只能有一个engine

  • host:代表一个虚拟主机

  • context:管理web应用的路径

  • wrapper:servlet封装器,负责处理业务逻辑(容器的最底层),负责对象实例的创建、执行和销毁功能

四容器属于父子关系,一个引擎管理多个主机,每个虚拟主机可用管理多个web应用,每个应用会有多个servlet封装器。

客户端请求过程:

客户端浏览器——>connector暴露的8080端口

——>container(engine)根据域名发送给对应的虚拟主机

——>host根据用户访问的URL路径

——>context根据URL路径找到对应的web应用

——>wrapper根据应用程序处理业务逻辑

image-20230905184337862

Tomcat服务部署

1.关闭防火墙

将安装 Tomcat 所需软件包传到/opt目录下 jdk-8u201-linux-x64.rpm apache-tomcat-9.0.16.tar.gz

 systemctl stop firewalld
 systemctl disable firewalld
 setenforce 0

2.安装jdk

 #/opt/下放进tar包
 [root@31yml opt]#tar xf jdk-8u91-linux-x64.tar.gz
 #/opt/下方rpm包
 [root@31yml opt]#rpm -ivh jdk-8u91-linux-x64.rpm

3.配置JDK环境变量(最左原则)

 [root@31yml opt]#vim /etc/profile.d/java.sh
 export JAVA_HOME=/opt/jdk1.8.0_91
 export JRE_HOME=$JAVA_HOME/jre
 export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
 #路径申明从左往右,旧路径还在,故新路径提前“:”是分隔符

申明变量

 source /etc/profile.d/java.sh

image-20230905192341337

 JDK java development kit (java开发工具)
 JRE java runtime environment (java运行时环境)
 JVM java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
 CLASSPATH:告诉jvm要使用或执行的class放在什么路径上,便于JVM加载class文件。
 tools.jar:是系统用来编译一个类的时候用到的,即执行javac的时候用到。
 dt.jar:dt.jar是关于运行环境的类库,主要是swing包。

测试,编写Java代码

 vim Hello.java
 public class Hello {
         public static void main(String[] args){
                 System.out.println("Hello World?!");
         }
 }

Java文件要编译成字节码文件jvm才能读取

 javac 文件.java
 [root@31yml opt]#java Hello

image-20230906151116239

安装Tomcat

 #解压tomcat的tar包
 [root@31yml opt]#tar xf apache-tomcat-9.0.16.tar.gz
 [root@31yml opt]#mv apache-tomcat-9.0.16 /usr/local/tomcat
 [root@31yml opt]#cd /usr/local/tomcat/
 [root@31yml opt]#cd bin/
 [root@31yml opt]#./startup.sh#运行启动脚本,打开tomcat

image-20230906151717014

访问192.168.177.100:8080

image-20230906151832726

4.安装启动Tomcat

启动tomcat(两种)

后台启动:
/usr/local/tomcat/bin/startup.sh#启动该脚本
/usr/local/tomcat/bin/catalina.sh start#启动
前台启动:
/usr/local/tomcat/bin/catalina.sh run#状态栏输出到当前终端
关闭服务:
/usr/local/tomcat/bin/shutdown.sh
systemd管理

启用systemd服务,编辑”.service“文件

vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
#路径、文件名修改成自己的
[Service]
Type=forking
Environment="JAVA_HOME=/opt/jdk1.8.0_91"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target

验证:可正常启动、关闭

image-20230906184228313

supervisor管理

supervisor是Python开发的c/s服务,是Linux系统下的进程管理工具。

可以监听、启动、停止、重启一个或多个进程

用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程的自动恢复的功能,不在需要自己写脚本来控制

yum install -y epel-release
yum install -y supervisor

使用yum安装的supervisor会在/etc/会生成一个supervisor.conf文件及一个supervisor.d文件目录

supervisor.conf里内容如下
[unix_http_server]
file=/var/run/supervisor.sock    ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                      ;socket文件的mode,默认是0700
chmod=0766                       
;chown=nobody:nogroup            ;socket文件的owner,格式:uid:gid
							     
;[inet_http_server]              ;HTTP服务器,提供web管理界面
;port=0.0.0.0:9001               ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user                   ;登录管理后台的用户名
;password=123                    ;登录管理后台的密码

[supervisord]
logfile=/var/log/supervisord.log    ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB               ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10                  ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                       ;日志级别,默认info,其它: debug,warn,trace
pidfile=/var/run/supervisord.pid    ;pid 文件
nodaemon=false                      ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                         ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                        ;可以打开的进程数的最小值,默认 200

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock  ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001       ;通过HTTP的方式连接supervisord

; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:tomcat]
command=/usr/local/tomcat/bin/catalina.sh run  ;程序启动命令
autostart=true          ;在supervisord启动的时候也自动启动
startsecs=10            ;启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true        ;程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3          ;启动失败自动重试次数,默认是3
user=tomcat             ;用哪个用户启动进程,默认是root
priority=999            ;进程启动优先级,默认999,值小的优先启动
redirect_stderr=true    ;把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=200MB    ;stdout 日志文件大小,默认50MB
stdout_logfile_backups=20        ;stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/var/log/supervisor/logs/catalina.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

;包含其它配置文件
[include]

files = /etc/supervisord.d/*.ini    ;可以指定一个或多个以.ini结束的配置文件

files = /etc/supervisord.d/*.conf     ;也可以写成以.conf结尾的配置文件

进程管理配置参数,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中。 supervisor.d目录用来存放用户自定义的进程配置:

vim /etc/supervisord.d/nginx.conf

[program:nginx]
command=/usr/local/nginx/sbin/nginx -g 'daemon off;'
stdout_logfile=/var/log/supervisor/logs/run.log
stderr_logfile=/var/log/supervisor/logs/error.log
autostart=true
startsecs=10
autorestart=true
startretries=1
user=nginx
priority=998
stdout_logfile_maxbytes=200MB
stdout_logfile_backups=20
stopasgroup=true
killasgroup=true
redirect_stderr=true

注:supervisor不能监控后台进程,command不能为后台运行命令

supervisor服务启动

#前面说的要自己创建目录
mkdir -p /var/log/supervisor/logs
#为了让配置生效需要创建tomcat用户
useradd -M -s /sbin/nolgin tomcat

systemctl start supervisord
systemctl enable supervisord
#另一种启动方式,择其一
supervisord -c /etc/supervisord.conf

supervisor常用命令 supervisorctl是supervisord的命令行工具

  • supervisorctl status 查看所有进程的状态

  • supervisorctl stop <name> 停止进程

  • supervisorctl start <name> 启动进程

  • supervisorctl restart <name> 重启进程

  • supervisorctl update 配置文件修改后可以使用该命令加载新的配置

  • supervisorctl reload 重新启动配置中的所有程序

supervisorctl status nginx               #nginx状态
supervisorctl stop nginx                 #停止nginx
supervisorctl start nginx                #启动nginx
supervisorctl restart nginx              #重启nginx
supervisorctl reload nginx               #重载nginx

问题

image-20230907160409407

5.优化tomcat启动速度

第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom

image-20230907161044992

image-20230907161024885

  • tomcat 启动慢的原因是随机数产生遭到阻塞,遭到阻塞的原因是 熵池大小 。

  • /dev/random:阻塞型,读取它就会产生随机数据,但该数据取决于熵池噪声,当熵池空了,对/dev/random 的读操作也将会被阻塞。

  • /dev/urandom:非阻塞的随机数产生器,它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

  • Linux内核采用熵来描述数据的随机性。熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大。在信息学中,熵被用来表征一个符号或系统的不确定性,熵越大,表明系统所含有用信息量越少,不确定度越大。计算机本身是可预测的系统,因此,用计算机算法不可能产生真正的随机数。但是机器的环境中充满了各种各样的噪声,如硬件设备发生中断的时间,用户点击鼠标的时间间隔等是完全随机的,事先无法预测。Linux内核实现的随机数产生器正是利用系统中的这些随机噪声来产生高质量随机数序列。内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上,熵池中的数据是完全随机的,可以实现产生真随机数序列。为跟踪熵池中数据的随机性,内核在将数据加入池的时候将估算数据的随机性,这个过程称作熵估算。熵估算值描述池中包含的随机数位数,其值越大表示池中数据的随机性越好。

 

 

 

 

 

 

主要目录说明

  • bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh、startup.sh、shutdown.sh

  • conf:存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml

  • lib: 存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动

  • logs: 存放 Tomcat 执行时的日志

  • temp:存放 Tomcat 运行时产生的文件

  • webapps: 存放 Tomcat 默认的 web 应用项目资源的目录

  • work: Tomcat 的工作目录,存放 jsp 编译后产生的 class 文件

image-20230907162002366

tomcat虚拟主机配置

很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机.

例如现在新增两个域名 www.kgc.comwww.benet.com,希望通过这两个域名访问到不同的项目内容。

1.创建 yml 和 benet 项目目录和文件

mkdir /usr/local/tomcat/webapps/yml
mkdir /usr/local/tomcat/webapps/benet
echo "This is yml page !" > /usr/local/tomcat/webapps/yml/index.jsp
echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp

2.修改 Tomcat 主配置文件 server.xml

在engine下配置新的host

vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.yml.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/yml" path="" reloadable="true" />
</Host>

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>
#name="wwv.kgc.com" 主机名、域名
#appBase = "webapps" 网页工作目录
#unpackWARs="true" war包是否自动展开
#autoDeploy="true" 是否自动部署
#xmlValidation="false" 是否验证xml文件的有效性
#xmlNamespaceAware="false" 是否验证xml文件的有效性

#docBase="/usr/local/tomcat/webapps/yml" 定义网页路径
#path="" 指定根路径,为空,则使用网页路径为根路径,相当于root;如果有参数,则将目标参数替换为docBase设置的网页路径,相当于alias
#reloadable="true" 是否自动重载

3.客户端浏览器访问验证

这里是纯文本没有使用html语言,所有转义符没有作用

image-20230907173708357

8080端口:负责http请求

8443端口:负责https请求,重定向

8005端口:负责关闭tomcat服务,/usr/local/tomcat/bin/shutdown.sh

8009端口:tomcat与apache连接使用的(apache软件名,httpd服务)

tomcat 多实例部署

 

1.安装 jdk

2.安装 tomcat

[root@yml-2 ~]#cd /opt/
[root@yml-2 opt]#tar xf jdk-8u91-linux-x64.tar.gz
[root@yml-2 opt]#mv jdk1.8.0_91/ /usr/local/
[root@yml-2 opt]#ls !$
ls /usr/local/
bin  etc  games  include  jdk1.8.0_91  lib  lib64  libexec  sbin  share  src
[root@yml-2 opt]#vim /etc/profile
[root@yml-2 opt]#cd /etc/profile.d/
[root@yml-2 profile.d]#vim java.sh
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source java.sh#进行刷新

image-20230907183653660

tar xf apache-tomcat-9.0.16.tar.gz
[root@yml-2 opt]#cp -a apache-tomcat-9.0.16 /usr/local/tomcat1
[root@yml-2 opt]#cp -a apache-tomcat-9.0.16 /usr/local/tomcat2

3.修改xml文件

修改 tomcat1、2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

cd /usr/local/tomcat2/conf
[root@yml-2 conf]#vim server.xml
#所有端口更改,防止tomcat1与tomcat2端口互相占用

4.添加环境变量

修改各 tomcat1、2 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

cd /usr/local/tomcat1/bin
vim startup.sh#加入下方环境变量
export CATALINA_HOME=/usr/local/tomcat1
export CATALINA_BASE=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1
vim shutdown.sh#加入下方环境变量
#tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export CATALINA_BASE=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1
cd /usr/local/tomcat2/bin
vim startup.sh#加入下方环境变量
export CATALINA_HOME=/usr/local/tomcat2
export CATALINA_BASE=/usr/local/tomcat2
export TOMCAT_HOME=/usr/local/tomcat2
vim shutdown.sh#加入下方变量
#tomcat2
export CATALINA_HOME=/usr/local/tomcat2
export CATALINA_BASE=/usr/local/tomcat2
export TOMCAT_HOME=/usr/local/tomcat2

5.启动

启动各 tomcat 中的 /bin/startup.sh

image-20230907185200209

6.验证:

网页访问两种端口

image-20230907190459779

成功。

建立多实例的原因:tomcat单进程多线程,资源利用率低,对实例搭建可提高资源利用率

Nginx+Tomcat负载均衡、动静分离

Nginx 服务器:192.168.177.103:80 Tomcat服务器1:192.168.177.100:8080 Tomcat服务器2:192.168.177.102:8080 192.168.177.102:8081

###

 

###

 

配置Tomcat 应用服务器

image-20230908000422475

配置三份动态页面.jsp

(1)Tomcat1 server 配置(192.168.177.100:8080)

mkdir /usr/local/tomcat/webapps/yml
vim /usr/local/tomcat/webapps/yml/test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP who is yml page</title>
</head>
<body>
<% out.println("动态页面 1,Blue Archive is our presents!");%>
</body>
</html>


#地址:192.168.177.100:8080/yml/test.jsp

(2)Tomcat1 server 配置(192.168.177.102:8080)

[root@yml-2 opt]#cd /usr/local/tomcat1/webapps/
[root@yml-2 webapps]#ls
docs  examples  host-manager  manager  ROOT
[root@yml-2 webapps]#mkdir yml
[root@yml-2 webapps]#cd yml/
[root@yml-2 yml]#vim test.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP who is yml page</title>
</head>
<body>
<% out.println("动态页面 2,i will play with you all day!");%>
</body>
</html>

#地址:192.168.177.102:8080/yml/test.jsp

Tomcat2 server 配置(192.168.177.102:8081)

[root@yml-2 opt]#cd /usr/local/tomcat2/webapps/
[root@yml-2 webapps]#ls
docs  examples  host-manager  manager  ROOT
[root@yml-2 webapps]#mkdir yml
[root@yml-2 webapps]#cd yml/
[root@yml-2 yml]#vim test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP who is yml page</title>
</head>
<body>
<% out.println("动态页面 3,who can give me time!");%>
</body>
</html>

#地址:192.168.177.102:8081/yml/test.jsp

测试:直接访问——成功看到

image-20230907232833312

Nginx server 配置

yum安装nginx(192.168.177.103)

[root@localhost opt]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#mkdir repo.bak
[root@localhost yum.repos.d]#mv *.repo repo.bak
[root@localhost yum.repos.d]#ls
repo.bak
[root@localhost yum.repos.d]#vim nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@localhost yum.repos.d]#yum install -y nginx
[root@localhost yum.repos.d]#vim /etc/nginx/nginx.conf
#发现剩余的配置在*.conf文件里
 31     include /etc/nginx/conf.d/*.conf;

[root@localhost yum.repos.d]#vim /etc/nginx/conf.d/default.conf
#发现location 里的配置
  7     location / {
  8         root   /usr/share/nginx/html;
  9         index  index.html index.htm;
 10     }
#/usr/share/nginx/html就是安装的根路径

在根路径下配置静态页面

cd /usr/share/nginx/html
mkdir yml/
echo '<h1>this is nginx static web page!</h1>' > ./yml/test.html

#路径:192.168.177.103/yml/test.html

image-20230907222410979

(3)Nginx server 配置

vim /usr/local/nginx/conf/nginx.conf
http{
......
upstream backend{
                server 192.168.177.100:8080 weight=1;
                server 192.168.177.102:8081 weight=1;
                server 192.168.177.102:8080 weight=1;
                #ip_hash;此设置会固定访问网页,默认使用轮询
        }
}

server {

    location ~* .*\.jsp$ {
        proxy_pass http://backend;
        #添加配置项
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来自反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
			proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IP
			proxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
/被遍历替换,最后“yml/test.jsp”因为配置,看起来没变,实际上是三份网页的设置

image-20230907232955601

 

再来一台4层反向代理负责负载均衡,(192.168.177.104)

一台7层反向代理负责动静分离,(192.168.177.105)

192.168.177.103(第一台负责动静分离的机器上)
[root@localhost html]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#scp nginx.repo 192.168.177.104:`pwd`

[root@localhost yum.repos.d]#cd /etc/nginx/
[root@localhost nginx]#scp -r conf.d/ nginx.conf  192.168.177.104:`pwd`

[root@localhost nginx]#cd /usr/share/nginx/html/
[root@localhost html]#scp -r yml/ 192.168.177.104:`pwd`
192.168.177.104(第二台负责动静分离的机器上)
[root@localhost yml]# vim /usr/share/nginx/html/yml/test.html

<h1>this is nginx static web page on the second file!</h1>
#与一号动静分离机器区分开

image-20230908002308764

部署Nginx 负载均衡器

(192.168.177.105)

systemctl stop firewalld
setenforce 0

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

useradd -M -s /sbin/nologin nginx

cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \									#启用文件修改支持
--with-http_stub_status_module \					#启用状态统计
--with-http_gzip_static_module \					#启用 gzip静态压缩
--with-http_flv_module \							#启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module	\							#启用 SSL模块,提供SSL加密功能
--with-stream										#负责反向代理需要stream模块

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_ssl_module
--with-stream

make && make install
#方便使用systemd服务
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

 

安装好之后

提醒:192.168.177.105,只做负载均衡器,

vim /usr/lcoal/nginx/conf/nginx.conf
stream{
	upstream nginx_server{
		server 192.168.177.104:80;
		server 192.168.177.103:80;
	}
	server {
		listen 80;#不要引起冲突,直接把别处的8端口号改掉
		proxy_pass nginx_server;
	}
}

cd /usr/lcoal/nginx/sbin/
./nginx -t

/usr/local/nginx/sbin/nginx#启动

vim /usr/lcoal/nginx/conf/nginx.conf
#keepalive_timeout num;
keepalive_timeout 0;

/usr/local/nginx/sbin/nginx -s reload

分离一、二机也关闭长连接

vim /etc/nginx/nginx.conf
#keepalive_timeout num;
keepalive_timeout 0;
#别忘了重启
/usr/local/nginx/sbin/nginx -s reload

验证

轮询发现都能访问,恭喜你,我的朋友

image-20230908011555456

 
posted @   Bacolate  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示