linux服务管理:
web基础以及http协议
一、web基本概念和常识
Web:为⽤户提供的⼀种在互联⽹上浏览信息的服务,Web 服务是动态的、可交
互的、跨平台的和图形化的。
Web 服务为⽤户提供各种互联⽹服务,这些服务包括信息浏览服务,以及各种交互式服务,包括聊天、购物、学习等等内容。
Web 应⽤开发也经过了⼏代技术的不断发展,⽬前 Web 开发依然是最重要的开发内容之⼀。Web 基础的技术包括超⽂本标记语⾔(HTML)和 HTTP 协议,HTML 是⼀种呈现数据的⽅式(给⼈看的),⽽ HTTP 则是⼀组通信的标准(语法、语义、时许),可以简单的理解为 HTTP 携带 HTML。
1. web 应⽤:⽹站(⼴义上的PC,⼿机app)
2. 浏览器(Browser):也称⽤户代理,web客户端,主要有IE、Edge、Chrome、Firefox、腾讯浏览器,360浏览器等。
3. web服务器(web server):也称HTTP服务器(HTTP server),主要有 Nginx、Apache、Tomcat 等。
二、网站基础
1、域名
域名是⼀个IP地址的“⾯具” ,⽬的是便于记忆和访问⼀个或⼀组服务器的地址(⽹站,电⼦邮件,FTP 等)。
2、域名解析
本地HOSTS解析
DNS服务器解析
3、⽹站的基本概念
⽹站、⽹⻚、主⻚;
HTTP、URL、HTML、超链接
4、web ⽹站
web1.0(以编辑为特征)
web2.0(侧重⽤户交互)
5、动态⻚⾯与静态⻚⾯的差别
(1)URL不同
静态⻚⾯链接⾥没有”?“
动态⻚⾯链接⾥包含”?“
注:
url中,#?&作用:
#:资源定位(类似书签)
?:url和参数连接作用和清除缓存
&:不同参数的间隔符
(2)后缀不同(开发语言不同)
静态⻚⾯⼀般以 .html .htm .xml 为后缀
动态⻚⾯⼀般以 .php .jsp .py等为后缀
(3)内容不同
静态⻚⾯的内容是固定的
动态⻚⾯的内容会因⽤户、浏览器、时间、地点等⽽发⽣变化。
6、域名格式
http://(协议头)www.bing.com(域名)/(URI资源:路径/⽂件名)
示例:https://www.bilibili.com/v/game/?spm_id_from=333.851.b_7072696d6172794368616e6e656c4d656e75.21
三、HTTP协议
HTTP协议是超⽂本传输协议的缩写,英⽂是Hyper Text Transfer Protocol。它是从WEB服务器传输超⽂本标记语⾔ (HTML) 到本地浏览器的传送协议。
1、HTTP 原理
HTTP是⼀个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML ⽂件,图⽚⽂件,查询结果等。
HTTP协议⼀般⽤于B/S架构。浏览器作为HTTP客户端通过URL向HTTP服务端即web服务器发送所有请求,web服务器收到客户端请求后进⾏响应。
2、HTTP 特点
1. http协议⽀持客户端/服务端模式,也是⼀种请求/响应模式的协议。
2. 简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET、HEAD、POST。
3. 灵活:HTTP 允许传输任意类型的数据对象。传输的类型由 Content-Type 加以标记。除开可以响应字符串之外,还可以上传和下载⼆进制⽂件
4. ⽆连接:限制每次连接只处理⼀个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不⾜,产⽣了两项记录 http 状态的技术,⼀个叫做 Cookie,⼀个叫做 Session。
5. ⽆状态:⽆状态是指协议对于事务处理没有记忆,后续处理需要前⾯的信息,则必须重传。
3、URI 和 URL 的区别
(1)HTTP使⽤统⼀资源标识符(Uniform Resource Identifiers, URI)来传输数据和建⽴连接。
URI:Uniform Resource Identifier 统⼀资源标识符
URL:Uniform Resource Location 统⼀资源定位符
(2)URI 是⽤来标识⼀个具体的资源的,我们可以通过 URI 知道⼀个资源是什么,使⽤它就能够唯⼀地标记互联⽹上资源。
(3)URL 则是⽤来定位具体的资源的,标识了⼀个具体的资源位置。互联⽹上的每个⽂件都有⼀个唯⼀的。
(4)URL,也就是我们俗称的⽹址,它实际上是 URI 的⼀个⼦集。
(5)URI 不仅包括 URL,还包括 URN(统⼀资源名称),它们之间的关系如下:
4、HTTP 报⽂组成
(1)客户端发出请求:
GET /index.php HTTP/1.5/ Host:zgod.cn
(2)客户端浏览器发送出来的请求格式:
GET:这个部分只声明了请求⽅式,除了get ⽅式可能还有 post 等⽅式。GET 表示请求,POST 表示邮寄。
/index.php:这⾥是⼀个URL,表示了我们要访问的资源是哪个。
HTTP/1.5/:这⾥表示的是客户端浏览器使⽤的协议版本是1.5。
Host:zgod.cn:这是请求是交给主机zgod.cn的。
5、HTTP 状态码
6、HTTP 报⽂格式
⼀个完整的http访问包含请求(request)和响应(response)
(1)请求报⽂
客户端发出的报⽂:包含了请求⾏,请求头部字段,通⽤头部字段,实体头部字段及报⽂主体。
请求⾏:客户端使⽤的请求⽅法,⽐如 GET,POST等等。同时也包含了URL信息和HTTP的版本号。
请求头部字段:它包含了请求的符加信息,⽐如客户端的信息,响应的优先级等等。
通⽤头部字段:是请求报⽂和响应报⽂都会使⽤的报⽂内容。
实体头部字段:跟实体有关的资源信息,⽐如请求的实体更新时间等。
报⽂主体:⼀般来所,请求报⽂在使⽤GET ⽅法时,没有报⽂主体,使⽤ POTS ⽅法时,就会有。
7、HTTP协议缺点
HTTP协议不会保存状态信息。
四、HTTPS 协议
HTTP⼀般是明⽂传输,很容易被攻击者窃取重要信息,鉴于此,HTTPS应运⽽⽣。
HTTPS 的全称为(HyperTextTransferProtocoloverSecureSocketLayer),
HTTPS 和 HTTP 有很⼤的不同在于 HTTPS 是以安全为⽬标的HTTP通道,在HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。
HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说 HTTPS=HTTP+SSL。
HTTP使⽤明⽂传播,有三⼤⻛险
(1)窃听⻛险(eavesdropping):第三⽅可以获知通信内容。
(2)篡改⻛险(tampering):第三⽅可以修改通信内容。
(3)冒充⻛险(pretending):第三⽅可以冒充他⼈身份参与通信。
SSL/TLS协议是为了解决这三⼤⻛险⽽设计的,希望达到:
(1)所有信息都是加密传播,第三⽅⽆法窃听。
(2)具有校验机制,⼀旦被篡改,通信双⽅会⽴刻发现。
(3)配备身份证书,防⽌⽌身份被冒充。
1、SSL层
SSL层(SecureSocketsLayer安全套接字协议),现在也被称为TLS。
我们都知道SSL中的保证安全的加密通信是⼀次对称加密和⾮对称加密的结果,但是客户端与服务端建⽴通信的前提就是服务端是否能够被证书发型机构CA授予证书,那证书是怎么样的呢?
以下是证书类型介绍:
SSL:SecureSocketLayer,安全套接字层,http层下新增加的这⼀层构成了https。
TLS:TransportLayerSecurity,同样是为了保证数据安全的加密协议层,是SSL的增强版, SSL 有1.0,2.0,3.0版本,TLS⽬前 1.0,1.1,1.2,1.3,TLS 的 1.0 版本就是 SSL 的 3.0。
Key:https 中有公钥和私钥,⽤公钥加密的内容,可以使⽤私钥解密,反之亦然,不过我们平常所说的key⽂件是指私钥⽂件。
CSR:CertificateSigningRequest 证书签名请求,⾥⾯包含公钥等个体信息,这个发给公证机构作为申请,通过这个公证机构颁发证书给你。
CRT:certificate 证书⽂件,是证书机构颁发的保证安全通信的⽂件,由域名、公司信息、序列号和签名信息等组成。
CER:也是证书⽂件,和CRT相⽐只是缩写不同,CRT缩写常⻅于类uninx系统,CER缩写常⻅于 Windows 系统。
X.509:这⾥特指颁发的证书的格式,⽽其根据不同的编码格式分为PEM和DER。
a. PEM-PrivacyEnhancedMail,打开看⽂本格式,以“----BEGIN "开头,"----- END”结尾,内容是 BASE64 编码。
Apache 和 NGINX 服务器偏向于使⽤这种编码 格式,这种也是我们所常⻅的。
b. DER-DistinguishedEncodingRules,打开是⼆进制格式,不可读。Java和Windows服务器偏向于使⽤这种编码格式。
CA:CatificateAuthority证书颁发机构,它的作⽤就是给各个⽤户签发证书等,⽐如说 Symantec、Comodo、Godaddy、GolbalSign和Digicert等。
openssl:相当于SSL的⼀个实现,如果把SSL规范看成OO中的接⼝,那么OpenSSL则认为是接⼝的实现,个⼈理解openssl是作为针对SSL/TLS的⼀个⼯具,包括对证书的解析,个⼈颁发,证书编码转化等。
2、HTTPS 安全通信的四⼤原则
(1)机密性
就是对数据的加密,在传输数据的过程当中,如果被⼈劫持了数据,那么这个加密的数据对⽅不能轻易获得。
(2)完整性
是指数据在发送到接收的过程当中没有被篡改,从⽽接收到的数据是⼀个完整的数据内容。
(3)身份认证
数据传输的过程当中对于身份的验证,确认对⽅是传送数据过来的⼈。可以解决冒充这样的⻛险。
(4)不可否认性
不能否认已经发⽣的⾏为。⽐如刚才举例双⽅借钱需要有借据并且签名按⼿印,如此⼀来就不能抵赖。
3、通信原理
(1)对称加密
对称加密:通信双⽅都使⽤同⼀把密钥给报⽂进⾏加密和解密。(密码验证)
对称加密具备速度快,性能⾼的特点。是HTTPS的最终采⽤的加密⽅式。 对称加密的通信过程中双⽅都需要同样的密钥。
(2)⾮对称加密
⾮对称加密:解决单项对称密钥的传输问题。就是加密和解密的双⽅使⽤不同的密钥。(密钥对验证)
公钥, 是可以公开的。私钥,不能公开。
公钥加密的内容只有私钥可以解密,私钥加密的内容只有公钥可以解密。
(3)对称加密和⾮对称加密的综合版本
1. 某⽹站拥有⽤于⾮对称加密的公钥A、私钥A。
2. 浏览器向⽹站服务器请求,服务器把公钥A明⽂给传输浏览器。
3. 浏览器随机⽣成⼀个⽤于对称加密的密钥X,⽤公钥A加密后传给服务器。
4. 服务器拿到后⽤私钥A解密得到密钥X。
5. 这样双⽅就都拥有密钥X了,且别⼈⽆法知道它。之后双⽅所有数据都通过密钥X加密解密即可。
成功!HTTPS基本就是采⽤了这种⽅案。
还有⼀个问题,公钥在传输过程中,也有可能被劫持替换,解决办法是数字证书。
(3)CA
认证机构,称为CA。服务端可以向CA申请认证证书,在证书上附加公钥信息,然后发布给客户端。服务端在申请证书的过程中,会提交⽐如DNS主机名等⽹站信息,CA会根据这些信息⽣成证书。
(4)证书
如此⼀来,客户端拿到证书之后,就可以获得证书上⾯我们附带的公钥,再⽤这个公钥加密‘对称加密的密钥’传递给服务端。
(5)数字签名
证书的真假可以通过数字签名来验证。数字签名就相当于学历证书上的证书编号。
apache服务
⼀、Apache 概念
1、概述
最早的 web 服务程序,基于 http 协议提供⽹⻚浏览服务。
2、特点
模块化设置、开放源代码、跨平台应⽤、⽀持多种 web 编程语⾔、运⾏稳定。
3、⼯作模式
(1)Prefork:使⽤进程处理请求,在该模式中⽐较消耗内存,但稳定性⾼,如某个进程出现问题,不会影响其他请求。
(2)Worker:属于多进程模式,每个进程⽣成多个进程;在该模式下消耗的资源⽐较⼩,适合⾼并发请求,但稳定性没有 Prefork 模式稳定。
(3)Event:该模式与 Worker 模式较为相似,不同之处在于在该模式下可以解决keepalive ⻓连接时占⽤线程资源导致浪费的问题。
(4)keep-alive ⻓连接:TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建⽴新连接所需的时间,还节约了带宽。实现⻓连接要客户端和服务端都⽀持⻓连接。
二、搭建apache服务器
1、安装并配置防火墙
[root@git ~]# yum -y install httpd
[root@git ~]# systemctl restart httpd
[root@git ~]# cd /var/www/html/
[root@git html]# echo "我是你爹" > index.html
[root@git html]# dd if=/dev/zero of=/var/www/html/tdr.txt bs=1M count=30
浏览器访问192.168.1.100/tdr.txt能下载文件
//打开防火墙,打开端口也能访问
[root@git html]# systemctl start firewalld
[root@git html]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
或
[root@git html]# firewall-cmd --zone=public --add-service=http --permanent
[root@git html]# firewall-cmd --reload //重载防火墙规则
[root@git html]# firewall-cmd --list-all //查看当前区域下防火墙所有规则
2、apache配置文件
[root@dns ~]# vim /etc/httpd/conf/httpd.conf //改变httpd服务的默认端口
Listen 80 //80改为8081
3、apache 索引⽂件
[root@dns ~]# vim /var/www/html/index.html
<!doctype html>
<hyml>
<head>
<meta charset="utf-8">
<title>正方形</title>
<style>
div{
background-color:red;
width:120px;
height:120px;
}
</style>
</head>
<body>
<div>正方形</div>
</body>
</html>
[root@git ~]# systemctl restart httpd
浏览器访问192.168.1.100:8081
nginx服务
一、Nginx 简介
Nginx(engine X):开源、轻量级、⾼性能的 HTTP 和反向代理服务器,可以代理 HTTP、IMAP/POP3/SMTP 和 TCP/UDP 协议。
基本特点:占⽤内存少、并发能⼒强,采⽤ C 语⾔编写,在性能⽅⾯有⼀定保证。
Nginx 可以⽤来做负载均衡及反向代理使⽤,⽬前使⽤最多的是负载均衡。
与 Nginx 同类的 Web 服务有 Apache、Tomcat 等。
官⽅⽹站:http://nginx.org/
二、nginx服务器特点
(1)模块化设计
Nginx 将模块分为核⼼模块、HTTP 模块、事件模块和邮件模块四类。每个模块都有特定的职责,从⽽实现了整个 Web 服务器的功能。
(2)低内存消耗,⾼并发
Nginx 使⽤ epoll and kqueue 作为开发⼯具,能够⽀持最⼤50000 个并发连接数的响应;不论是系统资源开销还是 CPU 使⽤效率都很优秀。
(3)事件驱动
nginx 采⽤异步⽅式处理请求。
同步:指在发送⽅发出消息后,需要等待接收到接收⽅发回的响应,或者通过回调函数来接收到对⽅响应信息。
异步:指在发送⽅发出请求后,接收⽅不需要返回消息或者不等待返回消息,直接提供响应请求机制。
(4)⾼可靠性,master 与 worker 架构
⼀个主进程和多个⼯作进程。⼯作进程是单线程的,且不需要特殊授权即可运⾏;
master进程:主要⽤来监控worker进程⼯作状态进⾏相应重启、停⽌等操作。
worker进程:进⾏具体提供服务,接受请求和处理请求。
(5)⽀持热更新配置、⽇志⽂件滚动、平滑升级
可向 master 发送 USR1、QUIT 等信号,⽆需强制停⽌服务即可完成热更新。
向 master 发送的 USR1,可实现⽇志⽂件滚动。
向 master 发送的 USR2,可实现平滑升级。
(6)丰富的扩展模块
可在编译安装 nginx 时指定拓展模块,例如:nginx-sticky-module 模块(基于 cookie 来进⾏负载转发)。
三、Nginx 和 Apache 区别
(1)架构
Apache 采⽤多进程架构,每个请求都由⼀个独⽴的进程处理;⽽Nginx采⽤异步事件驱动的架构,可以处理更多的并发连接。
(2)性能
由于Nginx的架构设计,它可以处理更多的并发连接,⽽且在⾼负载情况下表现更加稳定和可靠。因此,Nginx通常被认为是⽐Apache更⾼效的Web服务器。
(3)配置
Apache 的配置⽂件⽐较复杂,需要⼀定的学习和经验才能正确配置;⽽ Nginx 的配置⽂件⽐较简洁和可读性强,更容易理解和配置。
(4)功能
nginx有许多模块可以扩展其功能,例如 mod_rewrite ⽤于URL重写,mod_ssl⽤于 SSL 加密等;⽽apach 的功能⽐较简单,但是可以通过第三⽅模块扩展其功能。
四、nginx基本功能
(1)静态资源web服务器
(2)基于域名/IP/端⼝的虚拟主机
(3)HTTP/HTTPS、SMTP、POP3 和 TCP/UDP 反向代理
(4)负载均衡
(5)⻚⾯缓存
(6)⽀持代理 FastCGI、uWSGI 等应⽤服务器
(7)⽀持 gzip、expires
(8)URL Rewrite
(9)路径别名
(10)基于 IP、⽤户的访问控制
(11)⽀持访问速率、并发限制
五、源码安装:
[root@dns ~]# yum -y remove nginx //先删掉之前的
[root@dns ~]# wget https://nginx.org/download/nginx-1.26.1.tar.gz //官网下载最新版tar包
[root@dns ~]# tar -zxvf nginx-1.26.1.tar.gz //解压
[root@dns ~]# yum -y install gcc gcc-c++ make //编译工具
[root@dns ~]# yum -y install openssl-devel pcre-devel //openssl加密认证,pcre支持 rewrite(重写、复写)功能
[root@dns nginx-1.26.1]# cd nginx-1.26.1/
[root@dns nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream //“configure”,编译安装前的预配置。
--prefix=/usr/local/nginx:指定软件的安装路径,注意不是安装包⽬录,⽽是软件要安装在哪。
--user=nginx:程序⽤户为nginx。
--group=nginx:组为nginx。
--with-http_ssl_module:提供HTTPS⽀持,ssl证书模块。
--with-http_stub_status_module:获取nginx⼯作状态模块。
--with-http_realip_module:获取真实客户端IP。
--with-stream:启⽤TCP/UDP代理模块。
[root@dns nginx-1.26.1]# make && make install //编译以及编译安装
[root@dns nginx-1.26.1]# useradd -s /bin/nologin -M nginx //创建用户
[root@dns nginx-1.26.1]# cd /usr/local/nginx/
[root@dns nginx]# ls
conf html logs sbin
#conf:存放nginx配置⽂件的⽬录
#html:存放资源⽂件也就是⽹站⾸⻚(站点根⽬录)的⽬录
#logs:存放nginx⽇志的⽬录
#sbin:存放nginx可执⾏程序的⽬录
[root@dns nginx]# ./sbin/nginx //启动
[root@dns nginx]# netstat -lnput | grep nginx //查看端口
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9202/nginx: master
六、优化nginx服务控制
(1)直接使用nginx命令
[root@dns nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/bin/ //做个软链接
[root@dns nginx]# ls -l /usr/bin/nginx
lrwxrwxrwx. 1 root root 27 7月 29 16:15 /usr/bin/nginx -> /usr/local/nginx/sbin/nginx
[root@dns nginx]# nginx -s stop //停止服务
[root@dns nginx]# nginx //现在就可以直接在命令行输入nginx就可以启动服务
(2)使用脚本启动
[root@dns nginx]# vim ~/nginx.sh //用脚本启动
#!/bin/bash
/usr/local/nginx/sbin/nginx &> /dev/null
netstat -lnput|grep nginx
if [ $? -eq 0 ];then
echo "nginx正在执行,或者是80被占用"
fi
[root@dns nginx]# source ~/nginx.sh
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9595/nginx: master
nginx正在执行,或者80端口被占用
[root@dns nginx]# nginx -s stop
[root@dns nginx]# source ~/nginx.sh
(3)以 systemctl 控制 nginx
[root@dns nginx]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=Flase
[Install]
WantedBy=multi-user.target
[root@dns nginx]# systemctl daemon-reload //重载systemctl的配置⽂件,以便nginx.service⽣效
[root@dns ~]# reboot //重启以后才生效
[root@dns ~]# systemctl start nginx //现在可以用systemctl使用nginx
[root@dns ~]# netstat -lnput|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9909/nginx: master
七、开启 nginx 状态监听模块
1、修改配置
[root@dns ~]# vim /usr/local/nginx/conf/nginx.conf
location /status{ //nginx状态的监听模块
stub_status on;
access_log off;
}
[root@dns ~]# systemctl reload nginx //重启,或systemctl restart nginx.service
2.访问测试