Rocky Linux-rpm-yum-进程管理-nginx -day3

rpm包概述

  • RPM Package Manager,RPM包管理器

  • 由红帽公司提出,适用于Rocky Linux、Redhat、SUSE等系列操作系统

  • 建立集中数据库,记录软件包安装/卸载等变化信息,分析软件包依赖关系

  • RPM包 文件名特征

    • 软件名-版本信息.操作系统.硬件架/构.rpm
    • bash-4.2.46-30.el7.x86_64.rpm
    • 操作系统:e代表企业版,l代表linux

yum仓库简介

  • YUM——Yellowdog Updater Modified,是Red Hat及其衍生版本(如CentOS、Fedora等)中使用的一个自动化软件包管理工具。它极大地简化了Linux系统上的软件安装、更新、查询和删除等操作,使得用户无需手动处理复杂的依赖关系。

  • Yum软件包管理:用于为客户端自动检查依赖关系并自动解决依赖关系(安装软件包)

  • Yum服务端可通过ftp://、http://、file://协议传递软件包

  • 客户端配置文件要求:

    • 客户端配置文件必须存放在:/etc/yum.repos.d/
    • 客户端文件必须以.repo结尾
    • /etc/yum.repos.d/下边的文件必须同时可用
      在这里插入图片描述

实验

  • 本实验在虚拟机A完成

构建服务端

  • 虚拟机A操作,确保下方红色区域两个选项都有勾选
    在这里插入图片描述
    虚拟机A操作
[root@javasv-A ~]# mkdir  /mydvd							#创建挂载点
[root@javasv-A ~]# vim /etc/fstab							#编写挂载文件
...此处省略一万字,在最后一行追加下方内容,注意空格...
/dev/cdrom    /mydvd     iso9660     defaults    0    0
[root@javasv-A ~]# mount -a									#刷新文件

构建客户端

虚拟机A操作

[root@javasv-A ~]# mkdir /etc/yum.repos.d/bak/
[root@javasv-A ~]# mv /etc/yum.repos.d/*.repo  /etc/yum.repos.d/bak		#备份,*代表通配符
[root@javasv-A ~]# vim  /etc/yum.repos.d/mydvd.repo
[AppStream]									#指定源名称
name=AppStream								#指定源描述信息
baseurl=file:///mydvd/AppStream/			#指定仓库地址
enabled=1									#启用该仓库
gpgcheck=0									#不做签名认证

[BaseOS]									#指定源名称
name=BaseOS									#指定源描述信息
baseurl=file:///mydvd/BaseOS/				#指定仓库地址
enabled=1									#启用该仓库
gpgcheck=0									#不做签名认证

Yum仓库使用

  • 清空缓存:dnf clean all
  • 查看仓库状态:dnf repolist -v
  • 安装软件包:dnf -y install 软件名
  • 卸载软件包:dnf remove 软件名
[root@javasv-A ~]# dnf clean all			#清空缓存
[root@javasv-A ~]# dnf repolist -v			#查看目前仓库状态

在虚拟机A安装软件测试yum客户端配置是否成功

[root@javasv-A ~]# dnf -y install vsftpd		#安装vsftpd软件
[root@javasv-A ~]# dnf -y install bind-chroot	#安装bind-chroot软件
[root@javasv-A ~]# rpm -q vsftpd				#查看是否成功安装vfstpd
[root@javasv-A ~]# rpm -q bind-chroot			#查看是否成功安装bind-chroot

卸载vsftpd和bind-chroot

[root@javasv-A ~]# dnf remove vsftpd			#卸载vsftpd	
...此处省略一万字...
确定吗?[y/N]:y

[root@javasv-A ~]# dnf remove bind-chroot		#卸载bind-chroot
...此处省略一万字...
确定吗?[y/N]:y

进程管理

  • 程序:存放在磁盘中的静态代码
  • 进程:活跃在内存和CPU中的动态指令
  • 父/子进程:进程可以创建一个或多个子进程

查看进程树

  • pstree — Processes Tree
  • 格式:pstree [选项] [PID或用户名]
    • -a: 显示完整的命令行
    • -p: 列出对应PID编号
  • systemd:所有进程的父进程 (上帝进程)
[root@javasv-A ~]# pstree						#查看进程树
[root@javasv-A ~]# pstree -u lisi				#查看用户lisi的进程树

另开一个终端

[root@javasv-A ~]# su - lisi 					#切换到用户lisi
[lisi@javasv-A ~]$ vim a.txt					#使用用户lisi编辑a.txt文件,不要退出

回到之前的终端

[root@javasv-A ~]# pstree -u lisi				#查看lisi用户的进程树
bash───vim
[root@javasv-A ~]# pstree -pu lisi				#查看lisi用户的进程数和进程的PID
bash(2959)───vim(3002)
[root@javasv-A ~]# pstree -apu lisi				#查看lisi用户的进程数和进程的PID及完整命令
bash,2959
  └─vim,3002 a.txt

查看进程

  • ps aux 操作:信息非常全面详细,列出正在运行的所有进程
    • a:显示当前终端所有进程
    • u:以用户格式输出
    • x:当前用户在所有终端下的进程
  • ps -elf 操作:信息中有该进程的父进程信息列出正在运行的所有进程
    • -e:显示系统内所有进程
    • -l:以长格式输出信息,包括最完整的进程信息
[root@javasv-A ~]# ps aux
USER  PID       %CPU %MEM    VSZ        RSS    TTY   STAT     START   TIME COMMAND
用户  进程ID     %cpu %内存   虚拟内存   固定内存   终端   状态    起始时间 cpu时间 程序指令
[root@javasv-A ~]# ps -elf     					#会有一个PPID,PPID:代表父进程的PID
[root@javasv-A ~]# ps -elf | wc -l          	#统计正在运行的进程有多少

进程动态排名

  • top 交互式工具,默认3秒刷新一次
  • 格式:top [-d 刷新秒数][-U 用户名]
[root@javasv-A ~]# top          				#查看进程,默认每隔3秒刷新一次
[root@javasv-A ~]# top -d 1 					#每隔1秒刷新一次
按大写P,根据CPU使用进行排序,CPU占用最高的排首位(降序)
按大写M,根据内存使用进行排序,内存占用最高的排首位(降序)

Top命令参数详解:https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html

查看CPU负载

  • 可以通过uptime命令来非交互式查看CPU平均负载等信息
[root@javasv-A ~]# uptime					#查看CPU平均负载等信息

杀死进程

  • 干掉进程的不同方法
    • Ctrl+c 组合键:中断当前命令程序
    • kill [-9] PID:杀死后台进程(-9强制杀死)
    • killall [-9] 进程名:杀死后台进程
    • pkill 查找条件 :一般用于强制踢出一个用户
[root@javasv-A ~]# sleep 1000 &
[1] 21406
[root@javasv-A ~]# sleep 2000 &
[2] 21407
[root@javasv-A ~]# sleep 3000 &
[3] 21408
[root@javasv-A ~]# jobs -l              		#-l显示进程的pid
[root@javasv-A ~]# kill -9 21406        		#强制杀死pid为21406的进程
[root@javasv-A ~]# killall  -9 sleep           	#强制杀死所有sleep进程
[3]+  已终止               sleep 3000
[root@javasv-A ~]# jobs -l						#查看后台进程列表

杀死一个用户的开启的所有进程(强制踢出一个用户)

[root@javasv-A ~]# pkill  -9 -u lisi			#强制提出lisi用户

ss命令

  • ss(socket statistics)命令是一个用于查看系统套接字统计信息的工具;ss可以用来获取有关套接字的各种详细信息,如正在使用的套接字、它们的状态、连接信息、服务状态等。
  • -n:以数字的形式显示
  • -t:查看使用tcp协议的信息
  • -u:查看使用udp协议的信息
  • -l:查看listen监听状态的信息学
  • -p:查看进程名
