网站服务

网站服务

一、掌握网站页面访问流程

  1. 客户端 浏览器输入网址信息点击回车

  2. 客户端 完成域名的解析过程(DNS)

  3. 客户端 直接访问相应网站服务器 建立TCP三次握手过程

  4. 客户端 访问网站服务器 发送HTTP请求报文 多次

  5. 服务端 响应客户端请求 回复HTTP响应报文 多次

  6. 客户端 浏览器看到网站页面

  7. 客户端 结束访问网站过程 完成TCP四次挥手过程

二、HTTP协议请求和响应过程

HTTP请求报文

  1. 请求行 请求方法: Get --读/看 ---获取/拿过来 post --写/提交 请求信息: index.html(首页文件) oldboy.jpg 请求协议: http 1.1 HTTP: 1.0 TCP短连接 HTTP: 1.1 TCP长连接 HTTP: 2.0 TCP长连接优化 提高用户并发(同时)访问的效率

  2. 请求头 请求主机信息

  3. 空行

  4. 请求主体 使用get方法时, 没有请求主体信息 使用post方法时,具有请求主体内容

HTTP响应报文

  1. 起始行 状态码信息 访问请求是成功响应/失败响应 面试: 写出几种常见的状态码???

  2. 响应头部

  3. 空行

  4. 响应主体

三、HTTP协议资源信息

URL: 全称为Uniform Resource Location,中文翻译为统一资源定位符 URI: 全称为Uniform Resource Identifier,中文翻译为统一资源标识符

docs.ansible.com / ansible/latest/user_guide/playbooks_reuse_roles.html URL URI

网站页面静态资源: 要什么给我什么, oldboy.jpg index.html 特点说明:

  1. 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)。

  2. 因为网页没有数据库的支持,所以在网站制作和维护方面的工作量较大,当网站信息量很大时, 完全依靠静态网页比较困难(缺点)。

  3. 网页的交互性较差,在程序的功能实现方面有较大的限制(缺点)。

  4. 当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据(不做任何解析)。

网站页面动态资源: 要什么信息,需要进行查询数据库进行解析后发送给客户端 查看班级人员信息表

班级 人名 年龄 学历 sz-01 张三 18 高中 ---> 数据库中 oldboy=123 <--- post sz-01 李四 20 大专

班级 人员 年龄 学历 代码信息直接调用数据库的内容

  1. 采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、 投票、用户管理、订单处理、发博文等。

  2. 动态资源页面会出现 "?" "&", 不便于被搜索引擎收录

  3. 接收到用户请求,需要让动态服务和数据库服务进行处理

伪静态资源(动态页面)

  1. 可以便于搜索引擎进行收录

  2. 有数据库服务支持,实现网页交互功能

  3. 评测网站好坏的指标: IP: 根据用户IP地址数量进行统计 300万~400万 一个星期 局域网多个用户访问: 网站服务器只记录一个IP访问 NAT技术 断电了家用电脑会重新拨号: wan--公网地址

    PV: 页面访问量 700~800万 一个星期 参考值:

    UV: 记录独立访客数量 cookie: 标识用户身份信息, 会保存在用户客户端本地 内存中 session: 记录用户的一些会话操作, eg: 记录用户登录信息 记录在服务端 内存中

    网站的并发: (压测技术 1 10 100 1000 10000) A种理解:网站服务器每秒能够接收的最大用户请求数。 B种理解:网站服务器每秒能够响应的最大用户请求数。 C种理解:网站服务器在单位时间内能够处理的最大连接数。

    饭店吃饭: 10:00 每个桌子--4个 10个桌子 10:00:00~01 40个人 10:30: 高速公路: 5月1日 - 5月3日 三车道: 三辆

 

 

四、常用的网站服务软件

处理静态资源的服务: apache软件: http://apache.org/ nginx软件: http://nginx.org

处理动态资源的服务: PHP: php.net 终端浏览器进行访问 *** Tomcat(java): 利用移动端查看网页 安卓-java PYTHON: 开发难度比较低

五、nginx服务的软件特点:

  1. 支持高并发,消耗内存资源少

  2. 具有多种功能 网站web服务功能 --- apache 网站负载均衡功能 --- LVS 网站缓存服务 --- Squid

  3. 在多种系统平台都可以进行部署

  4. nginx实现网络通讯时使用的时异步网络IO模型: epoll模型(apache -- select模型) epoll模型: 宿舍管理员: 找人,查看人员登记信息 幼儿园阿姨: 小朋友上厕所, 都站在教室的某个位置

    select模型: 宿舍管理员: 找人,一个一个屋子去问, --线性轮询 幼儿园阿姨: 小朋友上厕所, 一个一个小朋友去询问

六、nginx软件的安装部署过程:

两种安装方式:

  1. yum安装软件 a 使用官方yum源进行安装 安装的是最新版本 软件目录结构比较标准 (推荐) b 使用非官方yum源进行安装 安装的不是最新版 目录结构会发生变化

  2. 编译安装软件 第一个步骤: wget http://nginx.org/download/nginx-1.16.0.tar.gz PS: 解决软件的依赖 openssl-devel pcre-devel 第二个步骤: 解压下载好的软件, 并进入到软件目录中 第三个步骤: 编译安装三步曲 a 进行配置操作 ./configure --prefix= --user=USER --prefix=PATH set installation prefix 指定程序安装路径 --user=USER set non-privileged user for worker processes 设置一个虚拟用户管理worker进程(安全) --group=GROUP set non-privileged group for worker processes 设置一个虚拟用户组管理worker进程(安全) b 进行软件的编译过程: make 编译(翻译) C(英国人) 代码(任务文件) 系统识别 翻译 系统(中国人)处理代码 翻译效率比较低 翻译官(gcc) python(日本人) 代码(任务文件) 系统识别 翻译 系统(中国人)处理代码 翻译效率比较高 百度翻译(python解释器)

    c 编译安装过程 make install

yum官方源安装方法: 第一个历程: 更新nginx官方yum源 vim /etc/yum.repos.d/nginx.repo [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

第二个历程: yum安装nginx软件 yum install -y nginx

第三个历程: 启动nginx服务,检查服务是否安装正确 systemctl start nginx systemctl enable nginx 测试访问nginx服务

在百度输入服务器ip地址,显示一下内容则安装配置成功

image-20211009113549404

七、查看软件的目录结构

/etc/logrotate.d 实现nginx日志文件定时切割处理 日志切割方法一: 利用脚本实现切割

 #!/bin/bash
 # 设置日志文件存放目录
 logs_path="/var/log/nginx/"
 backup_path="/var/log/nginx/logs/"
 # 设置pid文件
 pid_path="/run/nginx.pid"
 
 # 重命名日志文件
 mv ${logs_path}/access.log ${backup_path}/access_$(date -d "yesterday" +"%Y%m%d").log
 mv ${logs_path}/error.log ${backup_path}/error_$(date -d "yesterday" +"%Y%m%d").log
 
 # 向nginx主进程发信号重新打开日志
 kill -USR1 `cat ${pid_path}`
 
 # 压缩
 gzip ${backup_path}/access_$(date -d "yesterday" +"%Y%m%d").log
 gzip ${backup_path}/error_$(date -d "yesterday" +"%Y%m%d").log
 
 # 删除超过指定时间的日志文件,单位:天
 find $backup_path -name "*.gz" -type f -mtime +30 -exec rm -rf {} \;

编写定时任务

 crontab -e
 0 0 * * * sh /usr/bin /var/log/nginx/runlog.sh >/dev/null

日志切割方法二: 利用专用文件切割程序--logrotate vim /etc/logrotate.conf

rotate log files weekly

weekly --- 定义默认日志切割的周期

keep 4 weeks worth of backlogs

rotate 4 --- 定义只保留几个切割后的文件

create new (empty) log files after rotating old ones

create --- 创建出一个相同的源文件

use date as a suffix of the rotated file

dateext --- 定义角标(扩展名称信息)

uncomment this if you want your log files compressed

#compress --- 是否对切割后的文件进行压缩处理

RPM packages drop log rotation information into this directory

include /etc/logrotate.d --- 加载包含/etc/logrotate.d/目录中文件配置

no packages own wtmp and btmp -- we'll rotate them here

/var/log/wtmp { --- 单独对某个文件进行切割配置 monthly create 0664 root utmp minsize 1M --- 最小大小为1M,小于1M不进行切割 rotate 1 }

/var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }

前端开发: html 页面代码 css 定义页面样式 js 定义页面特效功能

总结:

  1. /etc/nginx 配置文件

  2. /var/log/nginx 日志文件

  3. /usr/bin/nginx 命令文件

  4. /usr/share/nginx/html 站点目录??? 图片 附件信息 音频 视频

八、nginx服务配置文件

/etc/nginx/nginx.conf --- 主配置文件 第一个部分: 配置文件主区域配置 user www; --- 定义worker进程管理的用户 补充: nginx的进程 master process: 主进程 ---管理服务是否能够正常运行 boss worker process: 工作进程 ---处理用户的访问请求 员工 worker_processes 2; ---定义有几个worker进程 == CPU核数 / 核数的2倍 error_log /var/log/nginx/error.log warn; --- 定义错误日志路径信息 pid /var/run/nginx.pid; --- 定义pid文件路径信息

第二个部分: 配置文件事件区域 events { worker_connections 1024; --- 一个worker进程可以同时接收1024访问请求 }

第三个部分: 配置http区域 http { include /etc/nginx/mime.types; --- 加载一个配置文件 default_type application/octet-stream; --- 指定默认识别文件类型 log_format oldboy '$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 oldboy; --- 指定访问日志路径 sendfile on; ??? #tcp_nopush on; ??? keepalive_timeout 65; --- 超时时间 #gzip on; include /etc/nginx/conf.d/*.conf; --- 加载一个配置文件 }

/etc/nginx/nginx.conf.default --- 扩展配置(虚拟主机配置文件) 第四个部分: server区域信息(配置一个网站 www/bbs/blog -- 一个虚拟主机) server { listen 8080; --- 指定监听的端口 server_name www.oldboy.com; --- 指定网站域名 root /usr/share/nginx/html; --- 定义站点目录的位置 index index.html index.htm; --- 定义首页文件 error_page 500 502 503 504 /50x.html; --- 优雅显示页面信息 location = /50x.html { root /usr/share/nginx/html; } } 

 

九、nginx服务的企业应用

  1. 利用nginx服务搭建一个网站(www) 第一个历程: 编写虚拟主机配置文件 cd /etc/nginx/conf.d/ vim www.conf server { listen 80; server_name www.oldboy.com; location /oldboy { root /usr/share/nginx/html; index oldboy.html; } }

第二个历程: 需要获取开发人员编写的网站代码 <html>

<meta charset="utf-8"> <head> <title>老男孩深圳01最牛x</title> </head> <body> 老男孩教育深圳01-脱产班 <table border=1> <tr> <td>01</td> <td>oldboy</td> </tr> <tr> <td>02</td> <td>oldgirl</td> </tr> <tr> <td>03</td> <td>olddog</td> </tr> </table> <a href="http://blog.oldboyedu.com"> <img src="oldboy.jpg" /> </a> </body> </html>

第三个历程: 重启nginx服务(平滑重启) 两种方法: systemctl reload nginx nginx -s reload

nginx命令参数 -t : test configuration and exit 检查测试配置文件语法 -s : send signal to a master process: stop, quit, reopen, reload 控制服务停止或者重新启动

第四个历程: 编写DNS配置信息 真实域名: 在阿里云上进行DNS解析记录配置 模拟域名: 在windows主机的hosts文件中进行配置即可 C:\Windows\System32\drivers\etc\hosts 第五个历程: 进行测试访问 浏览器中: http://www.oldboy.com

部署搭建网站常见错误:

  1. 网站服务配置文件编写不正确 404 错误 解决方法一: 修改nginx配置文件---location 解决方法二: 在站点目录中创建相应目录或文件数据信息 403 错误 解决方法一: 不要禁止访问 解决方法二: 因为没有首页文件

  2. DNS信息配置不正确

  3. nginx配置文件修改一定要重启服务; 站点目录中代码文件信息调整,不需要重启服务

  4. 利用nginx服务搭建一个多网站(www bbs blog) 第一个历程: 在/etc/nginx/conf.d/创建多个虚拟主机配置文件 bbs.conf server { listen 80; server_name bbs.oldboy.com; location / { root /html/bbs; index index.html; } } blog.conf server { listen 80; server_name blog.oldboy.com; location / { root /html/blog; index index.html; } } www.conf server { listen 80; server_name www.oldboy.com; location / { root /html/www; index index.html; } } systemctl reload nginx

第二个历程: 创建站点目录和目录中首页文件 [root@web01 conf.d]# mkdir /html/{www,bbs,blog} -p [root@web01 conf.d]# for name in {www,bbs,blog};do echo "10.0.0.7 $name.oldboy.com" >/html/$name/index.html ;done [root@web01 conf.d]# for name in {www,bbs,blog};do cat /html/$name/index.html ;done 10.0.0.7 www.oldboy.com 10.0.0.7 bbs.oldboy.com 10.0.0.7 blog.oldboy.com

第三个历程: 编写hosts解析文件 10.0.0.7 www.oldboy.com bbs.oldboy.com blog.oldboy.com

第四个历程: 进行访问测试

  1. 利用windows进行浏览器访问测试

  2. 利用linux进行命令访问测试 [root@web01 conf.d]# curl www.oldboy.com 10.0.0.7 www.oldboy.com [root@web01 conf.d]# curl bbs.oldboy.com 10.0.0.7 bbs.oldboy.com [root@web01 conf.d]# curl blog.oldboy.com 10.0.0.7 blog.oldboy.com

  1. 企业中虚拟主机访问方式 a 基于域名的方式进行访问: b 基于地址的方式进行访问: (只能用指定地址访问) --- 负载均衡+高可用服务 server { listen 10.0.0.7:80; server_name www.oldboy.com; location / { root /html/www; index index.html; } } PS: 服务配置文件中涉及到地址修改,必须重启nginx服务,不能平滑重启

c 基于端口的方式进行访问: zabbix服务(apache:80) + web服务(nginx:80) --> 主机 server { listen 8080; server_name www.oldboy.com; location / { root /html/www; index index.html; } }

网站页面的访问原理:

  1. 将域名进行解析 www.oldboy.com --- 10.0.0.7

  2. 建立TCP的连接(四层协议) 10.0.0.7 目标端口 8080

  3. 根据应用层HTTP协议发出请求 请求报文: hosts: bbs.oldboy.com

  4. 没有相同域名的server主机,会找满足端口要求的第一个主机 显示主机的网站页面

  5. 企业中网站的安全访问配置 a 根据用户访问的地址进行控制 10.0.0.0/24 www.oldboy.com/AV/ 不能访问 172.16.1.0/24 www.oldboy.com/AV/ 可以访问

nginx访问模块: ngx_http_access_module 举例配置: location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; } 指令用法 Syntax: deny address | CIDR | unix: | all; Default: Context: http, server, location, limit_except

