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
实验架构
安装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动静分离测试
安装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地址 | 配额 | 角色 |
---|---|---|---|
proxy | ens160: 192.168.4.50|ens192: 192.168.8.50 | 1G内存1CPU | 代理服务器 |
javasv-A | ens160: 192.168.8.100 | 1G内存1CPU | web服务器 |
javasv-B | ens160: 192.168.8.101 | 1G内存1CPU | web服务器 |
windows | vmnet1: 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代理功能