[root@javasv-A ~]# ss -nutlp | grep :22			#查看是否有22端口
[root@javasv-A ~]# ss -nutlp | grep :80			#查看是否有80端口

systemctl命令

  • systemctl是Linux系统中常用的服务管理工具,可以用于启动、停止、重启、查看服务状态等操作。
  • firewalld是RockyLinux内置的防火墙服务,本实验采用firewalld服务练习
  • 最终需要关闭防火墙并设置为开机不自启。
[root@javasv-A ~]# systemctl status firewalld		#查看firewalld服务状态
[root@javasv-A ~]# systemctl start firewalld		#启动firewalld服务
[root@javasv-A ~]# systemctl restart firewalld		#重启firewalld服务
[root@javasv-A ~]# systemctl stop	firewalld		#停止firewalld服务
[root@javasv-A ~]# systemctl enable firewalld		#将firewalld服务设置为开机自启动
[root@javasv-A ~]# systemctl disable firewalld		#将firewalld服务设置为开机不自启动
[root@javasv-A ~]# systemctl is-enabled firewalld	#查看firewalld服务是否为开机自启动

SELinux

  • SELinux(Security-Enhanced Linux)是一个安全性增强型的Linux操作系统,它是基于MILS(多级安全)架构的一种强制访问控制机制。通过将SELinux应用到内核模块和文件系统中,可以实现对系统和应用程序的安全保护。
  • SELinux有三种模式:enforcing、permissive和disabled。
  • Enforcing模式
    • 在Enforcing模式下,SELinux强制对系统资源和应用程序进行安全保护,禁止未经授权的访问和操作。如果出现违规行为,SELinux会自动记录并且防止该行为进行。Enforcing模式是SELinux的默认模式。
  • Permissive模式
    • 在Permissive模式下,SELinux只是记录违规行为并不会拦截。其目的是观察应用程序如何与SELinux互动并了解SELinux规则如何影响应用程序。Permissive模式的作用在于不中断系统程序的正常工作,同时记录下可能违规行为,以提高系统的安全性。
  • Disabled模式
    • 在Disabled模式下,SELinux不进行任何操作,应用程序和系统资源可以自由访问和操作。在需要暂时关闭SELinux时可以使用Disabled模式。
[root@javasv-A ~]# vim /etc/selinux/config					#修改文件,修改SElinux状态
  1 
  2 # This file controls the state of SELinux on the system.
  3 # SELINUX= can take one of these three values:
  4 #     enforcing - SELinux security policy is enforced.
  5 #     permissive - SELinux prints warnings instead of enforcing.
  6 #     disabled - No SELinux policy is loaded.
  7 SELINUX=disabled										#将第7行=后边修改为disabled
...
[root@javasv-A ~]# reboot									#重启
[root@javasv-A ~]# getenforce								#查看SElinux状态为disabled

环境配置

  • 虚拟机A防火墙关闭且设置为开机不自动启动,将SElinux永久设置为Disabled(否则影响后续实验)
  • 虚拟机B防火墙关闭且设置为开机不自动启动,将SElinux永久设置为Disabled(否则影响后续实验)

虚拟机A操作

[root@javasv-A ~]# systemctl stop firewalld					#停止防火墙服务
[root@javasv-A ~]# systemctl disable firewalld				#将防火墙服务设置为开机不自启动
[root@javasv-A ~]# vim /etc/selinux/config					#修改文件,修改SElinux状态
  1 
  2 # This file controls the state of SELinux on the system.
  3 # SELINUX= can take one of these three values:
  4 #     enforcing - SELinux security policy is enforced.
  5 #     permissive - SELinux prints warnings instead of enforcing.
  6 #     disabled - No SELinux policy is loaded.
  7 SELINUX=disabled										#将第7行=后边修改为disabled
...
[root@javasv-A ~]# reboot									#重启
[root@javasv-A ~]# getenforce								#查看SElinux状态为disabled

虚拟机B操作

