• 1.http协议

1.1http概述

默认端口是80
HTTP超文本传输协议: 数据请求与响应
  传输:网站的数据如何传递给用户.
  超文本:文本,图片,视频....
  用户打开网站后:网站如何传递数据给用户.
  专业名字:数据请求与响应
  
  
请求request:打开网站,访问网站.
响应response:网站显示出,返回给你想要的内容

1.2http协议版本

http1.0http1.1http2.0http3.0
特点短连接,每次请求都需要重复建立加入长连接功能增加并发,访问更快基于udp更快,应用于流媒体
占用服务端资源keepalive功能
是否加密http 不加密的 https 加密的默认基于https
基于tcp/udptcptcptcpudp
目前现状:
大部分企业还在使用http1.1, 一部分使用http2.0
目前http3.0( QUIC ) 流媒体直播在使用.

HTTP1.1 vs 2.0 速度对比: HTTP1.1 vs 2.0 速度对比

1.3http协议状态码

状态码含义
2xx表示正常
3xx表示需要进行跳转,表示正常
4xx表示异常,客户端问题
5xx表示异常,服务端问题
详细的状态码说明
200 ok访问正常
301 Moved Permanently永久跳转
302 Found或Moved Temporarily临时跳转
304 Not Modified浏览器缓存
403 Forbidden权限拒绝(拒绝访问) 🅰 权限问题,🅱 首页文件问题
404 Not Found文件找不到,一般辅助错误日志排查
500 Internal Error内部错误,SElinux开启,其他原因一般辅助错误日志排查
502 Bad Gateway网关错误,一般发生在负载中(类似场景下),请求发送到后面,后面无人处理,提示502.
503 service temporarily unavailable服务临时不可用,后端负载异常等情况,人为设置(升级)
504 Gateway Time-out网关超时.

2.衡量系统访问量指标

2.1概述

指标说明
IP访问网站的独立ip数量,公网ip
PV页面访问量Page view
UV独立访客数量,接近于用户数量 Unique Vistor
DAU每天的活跃用户的数量:日活(日活跃用户)
MAU月活(月活跃用户)

2.2统计

IP,PV,UV 三剑客进行过滤,第三方统计插件(百度统计,.....网站页面加入代码),ELK

DAU,MAU 第3方工具,数据库统计用户登录情况.、
https://alexa.chinaz.com/

3.Nginx

3.1web服务

WEB服务:网站服务,部署并启动了这个服务,你就可以搭建一个网站.
WEB中间件: 等同于WEB服务
中间件:范围更加广泛,指的负载均衡之后的服务.
数据库中间件:数据库缓存,消息对列ՎՎ

3.2常见网站服务

网站服务官网
Nginx大部分使用nginx,Engine Xhttp://nginx.org/en/docs/
Tengine基于Nginx二开,淘宝开源,更多内置模块
Openresty基于Nginx二开,加强Lua功能与模块
......
Tomcat/Jboss/Jetty/Weblogic运行java环境的,web服务
PHP运行php环境,需要ngx(LNMP)
......

3.3部署与使用

3.3.1配置yum源

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

3.3.2检查安装

[root@web01 ~]# rpm -qa nginx 
nginx-1.22.0-1.el7.ngx.x86_64
[root@web01 ~]# rpm -ql nginx 
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/checkreload
/usr/libexec/initscripts/legacyactions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.22.0
/usr/share/doc/nginx-1.22.0/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx

3.3.3目录结构

温馨提示:
  Nginx不同的安装方法:目录,文件会有所区别.
目录结构说明
/etc/nginx/nginx各种配的目录
/etc/nginx/nginx.conf主配置文件
/etc/nginx/conf.d/子配置文件(网站)
/etc/nginx/conf.d/default.conf默认的子配置文件
/usr/sbin/nginxngx命令
/usr/share/nginx/html/ngx默认的站点目录,网站的根目录
/var/log/nginx/ngx日志: 访问日志,错误日志 ,跳转日志
其他目录和文件说明
/etc/logrotate.d/nginx日志切割(防止文件过大)
/etc/nginx/mime.types媒体类型
/etc/nginx/fastcgi_paramsngx+php
/etc/nginx/uwsgi_paramsngx+python
/usr/lib/systemd/system/nginx.servicesystemctl配置文件
/var/cache/nginx/缓存目录

3.3.4日常启动与管理

