Conteúdo do curso:
Criar uma arquitetura LNMP WEB de nível empresarial, combate real
AWK, Sed, análise Grep nginx log
SHELL em um script para cortar a data Nginx;
1. Construir um combate de arquitetura LNMP WEB de nível corporativo:
quando o método de compilação make source code constrói a plataforma web nginx, o servidor web nginx padrão publica apenas um conjunto de onde voltar, e o código-fonte é uma página de teste, conforme mostrado na figura
2. Construir o combate real da arquitetura da web LNMP de nível empresarial,
AWK sed grep analisa o
shell de log nginx e se transforma em tutorial de corte de log nginx;
1. Construir o combate real da arquitetura da web LNMP de nível empresarial:
Como equipe de operação e manutenção, as responsabilidades do trabalho são: garantir o servidor empresarial, liberação de código, site Atualização, banco de dados, manutenção do sistema de negócios, etc .;
2. Na empresa, os desenvolvedores desenvolveram um conjunto de código do site, que é escrito com base na linguagem PHP e exige que o pessoal de operação e manutenção use o código do site PHP para obter acesso a usuários externos como operação e manutenção Como operar:
avalie o número de usuários (usuários simultâneos) visitando o site PHP no período posterior,
compre servidores online (Tencent Cloud Host, 8C16G8M) CPU de núcleo 8C, memória 16G, largura de banda de 8M
Sistema operacional Tencent Cloud Host (sistema operacional Linux Centos7.x) )
Registre o nome de domínio da extranet e arquivo para o registro ao mesmo tempo.Cvc.net acessará posteriormente o nome de domínio para
construir a estrutura LAMP e LNMMP WEB para publicação do site PHP;
//检查硬件环境:
[root@cdeba90ec46e /]# cat /etc/redhat-release
CentOS Linux release 7.6.2003 (Core)
[root@cdeba90ec46e /]# uname -a
Linux cdeba90ec46e 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@cdeba90ec46e /]# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 100G 4.5G 96G 5% /
tmpfs 910M 0 910M 0% /dev
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda5 100G 4.5G 96G 5% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 64M 1.1M 63M 2% /run
tmpfs 64M 0 64M 0% /run/lock
tmpfs 64M 0 64M 0% /var/log/journal
tmpfs 910M 0 910M 0% /tmp
3. Com base no host de nuvem Centos7 Linux, construa um conjunto de arquitetura LNMP WEB a partir de 0, publique e processe o código do site PHP
LNMP:
L: sistema operacional Linux (centos7) desenvolvido com base no kernel do Linux
N: Nginx de código aberto, servidor WEB gratuito de alto desempenho Software;
M: MySQL, banco de dados relacional Mariadb
P: Perl, Python, ambiente PHP e compilador PHP
O princípio de funcionamento da arquitetura LNMP: na arquitetura
LNMP WEB, o Nginx é um servidor WEB de alto desempenho, que por si só não pode lidar com PHP. Quando recebemos a solicitação HTTP Regtest enviada pelo navegador do cliente, o servidor Nginx responde e processa solicitações da web e recursos estáticos. O servidor nginx pode processar e responder diretamente às solicitações de arquivos estáticos, como CSS, imagens, vídeos e TXT.
A solicitação de página dinâmica de PHP nginx não pode ser processada diretamente, o servidor nginx transmitirá o script da web PHP para PHP-FPM (programa de gerenciamento de processo) por meio do protocolo de transferência de interface (protocolo de gateway)
PPH-FPM chama o analisador de PHP (PHP-CGI) Análise do analisador de PHP Informações do script PHP. Por fim, o interpretador PHP coloca o script analisado de volta em php-fpm, e php-fpm transmite as informações do script para a mãe na forma de fase-CGI, se mostrado;
Observação, a base da implantação do LNMP no ambiente docker arredores:
[root@localhost ~]# docker run -tid --net=none --name=centos7-nginx.yum.82qiye --privileged=true centos7-ssh:zabbix-agent /sbin/init
27ba4cba71d5991e7cf814fb268c421474cd4018f0a62c560655d2bbb69c0634
[root@localhost ~]# pipework br0 centos7-nginx.yum.82qiye 192.168.1.82/[email protected]
[root@localhost ~]# docker exec -it centos7-nginx.yum.82qiye /bin/bash
3. Existem duas maneiras principais de construir a plataforma LNMP WEB a partir de 0;
método binário YUM Método de
compilação do código-fonte MAKE
Aqui construímos LNMP com base no método binário YUM (a forma de fonte de rede, o servidor pode ser conectado à rede externa e a fonte LAN YUM é configurada) Operação
1. Implantar o nginx:
//1、添加Epel-release扩展源
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# ll /etc/yum.repos.d/|grep -aw epel
-rw-r--r-- 1 root root 951 Oct 3 2017 epel.repo
-rw-r--r-- 1 root root 1050 Oct 3 2017 epel-testing.repo
//2、安装nginx软件包:
[root@localhost ~]# yum -y install nginx //显示Complete!表示安装成功;
//3、检测nginx软件包是否安装成功
[root@27ba4cba71d5 ~]# rpm -qa |grep nginx
nginx-filesystem-1.14.1-9.module_el8.0.0+184+e34fea82.noarch
nginx-mod-http-perl-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-mail-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-all-modules-1.14.1-9.module_el8.0.0+184+e34fea82.noarch
nginx-mod-http-xslt-filter-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-stream-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
nginx-mod-http-image-filter-1.14.1-9.module_el8.0.0+184+e34fea82.x86_64
//4、查看端口和进程
[root@27ba4cba71d5 ~]# systemctl start nginx.service
[root@27ba4cba71d5 ~]# ps -ef |grep nginx
[root@27ba4cba71d5 ~]# netstat -tunlp |grep -aw 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 258/nginx: master p
tcp6 0 0 :::80 :::* LISTEN 258/nginx: master p
2. Implante o Mariadb:
//1、安装Mariadb:
[root@27ba4cba71d5 ~]# yum -y install mariadb-server mariadb mariadb-devel
//2、检测Mariadb安装是否成功:
rpm -qa |grep mariadb
//3、查看Mariadb进程和端口号;
[root@27ba4cba71d5 ~]# systemctl start mariadb.service
[root@27ba4cba71d5 ~]# ps -ef |grep mysql
mysql 452 1 0 08:04 ? 00:00:00 /usr/libexec/mysqld --basedir=/usr
root 518 121 0 08:04 ? 00:00:00 grep --color=auto mysql
[root@27ba4cba71d5 ~]# netstat -tunlp |grep -aw 3306
tcp6 0 0 :::3306 :::* LISTEN 452/mysqld
3. Implante o PHP:
//1、安装php
[root@27ba4cba71d5 ~]# yum -y install php php-devel php-fpm php-mysql
//2、检测PHP是否安装成功:
[root@27ba4cba71d5 ~]# rpm -qa |grep php
//3、查看PHP进程及端口号
[root@27ba4cba71d5 ~]# systemctl start php-fpm.service
[root@27ba4cba71d5 ~]# ps -ef |grep php
[root@27ba4cba71d5 ~]# netstat -tunlp|grep -aw 9000 //此时没有查到9000端口
4. De acordo com as instruções de implantação do LNMP acima, a implantação da plataforma LNMP está concluída, verifique seu progresso
[root@27ba4cba71d5 ~]# ps -ef |grep -wE "nginx|mysqld|php"
root 258 1 0 07:52 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 259 258 0 07:52 ? 00:00:00 nginx: worker process
nginx 260 258 0 07:52 ? 00:00:00 nginx: worker process
mysql 452 1 0 08:04 ? 00:00:03 /usr/libexec/mysqld --basedir=/usr
root 598 1 0 08:14 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
apache 599 598 0 08:14 ? 00:00:00 php-fpm: pool www
apache 600 598 0 08:14 ? 00:00:00 php-fpm: pool www
apache 601 598 0 08:14 ? 00:00:00 php-fpm: pool www
apache 602 598 0 08:14 ? 00:00:00 php-fpm: pool www
apache 603 598 0 08:14 ? 00:00:00 php-fpm: pool www
root 647 121 0 08:23 ? 00:00:00 grep --color=auto -wE nginx|mysqld|php
5. É necessário falar sobre a integração de configuração do nginx e php-fpm, de modo que quando o nginx detecta que o usuário solicita uma página da web dinâmica em PHP, o nginx envia a solicitação do usuário ao interpretador PHP-FPM back-end através do protocolo de gateway CGI e retira e configura o nginx.conf código mostrado abaixo:
//nginx配置:
[root@localhost nginx]#
location / { //第二步
root html;
index index.php index.html index.htm; //加上nginx.php表示引导页。
location ~ \.php$ {
root /usr/share/nginx/html; //更改发布目录 //第一步
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //添加$document_root;表示发布目录 //第三步
include fastcgi_params;
}
//查看nginx.conf文件并去掉#号空行。
[root@localhost nginx]# grep -vE "#|^$" nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; //以上为全局配置
server { //以下为server主机的配置
listen 80;
server_name localhost;
location / { //location /是正常匹配,处于正则匹配后执行。
root html;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ { //location ~是正则匹配,是优先匹配,
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //指定发布目录的变量,绝对路径也可以:/usr/share/nginx/html;
include fastcgi_params;
}
}
}
Depois que a mudança for concluída:
[root@27ba4cba71d5 nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@27ba4cba71d5 nginx]# nginx -s reload
6, nginx, diretório de lançamento php-fpm; / usr / share / nginx / html, crie index.php neste diretório, o conteúdo do código é o seguinte.
[root@27ba4cba71d5 nginx]# vim /usr/share/nginx/html/index.php
<?php
phpinfo();
?>
7. Publique o site através do LNMP:
//我们只需要把我们打开发包解压到发布目录就可以了:
[root@localhost ~]# ls
anaconda-ks.cfg web.html.tar
[root@localhost ~]# tar -zxvf web.html.tar /usr/share/nginx/html
3. AWK, Sed e Grep analisam registros Nginx;
1 Como uma equipe de operação e manutenção, o conteúdo do registro na empresa é usado principalmente para disparar erros e corrigir problemas. De acordo com as solicitações de erro do conteúdo do registro, o problema pode ser localizado na primeira vez e os problemas de disparo incorretos podem ser identificados. Resolva problemas rapidamente e reduza as perdas de negócios.
Na verdade, o conteúdo do log é usado para o pessoal de operação e manutenção, desenvolvedores e solução de problemas de DBA. Além disso, o conteúdo do log pode ser analisado, contado e avaliado, de modo a compreender o portal IP, PV, UV, acesso, alocação de recursos e uso. Esperar.
[root@localhost nginx]# cd /var/log/nginx/ //cd到nginx的日志目录
[root@localhost nginx]# ll
total 1764
-rw-rw-r-- 1 nginx root 1527988 Nov 3 22:13 access.log
-rw-r--r-- 1 root root 34543 Oct 31 11:45 access.log-20201031.gz
-rw-rw-r-- 1 nginx root 47309 Nov 1 10:12 access.log-20201101.gz
-rw-rw-r-- 1 nginx root 87592 Nov 2 13:24 access.log-20201102.gz
-rw-rw-r-- 1 nginx root 46903 Nov 3 12:41 access.log-20201103.gz
-rw-rw-r-- 1 nginx root 0 Nov 2 13:25 error.log
-rw-r--r-- 1 root root 1488 Oct 30 13:20 error.log-20201031.gz
-rw-rw-r-- 1 nginx root 299 Nov 1 18:11 error.log-20201102.gz
[root@localhost nginx]# more access.log //每一条都是一个用户的访问请求;
192.168.1.101 - - [03/Nov/2020:12:41:22 +0800] "POST /zabbix.php?action=notifications.get&sid=a2c13a51c1e3ec42&output=ajax HTTP/1.1" 200 436 "http://192.168.1.59/zabbix.php?action=da
shboard.view&ddreset=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"
1. Com base na programação do SHELL, três espadachins Awk, Sed, Grep analisam os logs online do Nginx, analisam e contam o número total de solicitações (visitas) do Nginx ao longo do dia. As instruções e métodos de operação são os seguintes:
//1、统计当天,总的用户访问量:
[root@localhost nginx]# awk '{print $0}' access.log |wc -l //统计我们当天用户访问量; 单引号表示命令段,大括号把命令括起来,表示一个动作,print打印动作,$0表示文本所有内容,wc 统计,-l打印行号
3884
[root@localhost nginx]# sed = access.log|tail -2 // sed = 是显示行号的,tail -2表示显示最后两行
3884
192.168.1.101 - - [03/Nov/2020:22:22:45 +0800] "POST /zabbix.php?action=notifications.get&sid=a2c13a51c1e3ec42&output=ajax HTTP/1.1" 200 436 "http://192.168.1.59/hosts.php?ddreset=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"
[root@localhost nginx]# sed = access.log|tail -2 |head -1 head -1 表示第一行
3884
[root@localhost nginx]# sed = access.log|tail -2 |head -1
3884
[root@localhost nginx]# wc -l access.log|cut -d "" -f1 //-f1便是fire字段
3884 access.log
[root@localhost nginx]# awk 'END{print NR}' access.log
3884
2. Com base na programação SHELL, três espadachins Awk, Sed, Grep analisam os logs online do Nginx, analisam e contam o número total de solicitações (visitas) do Nginx das 09:00 às 11:00 ao longo do dia. As instruções e métodos de operação são os seguintes:
[root@localhost nginx]# awk '/2020:09:00/' access.log|more
[root@localhost nginx]# sed -n '/2020:09:00/'p access.log|more
[root@localhost nginx]# grep -aiw '2020:12:41' access.log|more
[root@localhost nginx]# sed -n '/2020:12:41/,/2020:12:00/'p access.log|head -5 //范围 head表示前5条,tail表示末尾5条
[root@localhost nginx]# awk '/2020:12:41/,/2020:12:00/' access.log|wc -l
3927
3. Com base na programação do SHELL, três espadachins Awk, Sed, Grep, analise o log do Nginx online, analise e conte o número total de solicitações (volume de visitas) do Nginx das 09:00 às 11:00 ao longo do dia, imprima o endereço IP e ao mesmo tempo Imprima os 20 principais endereços IP e adicione IPs com mais de 500 visitas à lista negra do Linux; as instruções e métodos de operação são os seguintes:
//都属于正则表达式:
//将09:00~11:00的IP地址打印出来;
[root@localhost nginx]# sed -n '/2020:12:41/,/2020:12:00/'p access.log|awk '{print$1}'|more
192.168.1.101
192.168.1.59
[root@localhost nginx]# sed -n '/2020:12:41/,/2020:12:00/'p access.log|grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"|more
192.168.1.101
192.168.1.59
//将访问次数超过500次的IP加入linux的黑名单:
root@localhost nginx]# sed -n '/2020:12:41/,/2020:12:00/'p access.log|grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -n|uniq -c|sort -nr|head -20 //打印访问量排前20名的IP地址;
3964 192.168.1.101
3961 192.168.1.59
注:sort -n正向排序;uniq -c去重并统计,sort -nr 逆向排序,head -20 打印20名;
//打印访问次数超过500次的用户地址;
[root@localhost nginx]# sed -n '/2020:12:41/,/2020:12:00/'p access.log|grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -nr|uniq -c|sort -nr|awk '{if(($1>500)) print$2}'
192.168.1.101
192.168.1.59
//访问量超过500次的加入IPtables防火墙黑名单:(IPtable)
[root@localhost nginx]# for ip in $(sed -n '/2020:12:41/,/2020:12:00/'p access.log|grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -nr|uniq -c|sort -nr|awk '{if(($1>500)) print$2}');do iptable -t filter -A INPUT -s $ip/32 -m tcp -p tcp --dport 80 -j DROP ;done //$ip/32表示IP地址,IPtable规则