第一个历程: 编写配置文件 [root@web01 conf.d]# vim www.conf server { listen 80; server_name www.oldboy.com; location / { root /html/www; index index.html; } location /AV { deny 10.0.0.0/24; allow 172.16.1.0/24; root /html/www; index index.html; } } 补充: location外面的信息, 全局配置信息 location里面的信息, 局部配置信息

b 根据用户访问进行认证 nginx认证模块: ngx_http_auth_basic_module 举例配置: location / { auth_basic "closed site"; --- 开启认证功能 auth_basic_user_file conf/htpasswd; --- 加载用户密码文件 }

第一个历程: 编写虚拟主机配置文件 server { listen 80; server_name www.oldboy.com; location / { root /html/www; index index.html; auth_basic "oldboy-sz-01"; auth_basic_user_file password/pass; }

第二个历程: 创建密码文件(文件中密码信息必须是密文的) htpasswd 创建一个有密文信息的密码文件(在/etc/nginx 创建密码目录与密码文件)

安装htppd

[root@web01 conf.d]# rpm -qf which htpasswd httpd-tools-2.4.6-89.el7.centos.x86_64 --查看是否安装htppd

mkdir password --创建密码目录

htpasswd -c pass hgg --创建密码文件及用户密码

 

htpasswd命令参数说明: -c Create a new file. * 创建一个密码文件 -n Don't update file; display results on stdout. 不会更新文件; 显示文件内容信息 -b Use the password from the command line rather than prompting for it. * 免交互方式输入用户密码信息 -i Read password from stdin without verification (for script usage). 读取密码采用标准输入方式,并不做检查 ??? -m Force MD5 encryption of the password (default). md5的加密算法 -B Force bcrypt encryption of the password (very secure). 使用bcrypt对密码进行加密 -C Set the computing time used for the bcrypt algorithm (higher is more secure but slower, default: 5, valid: 4 to 31). 使用bcrypt algorithm对密码进行加密 -d Force CRYPT encryption of the password (8 chars max, insecure). 密码加密方式 -s Force SHA encryption of the password (insecure). 加密方式 -p Do not encrypt the password (plaintext, insecure). 不进行加密 -D Delete the specified user. 删除指定用户 -v Verify password for the specified user.

修改密码文件权限: ??? chmod 600 pass --修改文件权限为600

chown nginx.niginx pass --修改文件属主属组

第三历程:

重启nginx服务

500 Internal Server Error

  1. 内部程序代码编写有问题

  2. 程序服务中文件权限不正确

curl命令参数: -u, --user USER[:PASSWORD] Server user and password [root@web01 password]# curl www.oldboy.com -u oldboy Enter host password for user 'oldboy': 10.0.0.7 www.oldboy.com [root@web01 password]# curl www.oldboy.com -u oldboy:123456 10.0.0.7 www.oldboy.com

  1. 课程知识总结:

    1. 如何搭建一个网站(服务器 域名 网页代码 数据库支持)

    2. 如何搭建多个网站

    3. 如何访问网站(3种 域名 地址 端口)

    4. 网站服务安全配置 根据用户访问域名地址进行控制 根据用户访问信息进行认证控制

十、nginx的企业实践应用

  1. 利用nginx服务搭建网站文件共享 第一个步骤: 编写配置文件(www.conf) nginx模块功能: ngx_http_autoindex_module

Syntax: autoindex on | off; Default: autoindex off; Context: http, server, location

server { listen 80; server_name www.oldboy.com; location / { root /html/www; auth_basic "oldboy-sz-01"; auth_basic_user_file password/htpasswd; autoindex on; --- 开启nginx站点目录索引功能 } PS: 1. 需要将首页文件进行删除 2. mime.types媒体资源类型文件作用 文件中有的扩展名信息资源, 进行访问时会直接看到数据信息 文件中没有的扩展名信息资源, 进行访问时会直接下载资源

网站页面目录数据,中文出现乱码,如何解决: location / { root /html/www; #index index.html; auth_basic "oldboy-sz-01"; auth_basic_user_file password/htpasswd; autoindex on; charset utf-8; --- 修改目录结构中出现的中文乱码问题 }

 

  1. 利用nginx服务搭配置文件别名功能 第一个历程: 编写配置文件 server_name www.oldboy.com old.com; 第二个历程: 配置好解析信息

作用:

编写网站访问测试

定位要访问的网站服务器

 

  1. 利用nginx状态模块功能对网站进行监控 状态模块: ngx_http_stub_status_module location = /basic_status { stub_status; } 第一个历程: 编写配置文件 [root@web01 conf.d]# vim state.conf server { listen 80; server_name state.oldboy.com; stub_status; }

第二个历程: 重启nginx服务,并且编写解析文件 systemctl reload nginx 10.0.0.7 state.oldboy.com

Active connections: 激活的连接数信息 4000用户 3500 accepts: 接收的连接数汇总(综合) TCP handled: 处理的连接数汇总(综合) TCP requests: 总计的请求数量 HTTP协议请求 Reading: nginx服务读取请求报文的数量 100人点餐 Writing: nginx服务响应报文信息数量 100人响应 Waiting: nginx队列机制,要处理(读取或者响应保存进行保存) 监控

  1. nginx日志功能配置 访问日志: /var/log/nginx/access.log ngx_http_log_module log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 定义日志内容格式 '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

主配置文件修改:vim /etc/nginx/nginx.conf access_log /var/log/nginx/access.log main; 调用日志格式

$remote_addr 显示用户访问源IP地址信息 $remote_user 显示认证的用户名信息 [$time_local] 显示访问网站时间 "$request" 请求报文的请求行信息 $status 用户访问网站状态码信息 $body_bytes_sent 显示响应的数据尺寸信息 $http_referer 记录调用网站资源的连接地址信息(防止用户盗链) 老男孩nginx---access.log---莫文杰(荒原饮露---老男孩图片链接)---http_referer(链接) $http_user_agent 记录用户使用什么客户端软件进行访问页面的 (谷歌 火狐 IE 安卓 iphone) $http_x_forwarded_for ??? 负载均衡

 

错误日志: /var/log/nginx/error.log --- Core functionality Syntax: error_log file [level]; 指定错误日志路径以及错误日志记录的级别 Default: error_log logs/error.log error; Context: main, http, mail, stream, server, location

主配置文件修改:vim /etc/nginx/nginx.conf error_log /var/log/nginx/error.log warn; 错误级别: debug :调试级别, 服务运行的状态信息和错误信息详细显示 信息越多 info :信息级别, 只显示重要的运行信息和错误信息 notice :通知级别: 更加重要的信息进行通知说明 warn :警告级别: 可能出现了一些错误信息,但不影响服务运行 error :错误级别: 服务运行已经出现了错误,需要进行纠正 推荐选择 crit :严重级别: 必须进行修改调整 alert :严重警告级别: 即警告,而且必须进行错误修改 emerg :灾难级别: 服务已经不能正常运行 信息越少

PS: 日志文件信息需要做切割处理 几个G

  1. nginx服务location作用说明 模块说明: ngx_http_core_module location进行匹配(uri) 错误页面优雅显示 location /oldboy { root /html/www; error_page 404 /oldboy.jpg; } location /oldgirl { root /html/www; error_page 404 /oldgirl.jpg; }

location详细配置: Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: Context: server, location location = / { --- 精确匹配 优先级01 最高 [ configuration A ] }

location / { --- 默认匹配 优先级04 最低 [ configuration B ] }

location /documents/ { --- 按照目录进行匹配 优先级03 [ configuration C ] }

location ^~ /images/ { --- 优先匹配/不识别uri信息中符号信息 优先级02 [ configuration D ] }

location ~* .(gif|jpg|jpeg)$ { --- 不区分大小写进行匹配 优先级03 [ configuration E ] }

  1. 利用nginx实现页面跳转功能 利用rewrite模块是跳转功能: http_rewrite_module Syntax: rewrite regex replacement [flag]; rewite 匹配的正则信息 替换成什么信息 Default: Context: server, location, if

rewrite www.oldboy.com/(.) http://www.oldboy.com/$1 permanent; 重写规则配置 ^/ (.) baidu.com / oldboy.html 跳转方式

www.baidu.com/oldboy.html

跳转方式: 永久跳转: permanent 301 会将跳转信息进项缓存 临时跳转: redirect 302 不会缓存跳转信息

出现无限跳转如何解决: 第一种方法: 利用不同server区块配置打破循环 server { server_name oldboy.com; rewrite ^/(.) http://www.oldboy.com/$1 permanent; } 第二种方法: 利用if判断实现打破循环 if ($host ~ "^oldboy.com$") { rewrite ^/(.*) http://www.oldboy.com/$1 permanent; }

www.oldboy.com/oldboy01/oldboy02/oldboy.jpg --- www.oldboy.com/oldboy.jpg


posted @ 2022-01-08 16:52  Yusir-SRE  阅读(197)  评论(0编辑  收藏  举报