[root@javasv-B ~]# systemctl stop firewalld					#停止防火墙服务
[root@javasv-B ~]# systemctl disable firewalld				#将防火墙服务设置为开机不自启动
[root@javasv-B ~]# vim /etc/selinux/config					#修改文件,修改SElinux状态
  1 
  2 # This file controls the state of SELinux on the system.
  3 # SELINUX= can take one of these three values:
  4 #     enforcing - SELinux security policy is enforced.
  5 #     permissive - SELinux prints warnings instead of enforcing.
  6 #     disabled - No SELinux policy is loaded.
  7 SELINUX=disabled										#将第7行=后边修改为disabled
...
[root@javasv-B ~]# reboot									#重启
[root@javasv-B ~]# getenforce								#查看SElinux状态为disabled

制作模板机

  • RockyLinux8.6使用安装完成的快照还原,开机,将主机名修改为template
  • 将防火墙关闭且设置为开机不自动启动,将SElinux永久设置为Disabled(后续作为模板机克隆其他虚拟机)
  • RockyLinux8.6再次以当前状态拍摄快照"模板机"
  • 为模板机配置本地yum仓库

RockyLinux8.6操作
在这里插入图片描述
虚拟机RockyLinux8.6操作

[root@localhost ~]# hostnamectl set-hostname template		#修改主机名(重新打开终端生效)
[root@template ~]# systemctl stop firewalld					#停止防火墙服务
[root@template ~]# systemctl disable firewalld				#将防火墙服务设置为开机不自启动
[root@template ~]# vim /etc/selinux/config					#修改文件,修改SElinux状态
  1 
  2 # This file controls the state of SELinux on the system.
  3 # SELINUX= can take one of these three values:
  4 #     enforcing - SELinux security policy is enforced.
  5 #     permissive - SELinux prints warnings instead of enforcing.
  6 #     disabled - No SELinux policy is loaded.
  7 SELINUX=disabled										#将第7行=后边修改为disabled
...
[root@template ~]# reboot									#重启
[root@template ~]# getenforce								#查看SElinux状态为disabled
[root@template ~]# poweroff									#关机即可

配置本地yum仓库

[root@template ~]# mkdir  /mydvd							#创建挂载点
[root@template ~]# vim /etc/fstab							#编写挂载文件
...此处省略一万字,在最后一行追加下方内容,注意空格...
/dev/cdrom    /mydvd     iso9660     defaults    0    0
[root@template ~]# mount -a									#刷新文件
[root@template ~]# mkdir /etc/yum.repos.d/bak/
[root@template ~]# mv /etc/yum.repos.d/*.repo  /etc/yum.repos.d/bak		#备份,*代表通配符
[root@template ~]# vim  /etc/yum.repos.d/mydvd.repo
[AppStream]									#指定源名称
name=AppStream								#指定源描述信息
baseurl=file:///mydvd/AppStream/			#指定仓库地址
enabled=1									#启用该仓库
gpgcheck=0									#不做签名认证

[BaseOS]									#指定源名称
name=BaseOS									#指定源描述信息
baseurl=file:///mydvd/BaseOS/				#指定仓库地址
enabled=1									#启用该仓库
gpgcheck=0									#不做签名认证

NGINX简介

  • Nginx(engine x)
  • 是俄罗斯人编写的十分轻量级的HTTP服务器
  • 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器
  • 官方网站:http://nginx.org/