systemctl enable nginx
systemctl start nginx

检查端口与进程
#检查服务状态
systemctl status nginx 
#检查端口
ss -lntup |grep 80
#检查进程
ps -ef |grep nginx

4.Nginx核心功能详解

4.1配置文件

/etc/nginx/nginx.conf

4.2主配置文件详解

image-20240613141806837.png

熟练掌握的指令:
include 文件包含,引用其他地方的ngx配置文件.
user指定ngx用户.
error_log错误日志
access_log 访问日志
网站中常用必会指令说明
listen指定监听端口
server_name指定域名,多个通过空格分割
location(区域)匹配请求中的uri(资源地址)
root指定站点目录(网站的根目录)
index指定站点的首页文件. 用户访问的时候不加上任何的文件,展示首页文件
error_log指定错误状态码与对应的错误页面.

4.3Nginx处理用户请求流程

使用域名访问网站流程:
 
  1.DNS解析:域名-地址
  2.连接80端口: tcp3次握手与网站的80端口建立连接
  3.http请求豹纹:请求方法,URI,HOST等信息
     GET /index.html
     HOST: cxk.dxxxxx.cn
     User-Agent: Chrome/xxx
  4.ngx处理:
      http请求,http区域处理
      不同的server{} 区域(子配置文件)处理.
        端口
        域名:用户请求的域名与子配置文件server_name进行匹配.
        匹配成功,就让对应的子配置文件(server{})处理
        根据子配置文件的,root,location规则,index进行处理查找文件.
        把找到的文件发回给用户
   5.http响应豹纹
     状态码:200 ok
     server信息
     其他信息
     文件内容
   6.客户收到文件内容,浏览器解析,进行展示

image-20240613142612945.png

4.4虚拟主机

虚拟主机:相当于是1个网站,在ngx中通过server{}区域实现.
ngx中虚拟主机有不同的类型(配置不同)
虚拟主机的分类说明应用场景
基于域名的虚拟主机不同域名访问不同的站点.生产环境最常用的
基于端口的虚拟主机不同端口访问不同的站点.保护,设置特殊端口.1024以上 8888 18888
基于ip的虚拟主机不同ip访问不同的站点.保护,用户只能通过某个ip连接进来.用来限制网站只能通过指定的ip进行访问内网ip,vpn ip.

4.4.1基于域名的虚拟主机

不同域名访问不同的主机.
书写配置
server {
 listen 80;
 server name bird.oldboylinux.cn;
 root /app/code/bird  
 location / {
   index index.html;
 }
}

#1.测试不创建站点目录
curl -H Host:bird.oldboylinux.cn   http://10.0.0.7
提示404
#2.测试创建站点目录,但是没有首页文件
mkdir -p /app/code/bird/
curl -H Host:bird.oldboylinux.cn   http://10.0.0.7
提示403
#3. 测试创建首页文件后访问
echo bird.oldboylinux.cn >/app/code/bird/index.html
curl -H Host:bird.oldboylinux.cn   http://10.0.0.7

本地测试域名的小技巧(linux)
curl -v -H "Host: cxk.oldboylinux.cn" http://10.0.0.7/index.html
-H修改请求头里面的内容.

4.4.2基于端口的虚拟主机

不同的端口访问不的网站.
修改live.oldboylinux.cn端口为81.
erver {
 listen 81;
 server_name live.oldboylinux.cn;
 root /app/code/live;
 location / {
   index index.html;
 }
}
访问
curl  -H Host:live.oldboylinux.cn   
http://10.0.0.7:81/index.html
浏览器
http://10.0.0.7:81/index.html

4.4.3基于ip的虚拟主机

搭建mimi网站,端口是8888,只能通过172.16.1.7内网访问.
[root@web01 /etc/nginx/conf.d]# mkdir -p 
/app/code/mi/
[root@web01 /etc/nginx/conf.d]# echo mi.oldboylinux.cn >/app/code/mi/index.html
[root@web01 /etc/nginx/conf.d]# 
[root@web01 /etc/nginx/conf.d]# curl -H Host:mi.oldboylinux.cn http://10.0.0.7:8888/
curl: (7) Failed connect to 10.0.0.7:8888; 
Connection refused
[root@web01 /etc/nginx/conf.d]#
[root@web01 /etc/nginx/conf.d]# curl -H 
Host:mi.oldboylinux.cn http:Վˌ172.16.1.7:8888/
mi.oldboylinux.cn
[root@web01 /etc/nginx/conf.d]# cat 
mi.oldboylinux.cn.conf 
server {
 listen 172.16.1.7:8888;
 server_name mi.oldboylinux.cn;
 root /app/code/mi;
 location / {
   index index.html;
   }
   }

4.5nginx日志

4.5.1概述

日志使用建议定义使用
错误日志发生故障的时候可以查看,4xx,5xx通过错误级别指定error_log
访问日志记录着用户什么时候访问网站哪些页面,客户端信息.通过log_format定义访问日志的格式access_log

4.5.2错误日志

https://nginx.org/en/docs/
指定错误日志的位置和错误级别(日志级别).

错误日志级别;:左到右,越来越粗糙. 记录信息的详细程度.
debug, info, notice, warn, error, crit, alert, or 
emerg.
error
notice
debug: 未来用于调试使用,短时间开启,网站访问量较大别开.

##生产建议
##给每个虚拟主机指定自己独立的错误日志.
error_log指令
格式:error_log 文件名 错误日志级别;
指令放在哪:main , http , mail , stream , server , location
[root@web01 /etc/nginx/conf.d]# cat 
cxk.oldboylinux.cn.conf 
server {
 listen 80;
 server_name cxk.oldboylinux.cn;
 error_log /var/log/nginx/cxk.oldboylinux.cnerror.log notice;
 root /app/code/cxk;
 location / {
   index index.html;
 }
}.
需要把nginx.conf里面的error_log注释.

4.5.3访问日志

辅助我们进行分析,网站访问量,ip,pv
更多ngx内置变量:http://nginx.org/en/docs/varindex.html
log_format指定访问日志的格式
log_format 格式名字 格式.....;
放在哪里: http
Ngx访问日志格式(ngx内置变量)说明
$remote_addr客户端ip地址
$remote_user用户名(空,进行认证用户)
$time_local时间 30/Aug/2022:14:44:27 +0800
$request请求报文的起始行(请求方法 URI HTTP/1.1)
$statushttp状态码
$body_bytes_sent响应给客户的文件的大小,响应报文的主体大小(文件大小) 单位字节
$http_referer从哪里跳转,访问到这个网站的. 网站运营分析
$http_user_agent客户端代理(浏览器)
$http_x_forwarded_forXFF头,负载中使用,记录用户真实的ip地址

image-20240613144706340.png

[root@web01 /etc/nginx/conf.d]# cat 
cxk.oldboylinux.cn.conf 
server {
 listen 80;
 server_name cxk.oldboylinux.cn;
 error_log /var/log/nginx/cxk.oldboylinux.cnerror.log notice;
 access_log /var/log/nginx/cxk.oldboylinux.cnaccess.log main;
 root /app/code/cxk;
 location / {
   index index.html;
 }
}
需要把nginx.conf里面的access_log注释.

4.6location规则

4.6.1location概述

ngx的location规则:
   在ngx用于匹配用户请求中的uri.ngx对用户请求中的uri进行判断.
   如果用户请求的uri是xxxx,则做xxxx.
   
 URI vs URL
URL网址 https://nginx.org/en/docs/
URI: /en/docs/ 
 
http://www.baidu.com/lidao/lidao.avi
URI: /lidao/lidao.avi 域名后面的内容
URL: http://www.baidu.com/lidao/lidao.avi 网址
http://www.baidu.com
URI: / 域名后面的内容
URL: http://www.baidu.com 网址

4.6.2location案例**,**搭建大型直播购物网站

域名:buy.oldboylinux.cn
站点目录:/app/code/buy/ 首页文件index.html  
后台管理页面:/app/code/buy/admin/index.html
要求后台只能内网访问:172.16.1.0/24网段.


[root@web01 /etc/nginx/conf.d]# cat 
buy.oldboylinux.cn.conf 
server {
 listen 80;
 server_name buy.oldboylinux.cn;
 root /app/code/buy;
 location / {
   index index.html;
 }
  #buy.oldboylinux.cn/admin/
  #uri: /admin/
 location /admin/ {
   #准许172.16.1.0/24网段访问
   allow  172.16.1.0/24;
   #拒绝所有
   deny all; 
 } 
}

4.6.3搭建bird小鸟飞飞网站

