环境准备
使用了最小化安装的系统,因此需要提前安装一些常用软件包。(用上周我们搭建的4台虚拟机中的PROXY主机完成下列练习。)
- yum -y install vim #安装vim编辑器
- yum list | grep bash #查询名字和bash有关的软件包
- yum -y install bash-completion #支持tab键补全的软件包,重新登录后生效
- Yum -y install net-tools #安装网络相关软件包
- yum -y install tar #安装支持tar命令的软件
NGINX软件包,可以网上下载,选LIUNX系统版本的,方便下载后放入虚拟机中下载使用。
OPERATION DAY1
小伙伴们,今天为大家介绍的是,NGINX,它是一款功能齐全,使用方便的一款代理服务器软件,相比较APACHE有许多闪光点,想要实现相应的功能只需要加入对应的软件模块即可实现,是LNMP平台搭建不可缺少的一部分。
下面就正式进入到LNMP平台运维部分的知识。
一、NGINX 安装部署
案例1:搭建Nginx服务器
问题
在IP地址为192.168.99.5的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能:
- 支持SSL加密功能
- 设置Nginx账户及组名称均为nginx
然后客户端访问页面验证Nginx Web服务器:
- 使用火狐浏览器访问
- 使用curl访问 (虚拟机内访问)
方案
提前准备运维课程所需的所有虚拟机,为后续所有实验做准备
表-1 主机列表
其中PROXY 就是代理服务器,类似漫画死神的代理人。
第一天课程需要使用2台虚拟机,其中一台作为Nginx服务器(proxy)、另外一台作为测试用的客户机(client)
步骤
实现此案例需要按照如下步骤进行。
步骤一:构建Nginx服务器
1)使用源码包安装nginx软件包
- [root@proxy ~]# yum -y install gcc make #安装编译工具
- [root@proxy ~]# yum -y install pcre-devel #正则表达式依赖包
- [root@proxy ~]# yum -y install openssl-devel #SSL加密依赖包
- [root@proxy ~]# tar -xf nginx-1.22.1.tar.gz # 原地释放软件解压包
- [root@proxy ~]# cd nginx-1.22.1 #切换到软件路径
- [root@proxy nginx-1.22.1]# ./configure \
- --prefix=/usr/local/nginx \ #指定安装路径
- --user=nginx \ #指定用户 防止组/用户 失管失控,恶意破坏服务器
- --group=nginx \ #指定组
- --with-http_ssl_module #开启SSL加密功能
- [root@proxy nginx-1.22.1]# make #编译
- [root@proxy nginx-1.22.1]# make install #安装
- cd /usr/local/nginx/ #切换目录
- ls /usr/local/nginx/ #查看目录
下面这几个比较重要的文件
conf 配置文件 sbin 主程序
html 网站页面 logs 日志
2)nginx命令的用法
- [root@proxy nginx]# useradd -s /sbin/nologin nginx
- /usr/local/nginx/sbin/nginx #启动服务
- /usr/local/nginx/sbin/nginx -s stop #关闭服务
- /usr/local/nginx/sbin/nginx -s reload #重新加载配置文件
- /usr/local/nginx/sbin/nginx -V #查看软件信息
ss命令可以查看系统中启动的端口信息,该命令常用选项如下:
(这几个命令可以知道,那个用户IP 查看了你架设的网站)。
使用标准: -antpu 和 ss -nutlp | grep 服务名 的使用有一定区别,需要注意。
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
nginx服务默认通过TCP 80端口监听客户端请求:
- [root@proxy nginx]# ss -anptu | grep nginx
步骤二:客户端访问测试
Nginx服务默认首页文档存储目录为/usr/local/nginx/html/,在此目录下默认有一个名为index.html的文件,使用客户端访问测试页面:
- systemctl stop firewalld #关闭防火墙
- [root@client ~]# curl http://192.168.88.5 #如果没有client则访问192.168.99.5
- <html>
- <head>
- <title>Welcome to nginx!</title>
- </head>
- ...
另外使用火狐浏览器访问
测试页面
1)测试网站自定义页面:
注意:要在html 目录下新建 对应的测试网页文件。
- [root@proxy nginx]#echo "xixi-test~~~" > html/test.html #创建新页面
http://192.168.99.5/abc.html #访问新页面
火狐访问192.168.99.5/abc.html #如果无效,可以按ctrl+f5强制刷新
2)测试成品网站页面:
你可以网上下几个网站模版--》 然后放到真机桌面---》在拷贝到虚拟机中,创建的软件包文件夹中,然后解压(和上面方法同理)
模版内容包括:用户注册、用户登录主页。
- [root@proxy nginx]# yum -y install unzip #安装解压缩工具
- [root@proxy nginx]# unzip ~/自建软件存放文件夹/网站模版.zip #解压缩网站模板 lnmp_soift是你自己在虚拟机中创建的 软件存放文件夹,里面存放你下载的网站模版压缩包
- [root@proxy nginx]# cp -r 网站模版/* html/ #拷贝网站模板文件到nginx的网页目录,如果有覆盖提示就输入 y 回车 解压好模板后,才复制到 HTML目录下
最后火狐访问192.168.99.5
二、用户认证
案例2:用户认证
问题
沿用练习一,通过调整Nginx服务端配置,实现以下目标:
- 访问Web页面需要进行用户认证
- 用户名为:tom,密码为:123456
方案
通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可,效果如图-1所示。
图-1
步骤
实现此案例需要按照如下步骤进行。
步骤一:修改Nginx配置文件
1)修改/usr/local/nginx/conf/nginx.conf
注意:如果配置文件已经被无意修改,自己不知道怎么拍错,这时候需要使用配置文件的模版来替换它。 用法: cp conf/nginx.conf.default conf/nginx.conf 恢复默认配置方法
- [root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- server {
- listen 80;
- server_name localhost;
- auth_basic "Input Password:"; #认证提示符信息
- auth_basic_user_file "/usr/local/nginx/pass"; #认证的密码文件
- location / {
- root html;
- index index.html index.htm;
- }
- }
2)生成密码文件,创建用户及密码
使用htpasswd命令创建账户文件,需要确保系统中已经安装了httpd-tools。
(使用了该模块,某某登录你的网站,就要实行用户认证,可以避免被它人随意访问)
- [root@proxy nginx]# yum -y install httpd-tools
- [root@proxy nginx]# htpasswd -c /usr/local/nginx/pass tom #创建密码文件
- New password:
- Re-type new password:
- Adding password for user tom
3)重新加载配置
- [root@proxy nginx]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置文件
- #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
- #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
步骤二:客户端测试
打开浏览器访问http://192.168.99.5。
可以看到用户名与密码的对话框,需要通过认证才能看到网页内容
2)追加账户
- htpasswd /usr/local/nginx/pass jerry #追加用户,不使用-c选项
- New password:
- Re-type new password:
- Adding password for user jerry
- [root@proxy ~]# cat /usr/local/nginx/pass
三、WEB虚拟主机
案例3:基于域名的虚拟主机
问题
配置基于域名的虚拟主机,实现两个基于域名的虚拟主机,域名分别为www.a.com和www.b.com
步骤
实现此案例需要按照如下步骤进行。
步骤一:修改配置文件
1)修改Nginx服务配置,添加相关虚拟主机配置如下
- [root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
- http { #最主要的配置服务,有多个小型服务组件组成。
- .. ..
- server { # server{ } 括号里存放监听的端口号和服务 网页、
- listen 80; #端口
- server_name www.b.com; #新虚拟主机定义域名
- location / {
- root html_b; #指定网站根路径
- index index.html index.htm; #默认页面 首先检查HTML格式,次要检查HTM格式网页文件。
- }
- }
- server {
- listen 80; #端口
- server_name www.a.com; #默认的虚拟主机,修改域名
- location / {
- root html; #指定网站根路径
- index index.html index.htm;
- }
- }
- }
2)创建网站根目录及对应首页文件
- sbin/nginx -s reload #之后重新加载配置文件,服务必须是开启状态
- [root@proxy nginx]# mkdir html_b #创建b网站的目录
- echo "nginx-A~~~" > html/index.html #创建a网站测试页
- echo "nginx-B~~~" > html_b/index.html #创建b网站测试页
- vim /etc/hosts #修改hosts文件添加ip和域名的映射关系
- 192.168.99.5 www.a.com www.b.com
- curl www.a.com #检测a网站或b网站都可以看到页面
另外:
windows环境配置hosts文件
C:\Windows\System32\drivers\etc\hosts
右键---属性---安全---编辑---users---完全控制打钩
过程中不要更改WINDOWS中存放的 网址。
然后用文本打开hosts,在最后添加,下面是测试网址。
192.168.99.5 www.a.com www.b.com
步骤三:其他类型的虚拟主机(选做)
1.基于端口的虚拟主机(参考模板)
- server {
- listen 8080; #端口
- server_name www.a.com; #域名
- ......
- }
- server {
- listen 8000; #端口
- server_name www.a.com; #域名
- .......
- }
2.基于IP的虚拟主机(参考模板)
- server {
- listen 192.168.88.5:80; #IP地址与端口
- server_name www.a.com; #域名
- ... ...
- }
- server {
- listen 192.168.99.5:80; #IP地址与端口
- server_name www.a.com;
- ... ...
- }
四、HTTPS 加密网址
SSL虚拟主机
问题
配置基于加密网站的虚拟主机,实现以下目标:
- 该站点通过https访问
- 通过私钥、证书对该站点所有数据加密
方案
源码安装Nginx时必须使用--with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。
加密算法一般分为对称算法、非对称算法、信息摘要。
对称算法有:AES、DES,主要应用在单机数据加密。
非对称算法有:RSA、DSA,主要应用在网络数据加密。
(非对称不是黎明杀机也不是第5人格哈,是公钥加密,私钥解密)
信息摘要:MD5、sha256,主要应用在数据完整性校验。
(每一个重要功能的网站都会面临黑客的各种手段攻击和网络抓包数据后进行敲诈勒索,所以加密手段也随之产生。)
步骤
实现此案例需要按照如下步骤进行。
步骤一:配置SSL虚拟主机
1)修改Nginx配置文件,设置加密网站的虚拟主机
- [root@proxy nginx]#vim /usr/local/nginx/conf/nginx.conf
- … …
- server {
- listen 443 ssl; #配置文件最下面位置能找到,443是该服务的端口号。
- server_name localhost;
- ssl_certificate cert.pem; #这里是证书文件 两个文件都需要你在 conf目录下创建对应文件夹。 别忘记了
- ssl_certificate_key cert.key; #这里是私钥文件 两个文件都需要你在 conf目录下创建对应文件夹。 别忘记了 ^_^
- ssl_session_cache shared:SSL:1m;
- ssl_session_timeout 5m;
- ssl_ciphers HIGH:!aNULL:!MD5; #MD5是一种验证密码完整性的方式
- ssl_prefer_server_ciphers on;
- location / {
- root https; #加密网站根目录
- index index.html index.htm;
- }
- }
2)生成私钥与证书
(下面的选项因为是练习,你可以随意回答。正式上网时需要正确填写)
- [root@proxy nginx]#openssl genrsa > conf/cert.key #生成私钥
- [root@proxy nginx]#openssl req -x509 -key conf/cert.key > conf/cert.pem #生成证书,生成过程会询问诸如你在哪个国家之类的问题,可以随意回答
- Country Name (2 letter code) [XX]:dc 国家名
- State or Province Name (full name) []:dc 省份
- Locality Name (eg, city) [Default City]:dc 城市
- Organization Name (eg, company) [Default Company Ltd]:dc 公司
- Organizational Unit Name (eg, section) []:dc 部门
- Common Name (eg, your name or your server's hostname) []:dc 服务器名称
- Email Address []:dc@dc.com 电子邮件
3)重新加载配置
步骤二:客户端验证
- [root@proxy nginx]# mkdir https #创建安全网站的目录
- [root@proxy nginx]# echo "https~~~~ " > https/index.html #创建安全网站的页面
- [root@proxy nginx]# sbin/nginx #服务没开的话开服务
- [root@proxy nginx]# sbin/nginx -s reload #已经开了的话重加载配置
- [root@proxy nginx]# curl -k https://192.168.99.5 #检验,-k是忽略安全风险
- https~~~~ #看到这个内容就说明实验成功
- [root@proxy nginx]# systemctl stop firewalld #如果用真机的火狐浏览器测试需要
- 关闭防火墙,然后输入https://192.168.99.5 进行测试
OPERATION DAY2
一、部署LNMP 平台环境
LANMP含义:
网站服务软件还有 Apache。
部署LNMP环境
目的:
安装部署LNMP环境实现动态网站解析
静态网站 在不同环境下访问,网站内容不会变化
动态网站 在不同环境下访问,网站内容有可能发生变化
- 安装部署Nginx、MariaDB、PHP、PHP-FPM;
- 启动Nginx、MariaDB、FPM服务;
- 并测试LNMP是否工作正常。
方案
目前的网站一般都会有动态和静态数据,默认nginx仅可以处理静态数据,用户访问任何数据都是直接返回对应的文件,如果如果访问的是一个脚本的话,就会导致直接返回一个脚本给用户,而用户没有脚本解释器,也看不懂脚本源代码!
因此需要整合LNMP(Linux、Nginx、MySQL、PHP)实现动态网站效果。
合理配置才能实现网站动态效果哦
操作过程中需要安装的软件列表如下:
- nginx
- mariadb、mariadb-server、mariadb-devel
- php、php-fpm、php-mysqlnd
备注:mariadb(数据库客户端软件)、mariadb-server(数据库服务器软件)、mariadb-devel(其他客户端软件的依赖包)、php(解释器)、php-fpm(进程管理器服务)、php-mysqlnd(PHP的数据库扩展包)。
步骤
实现此案例需要按照如下步骤进行。
步骤一:安装软件
1)使用yum安装基础依赖包
为了不受到之前实验的影响,可以先删除nginx,重安装
(主要怕你配置文件写的东西冲突,次要是为了练习该服务的安装与配置)
- [root@proxy nginx]#killall nginx #停止nginx程序
- [root@proxy nginx]#cd /root/lnmp_soft/nginx-1.22.1
- [root@proxy nginx-1.22.1]#rm -rf /usr/local/nginx #删除nginx原有目录
- [root@proxy nginx-1.22.1]# yum -y install gcc make openssl-devel pcre-devel
- [root@proxy nginx-1.22.1]# ./configure \
- > --user=nginx --group=nginx \
- > --with-http_ssl_module
- [root@proxy nginx-1.22.1]# make && make install
- .. ..
3)安装MariaDB
- [root@proxy ~]# yum -y install mariadb mariadb-server mariadb-devel
4)php和php-fpm
- [root@proxy ~]# yum -y install php php-mysqlnd
- [root@proxy ~]# yum -y install php-fpm
步骤二:启动服务
1)启动Nginx服务
如果服务器上已经启动了其他监听80端口的服务(如httpd),则需要先关闭该服务。
- [root@proxy ~]# systemctl stop httpd #如果该服务存在则关闭该服务
- [root@proxy ~]# /usr/local/nginx/sbin/nginx #启动Nginx服务
- [root@proxy ~]# ss -utnlp | grep :80
2)启动MySQL服务
- [root@proxy ~]# systemctl start mariadb #启动服务器
- [root@proxy ~]# systemctl status mariadb #查看服务状态
- [root@proxy ~]# systemctl enable mariadb #设置开机启动
3)启动PHP-FPM服务
- [root@proxy ~]# systemctl start php-fpm #启动服务
- [root@proxy ~]# systemctl status php-fpm #查看服务状态
- [root@proxy ~]# systemctl enable php-fpm #设置开机启动
4)使用PHP测试页面
准备:网上下载一个PHP格式的测试页面———放到软件包文件中,再创建一个存放PHP文件的文件夹,存放它———拷贝到相关网页目录下。
- cp ~/lnmp_soft/php_scripts/test.php /usr/local/nginx/html #拷贝动态网站测试页面到nginx中
使用浏览器访问192.168.99.5/test.php 则无法看到页面内容,而是会当成要下载的文件,因为浏览器无法解析php代码!
案例2:构建LNMP平台
问题
沿用练习一,通过调整Nginx服务端配置,实现以下目标:
- 配置Fast-CGI支持PHP网页解析
Fast-CGI是快速公共(通用)网关接口,可以连接如nginx等网站程序到网站的语言解释器(比如php) ,php-fpm进程使用了Fast-CGI解析动态网站页面
- 创建PHP测试页面,测试使用PHP连接数据库的效果
方案
需要延续练习一的实验内容,通过修改Nginx及php-fpm配置文件实现对PHP页面的支持。
步骤
实现此案例需要按照如下步骤进行。
步骤一: php-fpm配置文件
1)打开php-fpm配置文件,注意该配置文件中;(分号)是注释
- [root@proxy etc]# vim /etc/php-fpm.d/www.conf
- [www]
- listen = 127.0.0.1:9000 #php-fpm端口号(使用网络通信这是真机本地IP地址)
- ;listen = /run/php-fpm/www.sock #注释该行
- pm.max_children = 50 #最大进程数量
- pm.start_servers = 5 #最小进程数量
- [root@proxy etc]#systemctl restart php-fpm #重启服务
步骤二:修改Nginx配置文件并启动服务
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- ...
- location ~ \.php$ { #~是使用正则表达式,匹配以.php结尾
- root html;
- fastcgi_pass 127.0.0.1:9000; #将请求转发给本机9000端口
- fastcgi_index index.php;
- #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi.conf; #加载fastcgi配置文件
- }
步骤三:测试LNMP架构能否解析PHP页面
启动或者重加载nginx
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
- #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
- #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
再次使用浏览器访问192.168.99.5/test.php 可以看到页面内容!
2)再测试连接数据库的PHP页面
可以参考lnmp_soft/php_scripts/mysql.php
- cp ~/lnmp_soft/php_scripts/mysql.php /usr/local/nginx/html #拷贝动态网站测试页面到nginx中
3)客户端使用浏览器访问服务器PHP首页文档,检验是否成功
http://192.168.99.5/mysql.php
然后修改数据库内容进行测试
- mysql #进入数据库
- create user dc@localhost identified by '123'; #创建测试账户
- quit; #退出
再刷新192.168.99.5/mysql.php 可以看到新创建的用户
LNMP常见问题
如果仅访问ip就能看到动态网站的默认页,可以按下列方法配置
- ...
- location / {
- root html;
- index index.php index.html index.htm;
- #设置默认首页为index.php,当用户在浏览器地址栏中只写域名或IP,不说访问什么页面时,服务器会把默认首页index.php返回给用户
- }
- ...
Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log
Nginx的默认错误日志文件为/usr/local/nginx/logs/error.log
PHP默认错误日志文件为/var/log/php-fpm/www-error.log
如果动态网站访问失败,可用参考错误日志,查找错误信息。
看到以上test.php、mysql.php两个页面说明nginx不但能支持静态网站,也能解析动态网站了,这种情况也可以记作nginx实现了动静分离
使用socket方式连接php-fpm
实现此案例需要按照如下步骤进行。
步骤一: php-fpm配置文件
1)打开php-fpm配置文件
- [root@proxy etc]# vim /etc/php-fpm.d/www.conf
- [www]
- ;listen = 127.0.0.1:9000 #注释或删除该行
- listen = /run/php-fpm/www.sock #socket方式(使用进程通信)
- listen.acl_users = apache,nginx,nobody #添加nobody账户
- [root@proxy etc]#systemctl restart php-fpm #重启服务
步骤二:修改Nginx配置文件并启动服务
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- ...
- location ~ \.php$ { #~是使用正则表达式,匹配以.php结尾
- root html;
- #fastcgi_pass 127.0.0.1:9000; #注释或删除该行
- fastcgi_pass unix:/run/php-fpm/www.sock; #将请求转发给php-fpm进程
- fastcgi_index index.php;
- #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi.conf; #加载fastcgi配置文件
- }
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
二、FastCGI 模块
两种配置方法,都在上面练习中。需要哪种方式就注释相反的连接方式即可。
三、NGINX 高级技术应用
案例3:地址重写
问题
- 通过调整Nginx服务端配置,实现地址重写功能
方案
关于Nginx服务器的地址重写,主要用到的配置参数是rewrite
- rewrite regex replacement flag
- rewrite 旧地址 新地址 [选项] #用法
步骤
实现此案例需要按照如下步骤进行。
步骤一:修改配置文件(访问a.html重定向到b.html)
1)修改Nginx服务配置:
- [root@proxy nginx]# cp conf/nginx.conf.default conf/nginx.conf #还原配置文件
- [root@proxy nginx]# cp:是否覆盖"conf/nginx.conf"? y
- [root@proxy nginx]# vim conf/nginx.conf
- .. ..
- server {
- listen 80;
- server_name localhost;
- rewrite /a.html /b.html;
- location / {
- root html;
- index index.html index.htm;
- }
- }
- [root@proxy ~]# echo "nginx-B~~" > /usr/local/nginx/html/b.html
2)重新加载配置文件
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)客户端测试
http://192.168.99.5/a.html
步骤二:测试redirect选项
1)修改Nginx服务配置:
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- server {
- listen 80;
- server_name localhost;
- rewrite ^/a.html$ /b.html redirect; #重定向功能
- location / {
- root html;
- index index.html index.htm;
- }
- }
2)重新加载配置文件
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)客户端测试,地址栏同时发生变化
http://192.168.99.5/a.html
步骤三:不同网站间跳转
修改Nginx服务配置实现访问192.168.99.5的请求重定向至www.abc.com #这里只是举例子,别在真机上重定向别人或企业的域名,尽量重定向自己写的。(*^▽^*)
# 好的网站域名是需要很多 MONEY才能买到的,但是一个公司一个企业开头就必须买个好域名,才会更加有辨识度,吸引更多的访客驻足。 对域名感兴趣的可以去搜索看看。(* ̄︶ ̄)
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- server {
- listen 80;
- server_name localhost;
- rewrite / http://www.abc.com/;
- location / {
- root html;
- index index.html index.htm;
- }
- }
2)重新加载配置文件
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)客户端测试
http://192.168.99.5
步骤四:修改配置文件(访问192.168.99.5/下面子页面,重定向至www.abc.com/下相同的子页面)
1) 修改Nginx服务配置
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- server {
- listen 80;
- server_name localhost;
- rewrite /(.*) http://www.abc.com/$1;
- location / {
- root html;
- index index.html index.htm;
- }
- }
2)重新加载配置文件
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)客户端测试
http://192.168.99.5/test
步骤五:实现不同浏览器跳转到不同页面
1) 创建网页目录以及对应的页面文件:
- [root@proxy nginx]# mkdir html/firefox
- [root@proxy nginx]# echo firefox~~ > html/firefox/abc.html #火狐专用页面
- [root@proxy nginx]# echo others~~ > html/abc.html #其他浏览器专用页面
火狐访问192.168.99.5/abc.html时可以看到html/firefox/abc.html里面内容
其他浏览器访问192.168.99.5/abc.html时可以看到html/abc.html里面内容
2) 修改Nginx服务配置
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- server {
- listen 80;
- server_name localhost;
- location / {
- root html;
- index index.html index.htm;
- }
- if ($http_user_agent ~* firefox) { #如果用户使用了火狐浏览器
- rewrite (.*) /firefox/$1; #就进行地址重写,让用户看到火狐专用页面$http_user_agent是nginx的内置变量,存储了用户的信息,比如用的什么浏览器,~是匹配正则 *是忽略大小写
- }
- }
3)重新加载配置文件
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
4)客户端测试
- 分别用火狐浏览器与其他浏览器访问相同地址http://192.168.99.5/abc.html,可以得到不同结果
地址重写的选项
redirect 临时重定向,状态码302,爬虫不更新URI
permanent 永久重定向,状态码301,爬虫更新URI
last 不再读其他语句,但还会继续匹配其他location语句
- echo "nginx-c~~" > html/c.html #准备素材c页面
- rewrite /a.html /b.html last; #没有其他location语句时,打开b页面
- rewrite /b.html /c.html ;
break 不再读其他语句,结束请求
- location / { #此处为默认的location
- rewrite /a.html /b.html break; #break可以阻止后面的语句
- root html;
- index index.html index.htm;
- }
- location /b.html { #这里是新添加的location
- rewrite /b.html /c.html;
- }
OPERATION DAY3
注意:此次练习会使用到PROXY 与 WEB1 ,2 ,client 虚拟机。
一、NGINX 调度器
1 案例1:Nginx反向代理
1.1 问题
使用Nginx实现Web反向代理功能,实现如下功能:
- 后端Web服务器两台,可以使用httpd实现
- Nginx采用轮询的方式调用后端Web服务器
- 两台Web服务器的权重要求设置为不同的值
- 最大失败次数为2,失败超时时间为30秒
1.2 方案
使用4台虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.88.5和192.168.99.5,两台Web服务器IP地址分别为192.168.99.100和192.168.99.200。客户端测试主机IP地址为192.168.88.10。如图-1所示。
图-1
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:部署实施后端Web服务器
环境准备,同网段要互通,检查yum
1)部署后端Web1服务器
后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容。
- [root@web1 ~]#yum -y install vim net-tools bash-completion psmisc httpd
- [root@web1 ~]# echo "web1" > /var/www/html/index.html
- [root@web1 ~]# systemctl restart httpd
- systemctl stop firewalld #关闭防火墙
2)部署后端Web2服务器
- [root@web2 ~]#yum -y install vim net-tools bash-completion psmisc httpd
- [root@web2 ~]# echo "web2" > /var/www/html/index.html
- [root@web2 ~]# systemctl restart httpd
- systemctl stop firewalld #关闭防火墙
3)到proxy主机测试
- [root@proxy nginx]# curl 192.168.99.100
- web1~~
- [root@proxy nginx]# curl 192.168.99.200
- web2~~
步骤二:配置Nginx服务器,添加服务器池,实现反向代理功能
如果需要可以先还原proxy主机的nginx
- [root@proxy nginx]# cd ~/lnmp_soft/
- [root@proxy lnmp_soft]# killall nginx
- [root@proxy lnmp_soft]# rm -rf /usr/local/nginx/
- [root@proxy lnmp_soft]# rm -rf nginx-1.22.1
- [root@proxy lnmp_soft]# tar -xf nginx-1.22.1.tar.gz
- [root@proxy lnmp_soft]# cd nginx-1.22.1/
- [root@proxy lnmp_soft]#yum -y install gcc make pcre-devel openssl-devel
- [root@proxy nginx-1.22.1]# ./configure
- [root@proxy nginx-1.22.1]#make
- [root@proxy nginx-1.22.1]#make install
1)修改/usr/local/nginx/conf/nginx.conf配置文件
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- http {
- .. ..
- #使用upstream定义后端服务器集群,集群名称任意(如webserver)
- #使用server定义集群中的具体服务器和端口
- upstream webserver {
- server 192.168.99.100:80;
- server 192.168.99.200:80;
- }
- .. ..
- server {
- listen 80;
- server_name localhost;
- location / {
- #通过proxy_pass将用户的请求转发给webserver集群
- proxy_pass http://webserver;
- }
- }
- .. ..
- }
2)重新加载配置
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
- #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
- #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)客户端使用火狐浏览器或curl多次访问proxy主机可以看到网站的轮询效果
步骤二:配置upstream服务器集群池属性
1)设置权重
weight可以设置后台服务器的权重,权重越大任务的分配量就越大
(能力越大,责任越大,能力越小,责任越小。bushi)
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- upstream webserver {
- server 192.168.99.100 weight=2;
- server 192.168.99.200;
- }
重新加载配置并访问,可以看到web1的任务量增加
设置健康检查,max_fails可以设置后台服务器的失败次数,fail_timeout可以设置后台服务器的失败超时时间。
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- upstream webserver {
- server 192.168.99.100;
- server 192.168.99.200 max_fails=2 fail_timeout=30;
- }
重新加载配置并访问,
sbin/nginx -s reload
测试时,先将web2的httpd服务关闭,回到proxy访问集群页面curl 192.168.99.5
只会显示web1的页面,此时即使将web2的httpd服务开启也无效,因为要等
待30秒
步骤三:配置upstream服务器集群的调度算法
1)设置相同客户端访问相同Web服务器
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- upstream webserver {
- ip_hash;
- server 192.168.99.100 ;
- server 192.168.99.200 ;
- }
2)重新加载配置
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
客户端使用浏览器访问代理服务器测试只会见到一个页面
步骤四:添加down标记
down标记可以让集群主机暂时不参与集群活动
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- upstream webserver {
- server 192.168.99.100 ;
- server 192.168.99.200 down;
- }
重新加载配置
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
客户端使用浏览器访问代理服务器测试只会见到99.100
2 案例2:Nginx的TCP/UDP调度器
2.1 问题
使用Nginx实现TCP/UDP调度器功能,实现如下功能:
- 后端SSH服务器两台
- Nginx编译安装时需要使用--with-stream,开启ngx_stream_core_module模块
- Nginx采用轮询的方式调用后端SSH服务器
2.2 方案
使用4台虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.88.5和192.168.99.5,两台SSH服务器IP地址分别为192.168.99.100和192.168.99.200。客户端测试主机IP地址为192.168.88.10。如图-2所示。
图-2
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:部署支持4层TCP/UDP代理的Nginx服务器
1)部署nginx服务器
编译安装必须要使用--with-stream参数开启4层代理模块。
- [root@proxy nginx]# cd ~/lnmp_soft/nginx-1.22.1/
- [root@proxy nginx-1.22.1]# killall nginx
- [root@proxy nginx-1.22.1]# rm -rf /usr/local/nginx/
- [root@proxy nginx-1.22.1]# ./configure \
- > --with-stream #开启4层代理功能
- [root@proxy nginx-1.22.1]# make && make install #编译并安装
- [root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx -V #查看安装模块情况
步骤二:配置Nginx服务器,添加服务器池,实现TCP/UDP代理功能
1)修改/usr/local/nginx/conf/nginx.conf配置文件
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- stream {
- upstream backend {
- server 192.168.99.100:22; #后端SSH服务器的IP和端口
- server 192.168.99.200:22;
- }
- server {
- listen 12345; #Nginx监听的端口
- proxy_pass backend;
- }
- }
- http {
- .. ..
- }
2)重新加载配置
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
- #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
- #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
3)客户端使用访问代理服务器测试轮询效果
- [root@client ~]# ssh 192.168.88.5 -p 12345 #使用该命令多次访问查看效果
注意:如果配置没有错误,但无法反复登陆web1与web2,可以按下列方式解决
- rm -rf ~/.ssh/known_hosts #在proxy中删除记录文件
- ssh 192.168.99.5 -p 12345 #再次尝试登录,会连接到另外一台集群主机
如果你是克隆WEB1,2。CLIENT虚拟机,可能会出现报错情况。因为集群代码编写时,会监测远程登录的主机IP,默生或错误时就会自动断开SSH远程连接。
应对方法:需要删除 已经读取的HOSTS 文件内容。
rm -rf ~/.ssh/known-hosts
3 案例3:Nginx常见问题处理
3.1 问题
本案例要求对Nginx服务器进行适当优化,解决如下问题,以提升服务器的处理性能:
- 如何自定义返回给客户端的404错误页面
- 如何查看服务器状态信息
- 如果客户端访问服务器提示“Too many open files”如何解决
- 如何解决客户端访问头部信息过长的问题
- 如何让客户端浏览器缓存数据
客户机访问此Web服务器验证效果:
- 使用ab压力测试软件测试并发量
- 编写测试脚本生成长头部信息的访问请求
- 客户端访问不存在的页面,测试404错误页面是否重定向
3.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:自定义报错页面
HTTP常见状态码列表:
200 正常
301 & 302 重定向
400 请求语法错误
401 访问被拒绝
403 禁止访问
404 资源找不到
414 请求URI头部太长
500 服务器内部错误
502 代理服务器无法正常获取下一个服务器正常的应答
1)优化前,客户端使用浏览器访问不存在的页面,会提示404文件未找到
2)修改Nginx配置文件,自定义报错页面
QQ很早就用到了这个功能,当时取得了不错的市场反响。
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- charset utf-8; #仅在需要中文时修改该选项
- error_page 404 /test.jpg; #自定义错误页面为一张图片,图片可以从真机拷入
- .. ..
- [root@proxy ~]# nginx -s reload
二、NGINX优化
如何查看服务器状态信息(非常重要的功能)
编译安装时使用--with-http_stub_status_module开启状态页面模块
如果要添加模块,但不想删除之前nginx数据,可以将nginx源码目录下的objs目录中的nginx文件拷贝到nginx的sbin目录下替代现有主程序,然后killall nginx 再重启即可
- [root@proxy nginx]# cd ~/lnmp_soft/nginx-1.22.1/
- [root@proxy nginx-1.22.1]# ./configure \
- > --with-stream #开启4层代理模块
- > --with-http_stub_status_module #开启status状态页面
- [root@proxy nginx-1.22.1]# make #编译
- [root@proxy nginx-1.22.1]# killall nginx
- [root@proxy nginx-1.22.1]# cp objs/nginx /usr/local/nginx/sbin/ #覆盖原文件
- [root@proxy nginx-1.22.1]# /usr/local/nginx/sbin/nginx #开启nginx
2)修改Nginx配置文件,定义状态页面
- [root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf
- … …
- location /status {
- stub_status on;
- #allow IP地址;
- #deny all;
- }
- … …
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
4)优化后,查看状态页面信息
- [root@proxy ~]# curl http://192.168.99.5/status
- Active connections: 1
- server accepts handled requests
- 10 10 3
- Reading: 0 Writing: 1 Waiting: 0
Active connections:当前活动的连接数量。
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。
补充知识:
PV(Page View):页面浏览量,即网站页面在一定时间内被访问的页面总次数,相同用户刷新相同页面也被计算一次,反映了用户对网站内容的浏览情况,可以通过访问日志得到。
UV(Unique Visitor):独立访客数,统计一定周期内,访问网站的独立用户数量,不重复计算同一用户的多次访问。可以通过访问日志或根据用户的唯一标识去重得到
PV与UV都是衡量业务活跃度的重要指标,尤其网站改版升级后,可以进行对比来判断业务情况
优化Nginx并发量
1)优化前使用ab高并发测试,使用web1或proxy自己作为海量客户(防火墙与selinux都关闭
- [root@proxy ~]# ab -n 100 -c 100 http://192.168.99.5/ #-n任务量,-c是连接数
- ...
- ...
- 100% #成功
- [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.99.5/
- Benchmarking 192.168.99.5 (be patient)
- socket: Too many open files (24) #失败
2)修改Nginx配置文件,增加并发量
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- worker_processes 2; #与CPU核心数量一致
- events {
- worker_connections 50000; #每个worker最大并发连接数
- }
- .. ..
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)优化Linux内核参数(最大文件数量)
- [root@proxy ~]# ulimit -n #查看最大文件数量
- [root@proxy ~]# ulimit -n 100000 #临时设置最大文件数量
- [root@proxy ~]# vim /etc/security/limits.conf
- .. ..
- * soft nofile 100000
- * hard nofile 100000
- #该配置文件分4列,分别如下:
- #用户或组 硬限制或软限制 需要限制的项目 限制的值
4)优化后测试服务器并发量
- [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.99.5/
优化Nginx数据包头缓存,支持超长地址
优化前,使用脚本测试超长头部请求是否能获得响应
默认情况下nginx无法支持长地址栏,会报414错误
- [root@proxy ~]# cat lnmp_soft/buffer.sh
- #!/bin/bash
- URL=http://192.168.99.5/index.html?
- for i in {1..5000}
- do
- URL=${URL}v$i=$i
- done
- curl $URL #经过5000次循环后,生成一个超长的URL地址
- [root@proxy ~]# ./buffer.sh
- .. ..
- <center><h1>414 Request-URI Too Large</h1></center> #访问失败
2)修改Nginx配置文件,增加数据包头部缓存大小
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- .. ..
- http {
- client_header_buffer_size 200k; #请求包头信息的缓存大小
- large_client_header_buffers 4 200k; #大请求包头部信息的缓存个数与容量
- .. ..
- }
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)优化后,使用脚本测试超长头部请求是否能获得响应
- [root@proxy ~]# ./buffer.sh
浏览器本地缓存静态数据
1)使用Firefox浏览器查看缓存
2)清空firefox本地缓存数据
3)修改Nginx配置文件,定义对静态页面的缓存时间
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- server {
- listen 80;
- server_name localhost;
- location / {
- root html;
- index index.html index.htm;
- }
- location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
- expires 30d; #定义客户端缓存时间为30天
- }
- }
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
4)优化后,使用Firefox浏览器访问图片,再次查看缓存信息
http://192.168.99.5/day.jpg #图片可以用之前测试404自定义显示网页的图片。
在firefox地址栏内输入about:cache,查看本地缓存数据,查看是否有图片以及过期时间是否正确。
OPERATION DAY4
一、uWSGI
1 案例1:部署Python网站项目 (类似于前面课程中的PHP模块)
1.1 问题
配置Nginx使其可以将动态访问转交给uWSGI:
1.2 方案
安装Python工具及依赖
安装uWSGI并编写配置文件
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:首先练习目录中古关于python的tar 包 拷贝到虚拟机
想要尝试下载PYTHON 关于LIUNX版本的tar 包,
1)安装python依赖软件
- [root@proxy python]# yum -y install gcc make python3 python3-devel
2)安装项目依赖
- [root@proxy python]# pip3 install pytz-2022.6-py2.py3-none-any.whl
- [root@proxy python]# pip3 install Django-1.11.8-py2.py3-none-any.whl
- [root@proxy python]# pip3 install django-bootstrap3-11.0.0.tar.gz
3)测试项目
- [root@proxy python]# tar -xf python-project-demo.tar.gz
- [root@proxy python]# cd python-project-demo/
- [root@proxy python-project-demo]# python3 manage.py runserver 0.0.0.0:8000
之后可在浏览器访问192.168.99.5:8000,测试完毕后按ctrl + c
注意:测试时如果无法连接外网,可能需要将python-project-demo/learning_logs/templates/base.html文件中的特效注释
- <!-- {% bootstrap_css %}
- {% bootstrap_javascript %}
- -->
步骤二:
1)安装uWSGI
- [root@proxy python-project-demo]# cd ..
- [root@proxy python]# pip3 install uWSGI-2.0.21.tar.gz
- [root@proxy python]# vim myproject.ini
- [uwsgi]
- socket=127.0.0.1:8000 #与web服务(nginx)通信的接口
- chdir=/root/python/python-project-demo #项目的工作目录
- wsgi-file=learning_log/wsgi.py #指定项目中的wsgi.py配置文件
- daemonize=/var/log/uwsgi.log #指定日志文件位置
- #processes=4 #指定启动进程的数目
- #master=true #开启主进程管理模式
2)运行uWSGI
- [root@proxy python]# uwsgi --ini myproject.ini #读取myproject.ini运行uWSGI
3)修改nginx配置文件,添加uWSGI转发
- [root@proxy python]# vim /usr/local/nginx/conf/nginx.conf
- ...
- location / {
- uwsgi_pass 127.0.0.1:8000; #动态页面交给uWSGI
- include uwsgi_params; #调用uWSGI配置文件
- root html;
- index index.html index.htm;
- }
- ...
- [root@proxy python]# /usr/local/nginx/sbin/nginx
测试
使用浏览器访问192.168.99.5
二、灰度发布(金丝雀发布)
矿井中的金丝雀
17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。
文本来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作者:财富自由
链接:https://www.zhihu.com/question/335832790/answer/2429023328
作用:1.及时发现问题。2.获取反馈,改进产品。3.及时控制问题影响范围。
就像游戏里的测试服,软件里的BAT版本,都是软件测试的前沿阵地。
2 案例2:配置Nginx实现用IP测试灰度发布
2.1 问题
本案例要求不同IP的客户访问相同代理时,可以看到不同集群主机的内容
2.2 方案
创建不同集群,准备多台集群主机,通过$remote_addr变量识别不同客户机
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:
1)使用proxy主机在nginx配置中创建集群
- [root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
- http {
- ...
- upstream s8001 { #测试集群1
- server 192.168.99.100:8001;
- }
- upstream default { #正常业务集群
- server 192.168.99.100:80;
- server 192.168.99.200:80;
- }
- server {
- listen 80;
- server_name localhost;
- ...
- set $group "default"; #定义变量$group,默认值default
- if ($remote_addr ~ "192.168.99.1"){ #如果客户机ip是包含99.1就访问集群1
- set $group s8001;
- }
- location / {
- proxy_pass http://$group; #调用集群
- root html;
- index index.html index.htm;
- }
- ...
- }
- [root@proxy nginx]# sbin/nginx -s reload
为web1新建nginx虚拟主机
- [root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
- http {
- ...
- server {
- listen 8001;
- server_name localhost;
- root html8001;
- index index.html;
- }
- ...
- }
- [root@web1 nginx]# sbin/nginx -s reload
- [root@web1 nginx]# mkdir html8001
- [root@web1 nginx]# echo web1-8001 > html8001/index.html
为web2新建nginx虚拟主机
- [root@web2 nginx]# vim /usr/local/nginx/conf/nginx.conf
- http {
- ...
- server {
- listen 8002;
- server_name localhost;
- root html8002;
- index index.html;
- }
- ...
- }
- [root@web2 nginx]# sbin/nginx -s reload
- [root@web2 nginx]# mkdir html8002
- [root@web2 nginx]# echo web2-8002 > html8002/index.html
4)测试
192.168.99.100访问192.168.99.5
其他ip访问192.168.99.5
步骤二:
1)继续添加集群2测试
- [root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
- http {
- ...
- upstream s8001 { #测试集群1
- server 192.168.99.100:8001;
- }
- upstream s8002 { #测试集群2
- server 192.168.99.200:8002;
- }
- upstream default { #正常业务集群
- server 192.168.99.100:80;
- server 192.168.99.200:80;
- }
- server {
- listen 80;
- server_name localhost;
- ...
- set $group "default"; #定义变量$group,默认值default
- if ($remote_addr ~ "192.168.99.1"){ #如果客户机ip是99.1就访问集群1
- set $group s8001;
- }
- if ($remote_addr ~ "192.168.99.2"){ #如果客户机ip是99.2就访问集群2
- set $group s8002;
- }
- location / {
- proxy_pass http://$group; #调用集群
- root html;
- index index.html index.htm;
- }
- ...
- }
- [root@proxy nginx]# sbin/nginx -s reload
2)测试
192.168.99.100访问192.168.99.5
192.168.99.200访问192.168.99.5
其他ip访问192.168.99.5
3 案例3:通过不同用户ID测试灰度发布
3.1 问题
不同ID的客户访问相同代理时,可以看到不同集群主机的内容
3.2 方案
使用php页面,定义不同匹配语句
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:部署LNMP服务器相关软件
1)使用yum安装基础依赖包
- [root@proxy ~]# yum -y install gcc openssl-devel pcre-devel
- .. ..
2)源码安装Nginx (从真机拷贝到虚拟机)
- [root@proxy ~]# tar -xf nginx-1.22.1.tar.gz
- [root@proxy ~]# cd nginx-1.22.1
- [root@proxy nginx-1.22.1]# ./configure
- [root@proxy nginx-1.22.1]# make && make install
3)安装MariaDB数据库
- [root@proxy ~]# yum -y install mariadb mariadb-server mariadb-devel
4)安装PHP
- [root@proxy ~]# yum -y install php php-mysqlnd
- [root@proxy ~]# yum -y install php-fpm
5)修改Nginx配置文件(修改默认首页与动静分离)
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- location / {
- root html;
- index index.php index.html index.htm;
- }
- location ~ \.php$ {
- root html;
- fastcgi_pass unix:/run/php-fpm/www.sock;
- fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi.conf;
- }
- [root@proxy ~]# vim /etc/php-fpm.d/www.conf #打开php-fpm配置文件
- [www]
- ;listen = 127.0.0.1:9000 #注释或删除该行
- listen = /run/php-fpm/www.sock #socket方式(使用进程通信)
- listen.acl_users = apache,nginx,nobody #添加nobody账户
- [root@proxy ~]#systemctl restart php-fpm #重启服务
步骤二:启动LNMP服务器相关的服务
1)启动Nginx服务
这里需要注意的是,如果服务器上已经启动了其他监听80端口的服务软件(如httpd),则需要先关闭该服务,否则会出现冲突。
- [root@proxy ~]# systemctl stop httpd #如果该服务存在,则关闭该服务
- [root@proxy ~]# /usr/local/nginx/sbin/nginx
- [root@proxy ~]# ss -utnlp | grep :80
2)启动MySQL服务
- [root@proxy ~]# systemctl start mariadb
- [root@proxy ~]# systemctl status mariadb
3)启动PHP-FPM服务
- [root@proxy ~]# systemctl start php-fpm
- [root@proxy ~]# systemctl status php-fpm
4) 配置好lnmp之后,拷贝带登录效果的测试页面 (想要测试,可以真机下载PHP格式网页文件查看)
- cd ~/lnmp_soft/php_scripts/
- tar -xf php-session-demo.tar.gz #释放带登录功能的网页
- cp -r php-session-demo/* /usr/local/nginx/html/ #拷贝页面到nginx中使用火狐浏览器访问http://192.168.99.200/index.php 可以看到有登录界面的网页
注:这里index.php是登录前页面 ,home.php是登录后才能看的页面
步骤三:
1)修改home.php页面
- [root@proxy nginx]# vim html/home.php #修改php页面,将原有Welcome那行修改成以下状态
- Welcome : <?php
- if(preg_match("/^abc/",$_SESSION['login_user'])) { #preg_match匹配正则,如果登录账号是以abc开头,就连接99.100,否则连接99.200
- echo "<a href='http://192.168.99.100'>开始</a>";
- }
- else
- {
- echo "<a href='http://192.168.99.200'>开始</a>";
- }
- ?>
2)测试
浏览器访问192.168.99.5/index.php分别输入不同名称的账户,可以看到"开始"连接的是不同的地址,效果如图-1所示。
图-1
虚拟机中需要在加上 charset utf8; 才可以显示中文,下面练习有配置位置。
三、访问限制
4 案例4:配置网站限流限速
限流限速你可能一时弄不清楚,但是百度网盘你总知道了吧。一手限速玩的很6。每种VIP对应相应的下载速率。(⊙o⊙)…
这种技术你可以不用,但是你不能没有
4.1 问题
本案例要求配置nginx限流限速,效果如下:
- 使用Nginx配置全局限速100k
- 配置虚拟主机www.b.com限速200k,该网站根目录下的file_a目录中的所有数据限速300k,file_b目录中的所有数据不限速
4.2 方案
使用limit_rate指令限制速度
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:
1)定义limit_rate限制
- [root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
- http {
- ...
- limit_rate 100k; #全局限速
- server {
- limit_rate 200k; #虚拟主机限速
- listen 80;
- server_name www.b.com;
- root html;
- index index.html;
- location /file_a {
- limit_rate 300k; #file_a目录限速300k
- }
- location /file_b {
- limit_rate 0k; #file_b目录不限速
- }
- }
2)创建测试目录
- [root@web1 nginx]# mkdir html/file_a
- [root@web1 nginx]# mkdir html/file_b
3)创建测试文件
- [root@web1 nginx]# dd if=/dev/zero of=html/test.img bs=100M count=1
- [root@web1 nginx]# dd if=/dev/zero of=html/file_a/test.img bs=100M count=1
- [root@web1 nginx]# dd if=/dev/zero of=html/file_b/test.img bs=100M count=1
下载测试
- wget www.a.com/test.img
- wget www.b.com/test.img
- wget www.b.com/file_a/test.img
- wget www.b.com/file_b/test.img
连接限制(非必须配置)
修改用户访问连接限制,使一个客户同时打开多个连接也无法突破限制
首先安装ngx_http_limit_conn_module模块
- http {
- limit_conn_zone $binary_remote_addr zone=addr:10m;
- server {
- location /app {
- limit_rate 30k;
- limit_conn addr 1 ;
- }
5 案例5:Nginx实现跨域
5.1 问题
网站中通过脚本调用不同端口、域名、协议的数据时被浏览器阻拦:
- 比如一个80端口的网站,无法访问同网站下8080端口的数据
5.2 方案
默认情况下,浏览器根据同源策略,会拦截非本网站端口、域名、协议的数据,通过配置Nginx跨域指令即可解决
5.3 步骤
实现此案例需要按照如下步骤进行。
创建2个虚拟主机,一个80端口(这个用默认配置即可),一个8080端口
1)为proxy主机的添加8080虚拟主机
- [root@proxy nginx]# vim conf/nginx.conf
- server {
- listen 8080;
- charset utf8;
- location / {
- root html;
- index index.html;
- }
- }
- [root@proxy nginx]# sbin/nginx -s reload
2)创建2个测试页面 (直接创建对应文件,再把内容拷贝进入相应文件中测试)
- [root@proxy nginx]# cat html/press.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>API-test</title>
- <script>
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'http://192.168.99.5:8080/api.html',true);
- xhr.send();
- function change(){
- if(xhr.readyState==4 && xhr.status==200){
- alert(xhr.responseText);
- }
- }
- </script>
- </head>
- <body>
- <input id="button" type="button" value="测试" οnclick="change();">
- </body>
- [root@proxy nginx]# cat html/api.html
- 8080虚拟主机测试页面
3)打开浏览器,访问http://192.168.99.5/press.html,点击按钮无反应,此时在8080虚拟主机中添加即可允许从任意地址请求8080的数据
- [root@proxy nginx]# vim conf/nginx.conf
- server {
- listen 8080;
- charset utf8;
- location / {
- add_header 'Access-Control-Allow-Origin' '*'; #服务器响应数据中添加允许跨域访问
- root html;
- index index.html;
- }
- }
- [root@proxy nginx]# sbin/nginx -s reload
再次访问http://192.168.99.5/press.html,点击按钮即可看到8080端口的页面
4)修改具体允许请求的地址,增加安全
- [root@proxy nginx]# vim conf/nginx.conf
- server {
- listen 8080;
- charset utf8;
- location / {
- add_header 'Access-Control-Allow-Origin' 'http://192.168.99.5';
- root html;
- index index.html;
- }
- }
- [root@proxy nginx]# sbin/nginx -s reload
OPERATION day5
一、软件测试基本概念
按照测试内容分类:
功能测试:业务流程是否正常实现
例如:
性能测试:线上产品各项性能是否符合设计预期。
例如:响应时间、吞吐能力、实务处理数量等。
安全测试:渗透测试,由网络安全师参与,模拟各种API接口注入情况测试。
例如:
其他: 线上产品的实用性,兼容性,是否利于安装等进行相关测试。
目的:1.评估系统能力。2.识别产品体系存在的缺点。3.系统调优,让产品更好运行。
4.验证产品稳定性和可靠性。
二、Jmeter( 朱米特) 安装与配置
1 案例1:部署JMeter环境
1.1 问题
本案例要求部署JMeter环境,具体要求如下:
- 安装JMeter软件包
- 安装JDK
- 设置环境变量
- 调整软件设置
1.2 方案
使用1台windows主机,下载JMeter、JDK软件包。
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:安装软件
从/linux-soft/s2/wk/jmeter目录下载apache-jmeter-5.6.3.zip与jdk-8u291- windows-x64.exe到windows系统中
双击jdk-8u291- windows-x64.exe并按照下图安装
图-1
图-2
图-3
图-4
解压缩apache-jmeter-5.6.3.zip到任意位置
步骤二:设置变量
找到此电脑图标->右键菜单里选择“属性”->高级系统设置->环境变量
图-5
图-6
图-7
设置变量
图-8
图-9
图-10
图-11
检测变量,在cmd命令行窗口依次输入set JAVA_HOME用来检查java路径,set JMETER_HOME用来检查jmeter路径,set Path用来检查java和jmeter路径,java -version用来检查java版本,jmeter -v用来检查jmeter版本
图-12
以下是在 配置好 windows 环境变量后在CMD运行窗口输的检查命令。
步骤三:调整软件设置
运行软件,双击apache-jmeter-5.6.3\bin中的jmeter.bat或者在cmd命令行输入jmeter即可,注意软件弹出的cmd窗口不要关闭
软件默认是英文,汉化可以到apache-jmeter-5.6.3\bin\jmeter.properties文件中,添加language=zh_CN,然后重启软件
设置背景颜色
三 、Jmeter 脚本制作 、传参
在进行软件测试前,需要我们首先认识 jmeter 的主要元件,才能进行下一步的脚本制作与传参设置。
2 案例2:web服务器基本测试
2.1 问题
实现以下要求:
- 使用新的测试计划
- 添加线程组、取样器、监听器
- 测试web服务并查看结果
2.2 方案
运行JMeter与web服务,通过取样器的http请求进行测试
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:打开JMeter,新建测试计划,添加线程组、取样器、监听器
添加线程组,可以根据需求设置对应参数
图-14
图-15
线程数:
线程数,虚拟用户数,也可以理解为并发请求数。一个虚拟用户占用一个线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
Ramp-Up时间(秒):
用于告知JMeter 设置的虚拟用户数需要多长时间全部启动。如果线程数为10,Ramp-Up时间为2,那么需要2秒钟启动10个线程,也就是平均每秒钟启动5个线程,也就是每隔0.2秒启动一个线程。值是0,代表JMeter 将立即启动所有线程。
循环次数:
每个线程发送请求的次数(每个虚拟用户执行几次)如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本或调度器里设置的持续时间到期。
添加取样器,可以根据需求设置对应参数
图-16
图-17
HTTP请求方法是指客户端发送给服务器的请求类型,表示客户端想要对服务器资源执行的操作类型。常见的HTTP请求方法包括:
GET方法:
请求获取服务器资源,比如查看某网页,GET把参数包含在URL中。
POST方法:
请求向服务器提交要被处理的数据,POST一般通过Request Body传递参数将请求整体提交给服务器。
图-18
添加监听器并查看结果
图-19
图-20 (失败日志和成功日志,可以自己筛选)
图-21
图-22
还可以创建多个测试页面,然后添加多个取样器模拟用户在多个不同页面间跳转的行为
图-23
添加固定定时器,调节线程组每次循环测试的间隔时间
图-24
图-25
添加聚合报告,可以看到详细信息
图-26
图-27
参数解释:
样本数(Samples):已执行的请求数量,即发送给服务器的请求数量。
平均值(Average):所有样本的响应时间的平均值。
中位数(Median):所有样本的响应时间的中位数,即将所有样本的响应时间按大小排序后位于中间的值。
90%响应时间(90% Line):所有样本中的90%的响应时间都小于此值。
95%响应时间(95% Line):所有样本中的95%的响应时间都小于此值。
99%响应时间(99% Line):所有样本中的99%的响应时间都小于此值。
最小值(Min):所有样本的响应时间中的最小值。
最大值(Max):所有样本的响应时间中的最大值。
异常百分比(Error %):错误数占总样本数的百分比。
吞吐量(Throughput):每秒完成的样本数,表示服务器的处理能力。
接收KB/秒(Received KB/sec):每秒接收的数据量,单位为KB。
发送KB/秒(Sent KB/sec):每秒接收的数据量,单位为KB。
补充知识:
RT (Response Time)(响应时间),从发起请求到完全接收到应答的时间消耗QPS(Queries Per Second):每秒查询率,表示系统每秒处理的请求数量,反映了系统的负载能力和性能。TPS(Transactions Per Second):每秒事务处理量,表示系统每秒处理的事务数量,用于衡量系统的吞吐量和性能。
3 web服务器并发测试
3.1 问题
实现以下要求:
- 对web服务进行压力测试
- 将结果生成HTML报告
3.2 方案
运行JMeter与web服务,通过取样器的http请求进行测试
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:打开JMeter,新建测试计划,添加线程组、取样器、监听器
添加线程组,参数设置如下
线程数:10000
(可以由小至大逐步测试)
其他未提及参数为默认
添加取样器,参数设置如下
协议:http
IP:192.168.99.5
端口号:80
HTTP请求方法:GET
路径:index.html
内容编码:utf-8
保存结果 ( 可以自己找过好位置存放。)
图-28
将结果生成html报告页面
图-29
图-30
图-31
存储报告的目录必须为空,否则会出现“isnt empty”的提示
图-32
打开test文件夹,访问index.html页面,查看结果
图-33
如果要提高并发测试效率,可采用命令行的方式:
- jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
说明:
-n :以非GUI形式运行Jmeter
-t :jmx 脚本路径
-l :运行结果保存路径
-e :在脚本运行结束后生成html报告
-o :保存html报告的路径, 此文件夹必须为空或者不存在
[jmx file]指定.jmx 文件的路径和文件名称,要求该脚本必须要存在
[results file]指定.jtl 格式的测试结果文件的存储路径和文件名称,要求该文件一定不存在,存储路径位置要求存在,运行后能自动生成该文件
[Path to web report folder] 指定.html格式的测试结果报告文件的存储路径,这是一个不存在的文件夹的路径。
注意事项:
如果[jmx file]不存在,就会报错
如果[results file]或[Path to web report folder]存在,就会报错。
按上述说明,可在C:盘创建jmeter文件夹后执行:
- jmeter -n -t c:\jmeter\HTTP01.jmx -l c:\jmeter\HTTP01.jtl -e -o c:\jmeter\HTTP01
4 案例4:JMeter传参
4.1 问题
- 利用Nginx部署可传参页面
- 使用JMeter测试页面
4.2 方案
配置LNMP实现对PHP页面的支持。
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一: 配置LNMP
1)安装LNMP相关软件包
- [root@proxy nginx]#killall nginx #停止nginx程序
- [root@proxy nginx]#cd /root/lnmp_soft/nginx-1.22.1
- [root@proxy nginx-1.22.1]#rm -rf /usr/local/nginx #删除nginx原有目录
- [root@proxy nginx-1.22.1]# yum -y install gcc make openssl-devel pcre-devel
- [root@proxy nginx-1.22.1]# ./configure
- [root@proxy nginx-1.22.1]# make && make install
- [root@proxy ~]# yum -y install mariadb mariadb-server mariadb-devel
- [root@proxy ~]# yum -y install php php-mysqlnd
- [root@proxy ~]# yum -y install php-fpm
2)修改配置
- [root@proxy etc]# vim /etc/php-fpm.d/www.conf
- [www]
- listen.acl_users = apache,nginx,nobody #添加nobody账户
- [root@proxy etc]#systemctl restart php-fpm #重启服务
- [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
- ...
- location ~ \.php$ { #~是使用正则表达式,匹配以.php结尾
- root html;
- #fastcgi_pass 127.0.0.1:9000; #注释或删除该行
- fastcgi_pass unix:/run/php-fpm/www.sock; #将请求转发给php-fpm进程
- fastcgi_index index.php;
- #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi.conf;
- }
3)启动服务
- [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
- [root@proxy ~]# systemctl start mariadb
步骤二:测试可传参页面
按下文编写页面
- [root@proxy ~]#vim /usr/local/nginx/html/test_post.php
- <?php
- // 检查是否收到POST请求
- if ($_SERVER["REQUEST_METHOD"] == "POST") {
- // 检查是否收到名为"abc"的POST参数
- if (isset($_POST['abc'])) {
- $abcValue = $_POST['abc'];
- // 直接返回接收到的数值
- echo $abcValue;
- } else {
- echo '缺少参数abc';
- }
- } else {
- echo '请使用POST方法访问';
- }
- ?>
使用JMeter测试页面,在线程组中添加http请求取样器,参数设置如下
协议:http
IP:192.168.99.5
端口号:80
HTTP请求方法:GET或POST
路径:test_post.php
内容编码:utf-8
运行测试后,如果用的是GET方法,在查看结果树中得到的结果是“请使用POST方法访问”,如果是POST方法但没有给abc参数,得到的结果是“缺少参数abc”,如果定义了abc参数,那么返回的是abc的值,下图是定义过程
图-34
图-35
5 案例5:HTTP Cookie管理器
5.1 问题
实现以下要求:
- 使用JMeter测试登录页面
- 配置HTTP Cookie管理器
- 抓包分析登录页面
5.2 方案
利用LNMP环境运行可登录页面,安装抓包软件Fiddler分析网站键值对,在JMeter中添加HTTP Cookie管理器实现Cookie保存
5.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:部署登录页面
拷贝带登录效果的测试页面页
- cd ~/lnmp_soft/php_scripts/
- tar -xf php-session-demo.tar.gz #释放带登录功能的网页
- cp -r php-session-demo/* /usr/local/nginx/html/ #拷贝页面到nginx中
注:在html目录下,index.php是登录前页面 ,home.php是登录后才能看的页面,其中login.php是使用POST方法的后台页面,此页面被index.php自动调用
使用火狐浏览器访问http://192.168.99.5/index.php 可以看到有登录界面的网页
图-36
了解概念:
Session:存储在服务器端,保存用户名、登陆状态等信息。通常默认位置是/var/lib/php/session/
Cookies:由服务器下发给客户端,保存在客户端的一个文件里。保存的内容主要包括:SessionID。
步骤二:使用JMeter测试登录页面
使用JMeter测试页面,在线程组中添加http请求取样器,参数设置如下
协议:http
IP:192.168.99.5
端口号:80
HTTP请求方法:GET
路径:index.php
内容编码:utf-8
启动测试脚本后,查看结果树中可以正常看到登录前页面
在JMeter中将请求方法改成POST,然后按图添加参数
图-37
启动测试脚本后,查看结果树中依然只可以看到登录前页面,而不是登录后页面,因为JMeter默认状态下不会保存Cookie
添加HTTP Cookie管理
图-38
再次启动测试脚本后,可以看到登录后页面
图-39
步骤三:安装Fiddler( 可以去官网下)————软件是抓包工具,找免费破解的下。
正版虽然好用,但是有试用期啊。推荐站内内版主的安装包途径。-------
土豪随意~~
在jmeter目录中找到FiddlerSetup.exe,双击运行,按下图顺序安装
图-40
图-41
图-42
运行Fiddler
图-43
左侧栏是网站访问记录,可以按ctrl+x清空,左下角的Capturing可以设定是否开始抓包,默认开始,点一下可以暂停抓包
图-44
打开windows中的浏览器,访问192.168.99.5/index.php,输入用户名与密码登录后,回到Fiddler即可看到左侧栏出现“绿色向右”的箭头就是POST方法提交的页面,双击该地址可以在右边看到Name与Value,也就是网站提交数据的键值对参数名
图-45
这两个软件主要是来测试你开发的产品的各项性能和参数传递情况是否正常的,重点关注如何分析聚合报告的各项指标。进而分析出产品的载荷和性能情况是否良好。O(∩_∩)O
operation day6
一、Jmeter 使用进阶
1 案例1:使用响应断言1
1.1 问题
本案例使用JMeter的响应断言功能具体要求如下:
测试正常http状态码,如200
测试单一响应文本内容,内容根据页面定义
使用断言结果监听器查看测试状况
1.2 方案
开启JMeter,添加线程组---取样器---监听器、响应断言、断言结果监听器。
具体步骤如下:
步骤一:响应代码匹配测试
1) 添加线程组,参数默认
2) 线程组中添加http请求取样器,参数如下图,另外端口号80,内容编码utf-8,其余未提及参数默认即可
图-1
3)http请求取样器中添加监听器---查看结果树
4) http请求取样器中添加响应断言,参数如下图
图-2
http请求取样器中添加监听器---断言结果
查看结果,正常
图-3
步骤二:响应文本测试
修改响应断言的参数,如下图:
图-4
查看结果,异常时会显示失败消息
图-5
2 案例2:使用响应断言2
2.1 问题
本案例使用JMeter的响应断言功能具体要求如下:
测试错误http状态码,如404
测试多项文本内容,内容根据页面定义
使用断言结果监听器查看测试状况
2.2 方案
使用上题线程组继续测试
具体步骤如下:
步骤一:错误状态码测试
首先测试任意正常http页面,响应断言参数如下
图-6
由于该页面没有返回404状态码,所以可以看到响应断言结果如下:
图-7
修改被测试页面为不存在的页面,结果一定是404状态码,由于该页面本身处于报错状态,则结果也算错误,但此页面的状态码并不是被查找的目标,此时如果仅仅要在多个测试中找到未出现404的状态码报错即使把“仅错误日志”勾选也无效,解决方案是把响应断言中的“忽略状态”也勾选
图-8
图-9
步骤二:测试多项文本内容
首先测试任意正常http页面,比如index.html(nginx默认页即可),添加2个测试模式,内容如下图,之前设置的“仅错误日志”与“忽略状态”都取消勾选
图-10
按上图配置启动测试,得到结果是没有断言信息,因为在默认情况下,使用多个测试模式时,其关系为and(并且),也就是所有模式都匹配成功,算正常
图-11
将测试模式其中之一修改为不存在的值之后,启动测试则看到响应断言
图-12
图-13
将“或者”勾选后,and关系变成or,也就是只要有一个匹配成功,就算正常,启动测试后,看到成功结果
3 案例3:多用户测试
3.1 问题
本案例要求如下:
- 添加用户参数
- 为网站定义多个不同用户登录测试
3.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:创建JMeter脚本
添加取样器,参数设置如下
图-15
添加查看结果树
添加HTTP Cookie管理器
添加用户参数,配置3个用户,同时线程组中修改线程数要大于等于3
图-16
步骤二:运行脚本
打开查看结果树,验证参数测试
图-17
4 案例4:CSV参数测试
4.1 问题
本案例要求如下:
- 添加CSV参数
- 测试多项文本内容,内容根据页面定义
4.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:创建JMeter脚本
添加取样器,参数设置如下
协议:http
IP:192.168.99.5
端口号:80
HTTP请求方法:POST
路径:login.php
内容编码:utf-8
参数:
username ${name}
Password ${pass}
添加查看结果树
添加HTTP Cookie管理器
创建CSV文件,利用文本工具编写内容,然后修改扩展名比如user_login.csv,格式utf-8,内容如下:
用户名,密码
abc1,1111
abc2,2222
abc3,3333
abc4,4444
abc5,5555
添加CSV
图-18
配置CSV参数,读取之前的user_login.csv
图-19
步骤二:运行脚本
打开查看结果树,验证参数测试
5 案例5:函数测试
5.1 问题
本案例要求如下:
- 使用函数为网站定义随机值进行登录测试
- 用户名是随机字符串,密码是随机整数
5.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:创建JMeter脚本
添加取样器,参数设置如下
协议:http
IP:192.168.99.5
端口号:80
HTTP请求方法:POST
路径:login.php
内容编码:utf-8
参数:
username ${__RandomString(10,abcdefg,)} #__RandomString函数代表随机字符串,10代表字符串长度,abcdefg代表可能出现的字符
Password ${__Random(100,200,)} #__Random函数代表随机整数,从100到200
添加查看结果树
添加HTTP Cookie管理器
步骤二:运行脚本
打开查看结果树,验证参数测试
定义函数时可以利用函数助手对话框
图-20
图-21
6 部署新网站
网站模版网上很多,想自己下的可以去选带有注册登录功能的。
6.1 问题
案例需要使用功能更多的网站:
可进行账号注册
可用已有注册账号登录
可设置个人留言
页面数量多
6.2 方案
使用成品商城网站
具体步骤如下:
步骤一:从真实主机JMeter目录拷贝网站数据
在之前s2/wk/JMeter目录中找到source.tar文件(需要提前拷贝到虚拟机root家目录),释放后将其中ecshop目录中所有文件拷贝到nginx网站根目录下
- [root@proxy ~]# tar -xf source.tar
- [root@proxy ~]# cp -r source/ecshop/* /usr/local/nginx/html
浏览器访问192.168.99.5/index.php,按图走完步骤,如果发现网站目录没有权限时,执行chmod -R 777 /usr/local/nginx/html/即可 赋权操作 ,不赋权安装不了。
图-22
图-23
图-24
图-25
步骤二:测试网站
重回http://192.168.99.5/index.php后看到主页
图-26
人工做一些访问测试,如注册,登录,留言
图-27
图-28
7 利用新网站批量创建账户
7.1 方案
先使用抓包工具Fiddler抓取网站在注册时出现的参数,在配合用户参数+CSV参数
具体步骤如下:
步骤一:使用Fiddler抓包
浏览器打注册页面http://192.168.99.5/user.php?act=register,填写注册信息
打开Fiddler软件,抓取上述注册环节中向网站提交的参数,通常如下图:
图-29
步骤二:编写JMeter脚本
JMeter中添加取样器,参数设置如下
协议:http
IP:192.168.99.5
端口号:80
HTTP请求方法:POST
路径:user.php?act=register
内容编码:utf-8
参数:
图-30
创建CSV参数文本,内容为要创建的多个账户信息,比如:
用户名,密码
abc001,1111
abc002,2222
abc003,3333
abc004,4444
abc005,5555
在JMeter脚本中添加CSV数据文件设置
图-31
线程组的线程数设置数量要等于创建的用户数
启动JMeter脚本,查看结果
二、 Toomcat应用案例
8 案例6:安装部署Tomcat服务器
TOMCAT服务器是有JAVA编写的,看动态网页十分便利,比较于其他类型网页服务模块。
8.1 问题
本案例要求部署Tomcat服务器,具体要求如下:
- 安装部署JDK基础环境
- 安装部署Tomcat服务器
- 创建JSP测试页面
然后客户机访问此Web服务器验证效果:
- 使用火狐浏览器访问Tomcat服务器的8080端口,浏览默认首页
- 使用火狐浏览器访问Tomcat服务器的8080端口,浏览测试页面
8.2 方案
使用2台虚拟机,一台作为Tomcat服务器、另外一台作为测试用的客户机
使用yum安装JDK基础环境
使用源码安装部署Tomcat服务器
8.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:部署Tomcat服务器软件
1)使用RPM安装JDK环境
- [root@web1 ~]# yum -y install java-1.8.0-openjdk #安装JDK
- [root@web1 ~]# java -version #查看JAVA版本
2)安装Tomcat
- [root@web1 lnmp_soft]# tar -xf apache-tomcat-8.0.30.tar.gz
- [root@web1 lnmp_soft]# mv apache-tomcat-8.0.30 /usr/local/tomcat
- [root@web1 lnmp_soft]# ls /usr/local/tomcat
- bin/ #主程序目录
- webapps/ #页面目录
- conf/ #配置文件目录
- logs/ #日志目录
- temp/ #临时目录
- work/ #自动编译目录
- lib/ #库文件目录
3)启动服务
- [root@web1 ~]# /usr/local/tomcat/bin/startup.sh
4)服务器验证端口信息
- [root@web1 ~]# ss -nutlp |grep java #查看java监听的端口
- tcp 0 0 :::8080 :::* LISTEN 2778/java
- tcp 0 0 :::8009 :::* LISTEN 2778/java
- tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 2778/java
http://192.168.99.100:8080
步骤二:修改Tomcat配置文件
1)创建静态页面
- [root@web1 tomcat]# echo "tomcat-test~~~~" > webapps/ROOT/test01.html
浏览器访问http://192.168.99.100:8080/test01.html
2)测试JSP页面
- [root@web1 ~]# vim /usr/local/tomcat/webapps/ROOT/test02.jsp
- <html>
- <body>
- <center>
- Now time is: <%=new java.util.Date()%>
- </center>
- </body>
- </html>
浏览器访问http://192.168.99.100:8080/test02.jsp
3)测试自动解开war包功能
- [root@proxy tomcat]# yum -y install java-1.8.0-openjdk-devel
- [root@proxy tomcat]# jar -cf a.war /var/log #之后可以使用jar命令打war包
- [root@proxy tomcat]# cp a.war webapps #将war包放入虚拟主机的网页目录
- [root@proxy tomcat]# ls webapps #检查,可以看到已经自动解开
三、maven(天堂制造 made in heaven)应用案例
maven是一款软件项目管理工具。
9 案例7:使用Maven部署网站系统
9.1 问题
通过安装配置Maven,实现如下目标:
- 配置镜像地址
- 打包并上线网站项目
9.2 方案
通过tar包安装Maven
- 释放tar包,拷贝到/usr/local目录
- 安装并运行数据库
- 打包网站项目,之后利用tomcat上线该网站
9.3 步骤
实现此案例需要按照如下步骤进行。
以后需要数量使用,工作中用得到。
步骤一:安装maven工具,以及java环境
将三个文件传入虚拟机root的家目录,原地释放
apache-maven-3.6.3-bin.tar.gz #maven工具包
cms.tar.gz #网站项目
m2.tar.gz #依赖程序,释放之后是隐藏目录.m2
1)释放tar包,并拷贝到指定目录
- [root@web1 ~]# tar -xf apache-maven-3.6.3-bin.tar.gz
- [root@web1 ~]# mv apache-maven-3.6.3 /usr/local/maven
2)安装java依赖包
- [root@web1 ~]# yum -y install java-1.8.0-openjdk
- [root@web1 ~]# yum -y install java-devel
3)修改镜像地址,在第158行下添加
- [root@web1 ~]# vim /usr/local/maven/conf/settings.xml
- <mirror>
- <id>nexus-aliyun</id>
- <mirrorOf>*</mirrorOf>
- <name>Nexus aliyun</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public</url>
- </mirror>
步骤二:配置数据库并打包项目
1)配置数据库
- [root@web1 ~]# yum install -y mariadb-server
- [root@web1 ~]# systemctl start mariadb
- [root@web1 ~]# cd CMS/
- [root@web1 CMS]# cp src/main/resources/shishuocms.properties . #拷贝网站数据库配置文件到当前目录,该文件定义了数据的用户名和密码等信息
- [root@web1 CMS]# mysql -uroot < sql/install.sql #导入网站相关数据库文件
- Enter password: 直接回车
- [root@web1 CMS]# mysqladmin password #修改数据库密码
- New password: #接下来输入12345678
- Confirm new password: #在输入一次12345678
如果数据库密码输入错误
- mysqladmin password -uroot -p #改密码,先输入旧密码,然后输入两次新密码
如果数据库密码忘记
- systemctl stop mariadb #停服务
- yum -y remove mariadb-server #删除
- rm -rf /var/lib/mysql/ #删除数据库文件,这样密码就没了
- yum -y install mariadb-server #重装
- systemctl start mariadb #启动数据库
2)打包项目
- [root@web1 CMS]# /usr/local/maven/bin/mvn clean package #按照之前定义的
- 公网服务器地址、数据库配置等内容打包项目,注意该命令要在CMS目录进行
步骤三:上线测试
- rm -rf /usr/local/tomcat/webapps/ROOT #删除原有默认页面目录
- cp target/shishuocms-2.0.1.war /usr/local/tomcat/webapps/ROOT.war #将新项目移动到tomcat中,然后会自动解包,然后真机打开浏览器访问192.168.99.100:8080看到“师说”页面则成功
operation day7
一、RPM打包操作、
1 案例1:制作nginx的RPM包
制作RPM包就好比做菜,你首先明确自己要做什么菜系,然后需要看菜谱做菜或者在菜谱基础上自由发挥。
1.1 问题
本案例使用nginx-1.22.1版本的源码软件,生成对应的RPM包软件,具体要求如下:
软件名称为nginx
软件版本为1.22.1
RPM软件包可以查询描述信息
RPM软件包可以安装及卸载
1.2 方案
安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。
配置文件中的描述信息如表-1:
表-1 SPEC描述信息
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:安装rpm-build软件
1)安装rpm-build软件包
- [root@web1 ~]# yum -y install rpm-build
2)生成rpmbuild目录结构
- [root@web1 ~]# rpmbuild -ba nginx.spec #会报错,没有文件或目录
- [root@web1 ~]# ls /root/rpmbuild #自动生成的目录结构
- BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
3)准备工作,将源码软件复制到SOURCES目录
- [root@web1 ~]# cp nginx-1.22.1.tar.gz /root/rpmbuild/SOURCES/
4)创建并修改SPEC配置文件(食材准备)
- [root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec
- Name:nginx #源码包软件名称
- Version:1.22.1 #源码包软件的版本号
- Release: 1 #制作的RPM包版本号
- Summary: nginx is a web server software. #RPM软件的概述
- License:GPL #软件的协议
- URL: www.test.com #网址
- Source0:nginx-1.22.1.tar.gz #源码包文件的全称
- #BuildRequires: #制作RPM时的依赖关系
- Requires: pcre-devel openssl-devel #安装RPM时的依赖关系
- %description
- nginx is an HTTP and reverse proxy server. #软件的详细描述
- %post
- useradd nginx #非必需操作:安装后脚本(创建账户)
- %prep
- %setup -q #自动解压源码包,并cd进入目录
- %build
- ./configure
- make %{?_smp_mflags}
- %install
- make install DESTDIR=%{buildroot}
- %files
- %doc
- /usr/local/nginx/* #对哪些文件与目录打包
- %changelog
步骤二:使用配置文件创建RPM包
1)安装依赖软件包
- [root@web1 ~]# yum -y install gcc make pcre-devel openssl-devel
2)rpmbuild创建RPM软件包(大工告成)
- [root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
- [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-1.x86_64.rpm
步骤三:安装软件
- [root@web1 ~]# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-1.x86_64.rpm
- [root@web1 ~]# rpm -qa |grep nginx
- [root@web1 ~]# ls /usr/local/nginx/
二、VPN服务器简单了解使用(多的企业不敢教)
以下给了几个例子,windows 连接虚拟机的可以看案例4.
3 案例2:Linux客户端连接WireGuard
3.1 问题
在web1主机中运行WireGuard,实现VPN服务端功能:
3.2 方案
准备两台Linux系统,安装wireguard-tools等软件包并配置
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:配置服务端
首先将$教学资料目录/vpn目录拷贝到虚拟机/usr/local/nginx/html下
在服务端安装VPN软件
- [root@proxy ~]#cd /usr/local/nginx/html/vpn/linux
- [root@proxy linux]# ls
- kernel-core-4.18.0-513.11.1.el8_9.x86_64.rpm
- wireguard-tools-1.0.20210914-1.el8.x86_64.rpm
- kmod-wireguard-1.0.20220627-6.el8_9.elrepo.x86_64.rpm
- [root@proxy linux]# yum -y install ./*.rpm
- [root@proxy linux]# reboot #重启服务器后,内核选择4.18.0-513.11.1.el8_9.x86_64(通常作为默认,确认即可)
制作密钥文件
- [root@proxy ~]#cd /usr/local/nginx/html/vpn/linux
- [root@proxy linux]# wg genkey | tee private.key | wg pubkey > public.key #生成私钥存入private.key,再利用私钥生成公钥存入public.key
- [root@proxy linux]# cp public.key ../ser.txt #拷贝一份方便客户端通过浏览器查看
- [root@proxy linux]# cat public.key UygBBCi6gEX5aJ0hMpKjBXDxltsV4+yI4NQTqK1ih1k=
- [root@proxy linux]# cat private.key
- GB2NbtPoAEvNufEggKM41GNEUBlxfJfVYn4i9yJ4WlU=
编写配置文件
- [root@proxy linux]# cd /etc/wireguard
- [root@proxy wireguard]# vim wg.conf
- [Interface] #服务端配置
- PrivateKey = GB2NbtPoAEvNufEggKM41GNEUBlxfJfVYn4i9yJ4WlU= #服务器的私钥
- Address = 10.10.10.1/8 #VPN隧道里面的IP和网段
- ListenPort = 54321 #WireGuard服务监听的端口
- [Peer] #对端(客户端)配置
- PublicKey = #客户端的公钥,稍后获取
- AllowedIPs = 10.10.10.2/32 #允许哪些客户端访问VPN服务器 ,32代表ip的二进制32位必须和10.10.10.2一样,也就是ip必须为10.10.10.2的客户才能访问
启动服务,注意,该步骤必须在上述配置文件获取客户端的公钥才可进行
- [root@proxy wireguard]# wg-quick up wg #启动VPN服务,wg是之前配置文件的名称
- [root@proxy wireguard]# ss -ntulp | grep 54321 #检查端口
- [root@proxy wireguard]# systemctl stop firewalld
- [root@proxy wireguard]# ifconfig #查看
步骤二:配置客户端
首先将$教学资料目录/vpn/linux目录拷贝到虚拟机/root下
在客户端安装VPN软件
- [root@web1 ~]#cd linux
- [root@web1 linux]# ls
- kernel-core-4.18.0-513.11.1.el8_9.x86_64.rpm
- wireguard-tools-1.0.20210914-1.el8.x86_64.rpm
- kmod-wireguard-1.0.20220627-6.el8_9.elrepo.x86_64.rpm
- [root@web1 linux]# yum -y install ./*.rpm
- [root@web1 linux]# reboot #重启服务器后,内核选择4.18.0-513.11.1.el8_9.x86_64(通常作为默认,确认即可)
制作密钥文件
- [root@web1 ~]#cd linux
- [root@web1 linux]# wg genkey | tee private.key | wg pubkey > public.key #生成私钥存入private.key,再利用私钥生成公钥存入public.key
- [root@web1 linux]# cat public.key
- I4PSki05VteWED39gh9XV03mBbkw/kCkq1QmQuT0XD0= #此处可以拷贝给服务端
- [root@web1 linux]# cat private.key
- 6NQ2iV8v+9pcUSW8omqWEr3k2ITYNhrZUq7WuosZj3I=
编写配置文件
- [root@web1 linux]# cd /etc/wireguard
- [root@web1 wireguard]# vim client.conf #新建文件(文件名任意)
- [Interface]
- PrivateKey = 6NQ2iV8v+9pcUSW8omqWEr3k2ITYNhrZUq7WuosZj3I= #客户端生成的私钥
- Address = 10.10.10.2/8 #VPN客户端的IP
- DNS = 8.8.8.8 #VPN客户端的DNS
- [Peer] #对端,需要连接的服务器
- PublicKey = UygBBCi6gEX5aJ0hMpKjBXDxltsV4+yI4NQTqK1ih1k= #服务器生成的公钥
- Endpoint = 192.168.99.5:54321 #VPN服务器的IP地址和端口
- AllowedIPs = 10.0.0.0/8 #哪些流量经过vpn传递
启动服务,注意,该步骤必须在上述配置文件获取客户端的公钥才可进行
- [root@web1 wireguard]# wg-quick up client #启动VPN客户端
- [root@web1 wireguard]# ping 10.10.10.1 #测试可以连通服务端的VPN内部地址表示成功!
4 案例3:Windows客户端连接WireGuard
以前用的网络服务是widows的 IIS服务,现在已经被市场上其他服务完美替代。
4.1 问题
使Windows系统成为VPN客户端,并连接VPN服务器
4.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:安装网站
在windows桌面左下角搜索中找“Windows功能”可以打开启动或关闭Windows功能界面,确定后可安装网站服务IIS(Internet Information Services)
图-1
使用任意主机的浏览器测试下访问192.168.99.12(如果windows配了这个地址),可以看到IIS默认的网站页面
图-2
在Windows系统中使用浏览器下载并双击安装192.168.99.5/vpn/wireguard-amd64-0.5.3.msi
运行WireGuard(在windows桌面左下角搜索或开始查找),可以在下列界面新建空隧道,然后写入参数
图-3
打开windows中的浏览器,访问192.168.99.5/vpn/ser.txt可以得到服务端的公钥,然后粘贴在下图中PublicKey配置后,然后在windows桌面新建一个文本文档,改名叫cli.txt,然后将下图中的“公钥(p)”的值拷贝到这个文本中,并将文本拷贝到C:\inetpub\wwwroot(拷贝时可能会弹出是要提供管理员权限,点继续即可)
图-4
回到服务器端,重新打开配置文件,按下面修改
- [root@proxy linux]# cd /etc/wireguard
- [root@proxy wireguard]# wg-quick down wg #停止服务
- [root@proxy wireguard]# vim wg.conf
- [Interface] #服务端配置
- PrivateKey = GB2NbtPoAEvNufEggKM41GNEUBlxfJfVYn4i9yJ4WlU= #服务器的私钥
- Address = 20.20.20.1/8 #修改VPN隧道里面的IP和网段
- ListenPort = 54322 #WireGuard服务监听的端口
- [Peer] #对端(客户端)配置
- PublicKey =pZMKLc3Kw0YfrwydVRF90bXy33ERSBW8zFp/6t13RlM= #客户端的公钥,这个公钥可以用curl 访问192.168.99.12/cli.txt 得到(该地址是windows的网站)
- AllowedIPs = 20.20.20.2/32 #允许哪些客户端访问VPN服务器
- [root@proxy wireguard]# wg-quick up wg #启动VPN服务
- [root@proxy wireguard]# ss -ntulp | grep 54322 #检查端口
回到windows客户端,按下图的连接按钮
图-5
在windows的cmd窗口ping 20.20.20.1,能通则说明配置成功!
图-6
5 案例4:frp连接Linux系统实现内网穿透
5.1 问题
任意设备想要访问一台内网Linux客户机的远程服务(sshd)
5.2 方案
准备两台Linux系统,proxy作为公网的Linux服务器,web1作为内网的Linux客户机
5.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:配置服务端
首先将$教学资料目录/frp/frp.tar.gz文件拷贝到两台Linux虚拟机的/root下,再将frp/frp.zip文件拷贝到proxy主机的/usr/local/nginx/html目录
在服务端安装部署frp软件
- [root@proxy ~]# tar -xf frp.tar.gz
- [root@proxy ~]# cd frp_0.53.2_linux_amd64
- [root@proxy frp_0.53.2_linux_amd64]# cat frps.toml #服务端配置文件
- bindPort = 7000 #确定服务端的端口号
- [root@proxy frp_0.53.2_linux_amd64]# ./frps & #执行服务端程序
- [root@proxy frp_0.53.2_linux_amd64]# ss -ntulp | grep frps
在客户端安装部署frp软件
- [root@web1 ~]# tar -xf frp.tar.gz
- [root@web1 ~]# cd frp_0.53.2_linux_amd64
- [root@web1 frp_0.53.2_linux_amd64]# mv frpc.toml frpc.ini
- [root@web1 frp_0.53.2_linux_amd64]# cat frpc.ini #客户端配置文件
- serverAddr = "192.168.99.5" #服务端ip
- serverPort = 7000 #服务端的端口号
- [[proxies]] #设置代理信息
- name = "test-tcp" #名称(随意)
- type = "tcp" #协议
- localIP = "127.0.0.1"
- localPort = 22 #本地业务端口
- remotePort = 6000 #服务端开启的代理端口,其他主机通过服务端的6000端口即可连接客户端的22号端口
- [root@web1 frp_0.53.2_linux_amd64]# ./frpc & #开启客户端程序
在服务端查看结果并测试
- [root@proxy frp_0.53.2_linux_amd64]# ss -ntulp | grep frps #可以看到服务端自动开启了6000端口
- [root@proxy frp_0.53.2_linux_amd64]# ssh 192.168.99.5 -p 6000 #使用任意设备访问
6 案例5:frp连接Windows系统实现内网穿透
6.1 问题
任意设备想要访问一台内网Windows客户机的网站服务(IIS)
6.2 方案
准备一台Linux系统与一台Windows系统,proxy作为公网的Linux服务器,Windows作为内网的客户机
6.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:配置服务端
先将$教学资料目录/frp/frp.zip文件拷贝到proxy主机的/usr/local/nginx/html目录(此文件之前如果已经拷贝则无需操作)
在Windows使用浏览器访问192.168.99.5/frp.zip下载frp软件
解压缩frp.zip,将frpc.exe与frpc.toml拷贝到C盘目录
修改frpc.toml为frpc.ini,打开frpc.ini编辑
- serverAddr = "192.168.99.5" #服务端ip
- serverPort = 7000 #服务端的端口号
- [[proxies]] #设置代理信息
- name = "test-tcp_win" #名称(随意)
- type = "tcp" #协议
- localIP = "127.0.0.1"
- localPort = 80 #本地业务端口
- remotePort = 8080 #服务端开启的代理端口,其他主机通过服务端的8080端口即可连接客户端的80号端口
打开cmd命令行窗口,执行
- cd c:\ #切换到c盘目录
- frpc.exe #执行frp客户端程序
在服务端查看结果并测试
- [root@proxy ~]# ss -ntulp | grep frps #可以看到服务端自动开启了8080端口
在真机打开浏览器访问192.168.99.5:8080即可看到Windows的网站
扩展实验-连接Windows远程桌面(非必做):
修改Windows的frpc.ini文件,将localPort与remotePort都设置为3389,并开启Windows的远程服务,这样其他任意主机即可通过proxy服务器的3389端口连接到Windows桌面,任意主机如果是Windows可以用mstsc指令,任意主机如果是Linux可以安装xfreerdp软件,并通过命令xfreerdp /u:Jacob /p:123 /w:1024 /h:768 /v:192.168.99.5:3389访问,/u是Windows的用户名,/p是密码
图-7
三、systemd 服务管理
7 案例6:编写systemd Unit文件
7.1 问题
本案例要求熟练掌握systemd进程如何管理其他服务器,具体要求如下:
- 熟悉systemctl常用命令
- 通过systemd管理Nginx服务
7.2 方案
- Unit文件语法格式参考表
7.3 步骤
实现此案例需要按照如下步骤进行。
步骤二:使用systemd管理shell脚本
1)编写shell脚本
- [root@web1 ~]# vim /root/test.sh
- #!/bin/bash
- while :
- do
- echo NB
- echo DACHUI
- sleep 1
- done
- [root@web1 ~]# chmod +x /root/test.sh
2)编写Unit文件
- [root@web1 ~]# cp /usr/lib/systemd/system/{crond.service,test.service}
- [root@web1 ~]# vim /usr/lib/systemd/system/test.service
- [Unit]
- Description=my test script
- After=time-sync.target
- [Service]
- ExecStart=/root/test.sh
- ExecReload=/bin/kill -HUP $MAINPID
- KillMode=process
- [Install]
- WantedBy=multi-user.target
步骤二:使用systemd管理Nginx服务
1)编写Unit文件
- [root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
- [Unit]
- Description=The Nginx HTTP Server #描述信息
- After=network.target remote-fs.target nss-lookup.target
- [Service]
- Type=forking
- #仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
- ExecStart=/usr/local/nginx/sbin/nginx
- ExecReload=/usr/local/nginx/sbin/nginx -s reload
- ExecStop=/bin/kill -s QUIT $MAINPID
- [Install]
- WantedBy=multi-user.target
- [root@web1 ~]#systemctl start nginx #可以控制nginx开启了,这里如果无效可以尝试重启服务器
小伙伴们,这个模块主要涉及了LAMP平台搭建过程中,各类软件的介绍与使用。其中实用性和熟练度要求较高的是软件灰度、压力、性能测试;网站后台数据分析与管理,线上产品的性能调优,内部外部网络的连通测试与使用。
想要了解相关软件的使用,可以进一步去知识世界里探索。(*^▽^*)