NGINX概述

  • Nginx默认配置文件:/etc/nginx/nginx.conf
  • Nginx调用配置文件:/etc/nginx/conf.d/*.conf
  • Nginx默认使用端口:80
    在这里插入图片描述

实验架构

发送请求
真机客户端
A虚拟机NGINX服务器

安装Nginx

虚拟机A操作

[root@javasv-A ~]# dnf -y install nginx					#安装nginx服务
[root@javasv-A ~]# rpm -q nginx 						#查看是否安装成功

Nginx配置文件解析

[root@javasv-A ~]# cat /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;									#worker进程归属用户
worker_processes auto;						#启动工作进程数量(通常与CPU核心数一致)
error_log /var/log/nginx/error.log;			#错误日志
pid /run/nginx.pid;							#pid文件位置

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;	#引入动态模块相关配置

#事件模型相关配置
events {
    worker_connections 1024;				#单个worker进程可接受的最大并发量
}

#web服务块
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';		#日志格式

    access_log  /var/log/nginx/access.log  main;	#访问日志
	
    sendfile            on;							#加快静态文件传输
    tcp_nopush          on;							#合并请求后统一发送给客户端
    tcp_nodelay         on;							#不延时发送
    keepalive_timeout   65;							#会话保持事件
    types_hash_max_size 2048;						#哈希表大小

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;				#子配置文件路径

	#虚拟主机块
    server {
        listen       80 default_server;				#监听ipv4端口
        listen       [::]:80 default_server;		#监听ipv6端口
        server_name  _;								#虚拟主机名
        root         /usr/share/nginx/html;			#网站根目录

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {								#匹配路径
        }

        error_page 404 /404.html;					#错误页面
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;		#错误页面
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

Nginx服务测试

[root@javasv-A ~]# systemctl start nginx 				#启动nginx服务
[root@javasv-A ~]# systemctl enable nginx				#将nginx服务设置为开机自启
[root@javasv-A ~]# ss -nutlp | grep :80					#查看80端口

打开浏览器访问:http://192.168.8.100
在这里插入图片描述

Nginx虚拟web主机

  • 虚拟主机:一个Nginx服务上运行多个网站
  • 类型:
    • 基于域名的虚拟主机
    • 基于端口的虚拟主机
    • 基于IP地址的虚拟主机
##部署基于域名的虚拟主机

#编写虚拟主机配置文件(采用子配置文件的方式)
[root@javasv-A ~]# vim /etc/nginx/conf.d/site1.conf
[root@javasv-A ~]# cat /etc/nginx/conf.d/site1.conf 
server {
    listen 80;
    server_name site1.tedu.cn;

    location / {
        root "/usr/share/nginx/html/site1/";
        index index.html index.htm;
    }
}
[root@javasv-A ~]# vim /etc/nginx/conf.d/site2.conf
[root@javasv-A ~]# cat /etc/nginx/conf.d/site2.conf 
server {
    listen 80;
    server_name site2.tedu.cn;

    location / {
        root "/usr/share/nginx/html/site2/";
        index index.html index.htm;
    }
}
[root@javasv-A ~]# 

#创建虚拟主机网站根目录及测试页面
[root@javasv-A ~]# mkdir /usr/share/nginx/html/site1
[root@javasv-A ~]# mkdir /usr/share/nginx/html/site2
[root@javasv-A ~]# vim /usr/share/nginx/html/site1/index.html
[root@javasv-A ~]# vim /usr/share/nginx/html/site2/index.html
[root@javasv-A ~]# cat /usr/share/nginx/html/site1/index.html 
site1
[root@javasv-A ~]# cat /usr/share/nginx/html/site2/index.html 
site2
[root@javasv-A ~]# 

#重启服务
[root@javasv-A ~]# systemctl restart nginx

#修改hosts文件并访问测试
[root@javasv-A ~]# vim /etc/hosts
[root@javasv-A ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1   site1.tedu.cn site2.tedu.cn
[root@javasv-A ~]# curl http://site1.tedu.cn/
site1
[root@javasv-A ~]# curl http://site2.tedu.cn/
site2
[root@javasv-A ~]# 

#清理测试配置
[root@javasv-A ~]# rm -rf /etc/nginx/conf.d/site1.conf /etc/nginx/conf.d/site2.conf 
[root@javasv-A ~]# rm -rf /usr/share/nginx/html/site1/
[root@javasv-A ~]# rm -rf /usr/share/nginx/html/site2/
[root@javasv-A ~]# systemctl restart nginx

Nginx动静分离

什么是动静分离

  • 动静分离是一种常见的架构设计模式
    • 用于将处理静态内容和动态内容的工作分开
    • 以提高网站性能和可伸缩性

Nginx动静分离

  • 动静分离的主要思想是让 Nginx 专注于处理静态内容(如 HTML、CSS、JavaScript、图片等)
  • 而将动态内容(如 PHP、JSP、ASP.NET 等)交给后端应用服务器(如 Apache、Tomcat、IIS 等)来处理

Nginx动静分离处理方法

  • 静态资源由 Nginx 直接处理:
    • Nginx 作为前端服务器直接处理静态内容的请求,例如 HTML、CSS、JavaScript 文件和图片等
    • 由于 Nginx 是轻量级的高性能 Web 服务器,它能够快速地响应对这些静态资源的请求
  • 动态内容交由后端应用服务器处理:
    • 对于动态内容的请求,比如 PHP、JSP、ASP.NET 等页面,Nginx 通过反向代理将这部分请求转发给后端的应用服务器处理
    • 后端应用服务器负责执行动态内容的逻辑,并将结果返回给 Nginx,再由 Nginx 返回给客户端
  • 负载均衡:
    • 如果有多个后端应用服务器,Nginx 可以作为负载均衡器,将动态请求分发到不同的后端服务器上
    • 以提高整体的并发处理能力和可靠性
静态资源请求
静态资源响应
动态资源请求
动态资源请求
动态资源响应
动态资源响应
数据库请求
数据库响应
客户端
Nginx服务器
动态资源服务器
数据库服务器

Nginx动静分离测试

安装java环境: java-1.8.0-openjdk

[root@javasv-A ~]# dnf -y install java-1.8.0-openjdk			#安装jdk
[root@javasv-A ~]# java -version								#查看版本

部署jsp测试页面

[root@javasv-A ~]# vim /usr/share/nginx/html/time.jsp 
<html>
    <head>
        <meta charset='utf-8'>
    </head>
    <body>
        <center>
            Now time is: <%=new java.util.Date()%> <!--通过基类调用系统时间-->
        </center>
    </body>
</html>
[root@javasv-A ~]#
#访问测试,结果为curl返回页面源代码,浏览器访问直接下载页面
[root@javasv-A ~]# curl http://localhost/time.jsp
<html>
    <head>
        <meta charset='utf-8'>
    </head>
    <body>
        <center>
            Now time is: <%=new java.util.Date()%> <!--通过基类调用系统时间-->
        </center>
    </body>
</html>[root@javasv-A ~]# 

部署Java应用Tomcat

  • 2024-AI大模型Java全链路工程师环境资料/第四模块/apache-tomcat-9.0.6.tar.gz上传至虚拟机A的/root
  • 使用WindTerm的上传/下载功能,需要提前在虚拟机中安装lrzsz软件
[root@javasv-A ~]# dnf -y install lrzsz

安装tomcat服务

[root@javasv-A ~]# tar -xf apache-tomcat-9.0.6.tar.gz 				#解压缩tomcat源码
[root@javasv-A ~]# mv apache-tomcat-9.0.6 /usr/local/tomcat			#移动安装目录并改名

停止/启动服务(最后将服务启动)

[root@javasv-A ~]# /usr/local/tomcat/bin/startup.sh			#启动服务
[root@javasv-A ~]# /usr/local/tomcat/bin/shutdown.sh		#停止服务
[root@javasv-A ~]# /usr/local/tomcat/bin/startup.sh			#启动服务
[root@javasv-A ~]# ss -nutlp | grep java					#查看端口(8080、8005、8009)

部署jsp页面至tomcat服务

[root@javasv-A ~]# cp /usr/share/nginx/html/time.jsp /usr/local/tomcat/webapps/ROOT/
[root@javasv-A ~]# curl http://192.168.8.100:8080/time.jsp	#访问测试
<html>
    <head>
        <meta charset='utf-8'>
    </head>
    <body>
        <center>
            Now time is: Mon May 06 18:34:54 CST 2024 <!--通过基类调用系统时间-->
        </center>
    </body>
</html>
[root@javasv-A ~]# 

配置Nginx动静分离

[root@javasv-A ~]# vim /etc/nginx/nginx.conf
...原有配置不动...
 50         location ~ \.jsp$ {
 51             proxy_pass http://127.0.0.1:8080;   
 52         } 
...原有配置不动

#重启nginx服务并测试
[root@javasv-A ~]# systemctl restart nginx
[root@javasv-A ~]# curl http://192.168.8.100/time.jsp		#访问测试
<html>
    <head>
        <meta charset='utf-8'>
    </head>
    <body>
        <center>
            Now time is: Mon May 06 19:37:09 CST 2024 <!--通过基类调用系统时间-->
        </center>
    </body>
</html>

Nginx代理服务

  • 代理服务是一种网络服务,允许客户端通过中间服务器(即代理服务器)与目标服务器进行通信。代理服务器接收来自客户端的请求,然后将这些请求转发给目标服务器,再将目标服务器的响应返回给客户端。
  • Nginx作为代理服务器的优势
    • 高性能:Nginx采用了异步非阻塞的事件驱动模型,能够处理大量的并发连接和请求,具有出色的性能和可扩展性。
    • 稳定性:Nginx经过严格的测试和优化,具有极高的稳定性和可靠性,能够在各种复杂的网络环境中稳定运行。
    • 易用性:Nginx的配置文件简洁明了,易于学习和使用。同时,Nginx提供了丰富的模块和指令,可以满足各种复杂的代理需求。
    • 灵活性:Nginx可以作为正向代理服务器、反向代理服务器或负载均衡器使用,支持多种协议和扩展模块,具有极高的灵活性。

实验架构

在这里插入图片描述

主机名IP地址配额角色
proxyens160: 192.168.4.50|ens192: 192.168.8.501G内存1CPU代理服务器
javasv-Aens160: 192.168.8.1001G内存1CPUweb服务器
javasv-Bens160: 192.168.8.1011G内存1CPUweb服务器
windowsvmnet1: 192.168.4.254客户端
  • 使用模板机重新克隆虚拟机B、虚拟机proxy
  • 克隆后的机器是有配置好的yum仓库以及关闭了防火墙和SElinux
  • 配置完毕后使用WindTerm将虚拟机远程连接

虚拟机A操作(做过此配置,无需重复操作,注意网卡名不要照抄,以自己的为准)

[root@javasv-A ~]# nmcli connection show					#查看网卡名

#配置入网参数
 ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.100/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes
[root@javasv-A ~]# nmcli connection up  ens160				#激活网卡
[root@javasv-A ~]# dnf clean all
[root@javasv-A ~]# dnf repolist -v							#查看yum仓库是否可用

虚拟机B操作(注意网卡名不要照抄,以自己的为准)

[root@template ~]# hostnamectl set-hostname java-sv-B		修改主机名
[root@javasv-B ~]# nmcli connection show					#查看网卡名

#配置入网参数
 ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.101/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes
[root@javasv-B ~]# nmcli connection up  ens160				#激活网卡
[root@javasv-B ~]# dnf clean all
[root@javasv-B ~]# dnf repolist -v							#查看yum仓库是否可用

配置虚拟机proxy,添加一块网卡
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Windows将虚拟网卡vmnet1的IP地址配置为:192.168.4.254/24
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@template ~]# hostnamectl set-hostname proxy			#修改主机名
[root@proxy ~]# nmcli connection show					#查看网卡连接名
[root@proxy ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.4.50/24 connection.autoconnect yes				 #配置IP地址
[root@proxy ~]# nmcli connection up ens160				#激活网卡

添加第二块网卡

[root@proxy ~]# nmcli device status 					#查看网卡设备(以查看到的为准)
DEVICE  TYPE      STATE         CONNECTION 
ens160  ethernet  已连接        ens160     
virbr0  bridge    连接(外部)  virbr0     
ens192  ethernet  已断开        --         
lo      loopback  未托管        --  
[root@proxy ~]# nmcli connection add ifname ens192 con-name ens192 type ethernet
[root@proxy ~]# nmcli connection modify ens192 ipv4.method manual ipv4.addresses 192.168.8.50/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes								#配置入网参数
[root@proxy ~]# nmcli connection up ens192 				 #激活网卡

部署后端web服务器集群

  • 配置后端web服务器,部署Nginx服务,编写测试页面

虚拟机A操作

[root@javasv-A ~]# dnf -y install nginx								#安装nginx
[root@javasv-A ~]# echo AAA > /usr/share/nginx/html/index.html		#编写测试页面
[root@javasv-A ~]# systemctl restart nginx 							#重启nginx服务
[root@javasv-A ~]# systemctl enable nginx							#将服务设置为开机自启
[root@javasv-A ~]# ss -nutlp | grep :80								#查看端口
[root@javasv-A ~]# curl 192.168.8.100

虚拟机B操作

[root@javasv-B ~]# dnf -y install nginx								#安装nginx
[root@javasv-B ~]# echo BBB > /usr/share/nginx/html/index.html		#编写测试页面
[root@javasv-B ~]# systemctl restart nginx 							#重启nginx服务
[root@javasv-B ~]# systemctl enable nginx							#将服务设置为开机自启
[root@javasv-B ~]# ss -nutlp | grep :80								#访问测试
[root@javasv-B ~]# curl 192.168.8.101								#访问测试

部署proxy代理服务器

配置Nginx服务器,添加服务器池,实现反向代理功能,

  • 使用upstream定义后端服务器集群,集群名称任意(如backend)
  • 使用server定义集群中的具体服务器和端口
[root@proxy ~]# dnf -y install nginx								#安装nginx
[root@proxy ~]# vim /etc/nginx/nginx.conf							#修改代理服务配置文件
 37     upstream backend {											#定义集群
 38         server 192.168.8.100:80;								#声明集群成员
 39         server 192.168.8.101:80;								#声明集群成员
 40     }
 41     server {
 42         listen       80 default_server;
 43         listen       [::]:80 default_server;
 44         server_name  _;
 45         root         /usr/share/nginx/html;
 46 
 47         # Load configuration files for the default server block.
 48         include /etc/nginx/default.d/*.conf;
 49 
 50         location / {
 51                 proxy_pass http://backend/;						#调用集群
 52         }
 [root@proxy ~]# systemctl restart nginx							#重启nginx
 [root@proxy ~]# systemctl enable nginx								#将服务设置为开机自启

访问测试

  • 客户端可以使用命令行访问代理服务器,也可以使用真机浏览器访问代理服务器,不过要注意缓存
[root@proxy ~]# curl 192.168.4.50
AAA
[root@proxy ~]# curl 192.168.4.50
BBB
[root@proxy ~]# curl 192.168.4.50
AAA
[root@proxy ~]# curl 192.168.4.50
BBB

集群健康检查

集群成员可以设置如下属性,用于更加合理的针对不同环境完成更加合理的负载均衡

  • weight设置服务器权重值,默认值为1
  • max_fails设置最大失败次数,测试服务器几次才确认服务器失败
  • fail_timeout设置失败超时时间,单位为秒
  • down标记服务器已关机,不参与集群调度
[root@proxy ~]# vim /etc/nginx/nginx.conf
……
upstream backend {
	server 192.168.8.100:80 weight=2 max_fails=2 fail_timeout=30;
	server 192.168.8.101:80 weight=1;
    }

访问测试

[root@proxy ~]# curl 192.168.4.50
AAA
[root@proxy ~]# curl 192.168.4.50
AAA
[root@proxy ~]# curl 192.168.4.50
BBB

总结

  • 掌握yum仓库的使用方法,掌握服务端、客户端的部署方式
  • 掌握本地yum仓库的构建过程
  • 掌握Nginx服务web站点功能、Nginx动静分离技术、Nginx代理功能
  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值