基本配置浏览器访问并没有缓存
[root@web01 ~]# cat 
/etc/nginx/conf.d/bird.oldboylinux.cn.conf 
server {
 listen 80;
 server_name bird.oldboylinux.cn;
 root /app/code/bird; 
 location / {
   index index.html;
 }
}


设置浏览器缓存功能
[root@web01 /app/code/bird]# cat 
/etc/nginx/conf.d/bird.oldboylinux.cn.conf 
server {
 listen 80;
 server_name bird.oldboylinux.cn;
 root /app/code/bird; 
 location / {
   index index.html;
 }
  #uri包含 .html或.js或.css 缓存1天
 location ~* \.(html|js|css)$ {
   expires max;
    #expires 1d;
 }
  #uri包含 .jpg 或 .jpeg 或 .png 或 .gif 或 .bmp 
 location ~* \.(jpg|jpeg|png|gif|bmp)$ {
   expires 1h;
 }

4.6.4location规则详情

location规则说明
location / {xxxx}默认规则,保底,location规则在进行匹配的时候,其他的规则都匹配失败了,这时候匹配默认的规则
location /image/ {}用于匹配请求的uri (路径) cxk.oldboylinux.cn/image/lidao.txt
location ~ \. (jpg | jpeg)$ {}支持正则,区分大小写 cxk.oldboylinux.cn/lidao/lidao.jpg
location ~* \. (jpg|jpeg)$ {}支持正则,不区分大小写 cxk.oldboylinux.cn/lidao/lidao.jpg
location ^~ /lidao/不支持正则,仅仅匹配普通字符,很少使用,优先.
location = /50x.html不支持正则,精确匹配,使用较少.
location @名字 {}命名的location一般用于return/error_log 跳转.
优先级
1=
2^~
3~ ~*
4/image/
5/

5.搭建一个高清视频下载网站

5.1搭建要求

名字: 一个高清视频下载站。
网站初衷: 做1个人人看得起的大片网站。
目录结构(目标)

要求
1. 浏览器打开后,显示目录结构(如上图)。
2. 增加svip功能。
3. 增加统计功能,统计nginx服务的状态,访问情况。

image-20240613145818873.png

5.2下载站基本要求

自动索引功能(列表站点目录的内容),首页文件不存在.
autoindex模块
autoindex模块
autoindex on ; 开启目录索引功能(显示站点目录下的文件的列表,首页文件不存在.)
autoindex_localtime on; 显示本地时间
autoindex_exact_size off; 是否显示精确的文件的大小. off表示以人类可读形式显示大小
[root@web01 /app/code/dl]# cat 
/etc/nginx/conf.d/v.oldboylinux.cn.conf
server {
 listen 80;
 server_name v.oldboylinux.cn;
 root /app/code/v;
 error_log /var/log/nginx/v-error.log notice; 
 access_log /var/log/nginx/v-access.log main;
 charset utf8;
 autoindex on;
 autoindex_localtime on;
 autoindex_exact_size off;
 location / {
   index index.html;
 }
}

5.3增加vip认证功能

增加一个svip目录,里面创建文件.
增加认证功能(用户名和密码).
auth_basic模块

auth_basic           "请输入密码:";   #输出提示,根据不同浏览器,可能不显示.
auth_basic_user_file conf/htpasswd; #指定用户名,密码文件


yum install -y httpd-tools
#创建文件
htpasswd  -bc /etc/nginx/user   lidao996  1
#增加用户
htpasswd  -b /etc/nginx/user   oldboy  1
#修改权限
chmod 600 /etc/nginx/user
chown nginx.nginx /etc/nginx/user



server {
 listen 80;
 server_name v.oldboylinux.cn;
 root /app/code/dl;
 error_log /var/log/nginx/dl-error.log notice; 
 access_log /var/log/nginx/dl-access.log main;
 charset utf8;
 autoindex on;
 autoindex_localtime on;
 autoindex_exact_size off;
 location / {
   index index.html;
 }
 location /svip/ {
   auth_basic "input password:";
   auth_basic_user_file /etc/nginx/user;
   }}

5.4增加统计功能

显示ngx当前状态(显示ngx状态信息),未来用于监控ngx.
熟练使用状态模块

stub_status模块/指令,显示nginx服务的状态,用户访问的状态.
location /status {
     stub_status;
 }
 
 
 
ab 压力测试功能
ab  -n 9999999  -c 3    -H Host:v.oldboylinux.cn     
http:Վˌ10.0.0.7/