WEB服务器的部署及优化
用户常用关于web的信息
www万维网: 【通过网站访问链接】
www是world wide web的缩写,及万维网,也就是全球信息广播的意思
通常说的上网就是使用www来查询用户所需要的信息。
www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet传递到世界各处去。
当你连接www网站,该网站会提供一些数据,客户端要使用可以解析这些数据的软件来处理,那就是浏览器
网址:URL和URN【区别:URL提供查找该事物的方法。URN仅用于命名,而不指定地址】
URI:Uniform Resource Identifier统一资源标识,分为URL和URN
URN:Uniform Resource Naming,统一资源命名,P2P下载使用的磁力链接是URN的一种实现
URL:Uniform Resorce Locator,统一资源定位符用于描述某服务器某特定资源位置
URL组成
URL机构:<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>
HTTP简介
HTTP协议:全称为Hyper Text Transfer Protocol(超文本传输协议)
简单来说http就是从服务器传输超文本(html)到本地浏览器的传输协议
HTTP协议工作于B/S架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务端发送请求(Request),Web服务端根据接收到的请求数据,向客户端发送响应信息(Response)
http工作机制
一次http事务包括:
http请求:http request
http响应: http response
Web资源: web resource
一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请求。因此,一个"Web页面”通常并不是单个资源,而是一组资源的集合
资源类型:
静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
常见文件后缀:.html,.txt,.jpg,.js,.css,mp3,avi
动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
常见文件后缀:.php,jsp,asp
web中常用的语言介绍
html语言 超文本标记语言
css 层叠样式表 表述网站的风格【静态的】
js实现html和css实现不了的功能比如动画效果【也是静态的】
mine(Multipurpose Internet Mail Extensions)多用途因特网邮件扩展
它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理
为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
其主要功能是让服务器将它们发送的多媒体数据的类型告诉浏览器
服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件
MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记
MIME格式: type/subtype 文件类型后缀(html txt jpg png... ...)
配置外网访问
使用新的虚拟机配置软件仓库
# mkdir /rhel9
# mount /dev/sr0 /rhel9/ 【挂载】
# df 查看结果:
# vim /etc/rc.d/rc.local 【配置开机自动挂载】
# chmod +x /etc/rc.d/rc.local
配置nginx运行
# chmod +x /bin/vmset.sh 【运行文件】
# cd /etc/yum.repos.d/
# vim rhel9.repo
# dnf install nginx -y 【安装web服务之nginx】
# systemctl enable --now nginx 【启动nginx】
# firewall-cmd --permanent --add-service=http 【火墙放行】
# firewall-cmd --reload
# firewall-cmd --list-all 【list查看是否是http】
# cd /usr/share/nginx/html/ 【nginx默认共享的目录】
# echo timinglee > index.html 【输入timinglee进入index.html】
# netstat -antlupe |grep nginx 【可以查看到web服务默认使用端口为80端口】
# ll /usr/share/nginx/html/index.html 【查看默认端口文件】
# cat /proc/cpuinfo 【查看cpu的数量】
# ps aux | grep nginx 【查看aux进程,nginx的cup数量】
修改端口
# vim /etc/nginx/nginx.conf 【配置网页文件】
listen 8080; 【修改端口,一定要加 ; 】
# nginx -s reload 【刷新网页】
查看运行结果:
# firewall-cmd --permanent --add-port=8080/tcp 【火墙放行】
# firewall-cmd --reload
修改发布文件
# vim test.html 【修改发布文件内容】
# vim /etc/nginx/nginx.conf
index test.html; 【修改发布目录】
# nginx -t 【检测语法是否正确】
# nginx -s reload 【刷新】
修改添加执行目录文件依然是先执行第一个
# rm -fr test.html 【删除后可以访问第二个】
修改默认发布目录
# mkdir /usr/share/nginx/timinglee
# echo hahaha > /usr/share/nginx/timinglee/index.html
# vim /etc/nginx/nginx.conf
# nginx -s reload
运行结果:
http访问请求完整过程
建立连接:TCP的3次握手建立链接,向服务器发送http请求,服务器拒绝或允许
接受请求:接受客户端请求报文对某个资源的一次请求过程web响应访问模型
a.单进程I/O模型【效率慢,执行必定响应】:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应。
b.多进程I/O模型【取决于自身可执行的请求数】:并行启动多个进程,每个进程响应一个连接请求。
c.复用I/O结构【请求会记录,排队响应】:启动一个进程,同时响应N个连接请求
d.复用的多进程I/O模型【效率高】:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求
处理请求:
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理常用请求Method: GET拿、POST提交、HEAD、PUT上传、DELETE删除、TRACE、OPTIONS 【红色是常用的】
访问资源: 【影响速率的部分】
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
构建响应报文:
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
描述了响应主体MIME类型的Content-Type首部
描述了响应主体长度的Content-Length
实际报文的主体内容
URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来
发送响应报文
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束。
http协议报文头部结构
请求报文
响应报文
# curl -v 192.168.150.135 【查看报文结构形式】
* Mark bundle as not supporting multiuse —报文响应结果【404 Not Found 表示资源不存在】
创建文件后再次运行结果:
状态代码
状态码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值
状态码
含义
详解
1xx
指示信息
表示请求已接收,继续处理
2xx
成功
表示请求已被成功接收、理解、接受
3xx
重定向
要完成请求必须进行更进一步的操作
4xx
客户端错误
请求有语法错误或请求无法实现
5xx
服务器端错误
服务器未能实现合法的请求
常见状态代码
状态码
含义
200 OK
客户端请求成功
400 Bad Request
客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized
请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用。
403 Forbidden
服务器收到请求,但是拒绝提供服务。
404 Not Found
请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error
服务器发生不可预期的错误。
503 Server Unavailable
服务器当前不能处理客户端请求,一段时间后可能恢复正常。
创建独立网址
html ]# mkdir lee
# echo lee > lee/index.html
# vim /etc/nginx/nginx.conf 【读取有顺序,先读取的不能被后面的覆盖】
# nginx -s reload
# curl -v 192.168.150.135/lee/ 运行结果:
# vim /etc/nginx/nginx.conf
# nginx -s reload
修改后运行结果:
基于用户操作访问认证
# dnf install httpd-tools -y 【建立文件】
# ll /etc/nginx/.htpasswd 【查看有无建立文件】
# htpasswd -cm /etc/nginx/.htpasswd lee 【建立网址用户】
# htpasswd -m /etc/nginx/.htpasswd admin 【 -cm 会覆盖文件的用户,所以用 -m 】
# cat /etc/nginx/.htpasswd 运行结果:
# vim /etc/nginx/nginx.conf 【配置让网站需要密码访问】
# nginx -t 运行结果:
# nginx -s reload 【刷新】
# curl 192.168.150.135/lee/
# curl -u lee:lee 192.168.150.135/lee/ 运行结果:
发布默认测试页
# cd /usr/share/nginx/html/
# ip a a 192.168.150.20/24 dev ens160 【添加子ip地址】
# ip a 运行结果:
网站查看:
# mkdir /usr/share/nginx/virtualhost/{news,bbs} -p
# echo 192.168.150.10 > /usr/share/nginx/virtualhost/bbs/index.html
# echo 192.168.150.20 > /usr/share/nginx/virtualhost/news/index.html
# cd /etc/nginx/conf.d/
# ls确认没有文件后创建网页文件
# vim vhosts.conf
创建基于域名的虚拟主机
# vim vhosts.conf 【配置域名】
# nginx -s reload
运行结果:
# mkdir /usr/share/nginx/virtualhost/haha/ -p
# echo haha > /usr/share/nginx/virtualhost/haha/index.html
# vim vhosts.conf 【添加网址】
# nginx -s reload
# vim /etc/hosts 【配置子网页】
访问结果:
# cat /etc/hosts
运行结果: