Nginx-第一天--HTTP
目录
HTTP介绍
HTTP工作原理
HTTP三点注意事项
HTTP消息结构
客户端请求
服务器响应消息
HTTP请求方法
HTTP 响应头信息(了解)
HTTP状态码
断开连接
Apache虚拟主机
虚拟主机的配置文件/子配置文件
基于域名的虚拟主机
基于ip的虚拟主机
基于端口的虚拟主机
Apache访问控制
允许所有人访问
拒绝所有人访问
允许一部分人访问
拒绝一部分人访问
面试题*
HTTP介绍
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
在TCP/IP协议参考模型的各层对应的协议如下图,其中HTTP是应用层的协议。
HTTP工作原理
HTTP协议工作于客户端-服务端架构上(Client-Server)。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Nginx,Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
HTTP三点注意事项
HTTP是无连接:无连接含义是限制每一次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。这种一次性连接主要考虑到服务器面向的是Internet中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
HTTP是媒体独立:这意味着,只要客户端和服务器知道如何处理数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用合适的MIME-type内容类型。(注意:MIME类型是描述信息内容类型的因特网标准:多用于互联网邮件扩展)
HTTP是无状态:HTTP协议是无状态协议。无状态协议对于事务处理没有记忆力。缺少状态意味着如果后续处理前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时,特德应答就比较快。
HTTP协议通信流程:
http有动态请求和静态请求,如果和数据库有交互的话就是动态请求,如登录操作;反之不需要访问数据库就是静态请求。
(扩展)通用网关接口(CGI)是Web服务器的接口规范,用于执行在动态生成Web页面的服务器上运行的程序,如控制台应用程序(也称为命令行接口程序)。
HTTP消息结构
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Nginx、Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来建立连接和传输数据。
扩展:URI和URL的区别
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
URI一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个URL都是URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。
客户端请求
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据(请求体)四个部分组成,下图给出了请求报文的一般格式。
请求行由请求方法:URL、协议版本组成,他们之间使用空格隔开
例如:因为做了安全防护,所以无法看到http协议
请求头部
请求体:
请求体中存放的,是要通过POST方式提交到服务器的数据注意!!!只有POST请求才有请求体,GET请求没有请求体!
服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
实例
下面实例是一点典型的使用GET来传递数据的实例:
客户端请求:
Connected to www.testpm.cn (47.244.247.240) port 80 (#0)
> GET /hello.txt HTTP/1.1 # 请求方式与版本协议。
> User-Agent: curl/7.29.0 #用什么客户端访问
> Host: www.testpm.cn #主机名,域名。主机和端口号,
> Accept: */* #匹配什么文件类型,“*” 是通用匹配。匹配所有类型服务端响应:
< HTTP/1.1 200 OK #请求返回的状态码
< Server: nginx/1.16.0 #请求的服务和版本号
< Date: Thu, 04 Jul 2019 08:19:40 GMT
< Content-Type: text/plain #文本类型,有html,plain:普通文本
< Content-Length: 12
< Last-Modified: Thu, 04 Jul 2019 08:13:25 GMT
< Connection: keep-alive #是否支持长连接
< ETag: "5d1db525-c" #标识,每次访问如果与最开始的一样返回304否则校验不一致返回200
< Accept-Ranges: bytes备注:长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP 响应头信息(了解)
HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。
在本章节中我们将具体来介绍HTTP响应头信息。
HTTP状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码的英文为HTTP Status Code。
下面是常见的HTTP状态码:
分类 | 描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接受并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
HTTP状态码列表
200-请求成功
www.baidu.com ---->www.qfedu.com
301-资源(网页等)被永久转移到其他url(永久重定向)
302-临时重定向
304 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
404-请求的资源(网页等)不存在
403-请求被拒绝
500-内部服务器错误
502-Bad gateway 服务器报错
503-服务器超负荷/服务器在维护
505-不支持HTTP协议版本
以下内容转自博主:咸蛋黄派
断开连接
在服务器响应完毕后,一次会话就结束了,请问这时候连接会断开吗?
(1)长短连接
是否断开我们需要区分HTTP版本:
(1)在HTTP/1.0版本的时候,客户端与服务器完成一个请求/响应之后,会将之前建立的TCP连接断开,下次请求的时候又要重新建立TCP连接,这也被称为短连接
(2)在HTTP1.0发布仅半年后(1997年1月),HTTP/1.1版本发布并带来一个新的功能:
在客户端与服务器完成一次请求/响应之后,允许不断开TCP连接,这意味着下次请求就直接使用这个TCP连接而不再需要重新握手建立新连接,这也被称为长连接
注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。
早在1999年HTTP1.1就推广普及,所以现在浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器建立长连接,而服务器也可以设置是否愿意建立长连接,如果是close,表示已关闭。
(2)长连接优缺点
对于服务器来说建立长连接有优点也有缺点:
优点:
当网站中有大量静态资源(图片、css、js等)就可以开启长连接,也就是说几张图片就可以通过一次TCP连接发送。
缺点:
当客户端请求一次时候不在请求,而服务器却开着长连接资源被占用着,这是严重浪费资源。
所以是否开启长连接,长连接时间都需要根据网站自身来合理设置。
注:大家不要小看这一个TCP连接,在一次客户端HTTP完整的请求中(DNS寻址、建立TCP连接、请求、等待、解析网页、断开TCP连接)建立TCP连接占用的时间比还是很大的。
————————————————
版权声明:本文为CSDN博主「咸蛋黄派」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hanjinjuan/article/details/119246276
Apache虚拟主机
/etc/httpd/conf/httpd.conf(主配置文件)
/etc/httpd/conf.d/ 子配置文件(虚拟主机配置文件)
/var/www/html/ 默认网站发布目录(自定义)httpd.conf(主配置文件)
Listen 监听端口
documentroot 网站发布目录
errorlog 错误日志
directory 访问控制
accesslog 访问日志
serveradmin
user 运用服务的用户
group 组
主配置文件内容详解
要学会去官网查看官方文档Welcome to The Apache Software Foundation!
虚拟主机的配置文件/子配置文件
创建虚拟主机的配置文件 /etc/httpd/conf.d/ 下创建.conf的虚拟主机配置文件 (主配置文件在/etc/httpd/conf/httpd.conf)
分类:
- 基于端口
- 基于ip
- 基于域名
在做这三个实验时,如果做基于端口的项目试验,那么ip和域名必须相同。例如
- 基于ip创建的虚拟主机,其他的相同,ip不同
- 基于端口创建的虚拟主机,其他的相同,端口不同
- 基于域名创建的虚拟主机,其他的相同,域名不同(需要在本地hosts文件做域名解析)
注意:做实验之前一定要确认关闭firewalld和selinux!
基于域名的虚拟主机
基于域名
[root@localhost ~]# vim /etc/httpd/conf.d/bbs.conf
<VirtualHost *:80>ServerName www.zcg666.com DocumentRoot /bbs
</VirtualHost><Directory "/bbs">AllowOverride allRequire all granted
</Directory>[root@localhost ~]# vim /etc/httpd/conf.d/blog.conf
<VirtualHost *:80>ServerName www.zcy666.comDocumentRoot /blog
</VirtualHost><Directory "/blog">Require all granted
</Directory>
在Windows电脑的c盘windows/System32/dirvers/etc/hosts做本地解析
基于ip的虚拟主机
做这个实验时,可以事先在虚拟机上添加一个临时ip,或者添加一个网卡接口永久添加一个ip
ip a a 192.168.242.156 dev ens33 临时添加ip,重启机器或者网络后ip会丢失
dev是设备名称
ens33是网卡名
[root@localhost ~]# ip a a 192.168.242.151 dev ens33
[root@localhost ~]# ip a |grep "151"inet 192.168.242.151/32 scope global ens33
[root@localhost ~]# vim /etc/httpd/conf.d/bbs.conf
<VirtualHost 192.168.242.140:80>ServerName localhostDocumentRoot /bbs
</VirtualHost><Directory "/bbs">AllowOverride allRequire all granted
</Directory>[root@localhost ~]# vim /etc/httpd/conf.d/blog.conf<VirtualHost 192.168.242.151:80>ServerName localhostDocumentRoot /blog
</VirtualHost><Directory "/blog">Require all granted
</Directory>
[root@localhost ~]# systemctl restart httpd
基于端口的虚拟主机
使用不同端口访问实验项目需要在apache的主配置文件添加监听端口,默认是只有80
# vim /etc/httpd/conf/httpd.conf
[root@localhost ~]# vim /etc/httpd/conf.d/bbs.conf
<VirtualHost *:80>ServerName localhostDocumentRoot /bbs
</VirtualHost><Directory "/bbs">AllowOverride allRequire all granted
</Directory>
[root@localhost ~]# vim /etc/httpd/conf.d/blog.conf
<VirtualHost *:81>ServerName localhostDocumentRoot /blog
</VirtualHost><Directory "/blog">Require all granted
</Directory
[root@localhost ~]# systemctl restart httpd
Apache访问控制
做访问控制实验还是基于httpd的子配置文件,设置允许所有人访问,只允许一部分客户端访问,只拒绝一部分客户访问:拒绝所有人访问。
允许所有人访问
[root@localhost ~]# vim /etc/httpd/conf.d/bbs.conf
<VirtualHost *:80>ServerName localhostDocumentRoot /bbs
</VirtualHost><Directory "/bbs">AllowOverride all<RequireAll> #需要添加这个标签,否则修改的内容不会生效,重启服务可能会报错Require all granted 允许所有人访问</RequireAll>
</Directory>
拒绝所有人访问
[root@localhost ~]# vim /etc/httpd/conf.d/bbs.conf
<VirtualHost *:80>ServerName localhostDocumentRoot /bbs
</VirtualHost><Directory "/bbs">AllowOverride all<RequireAll>Require all denied 拒绝所有人访问</RequireAll>
</Directory>
允许一部分人访问
[root@localhost ~]# vim /etc/httpd/conf.d/bbs.conf
<VirtualHost *:80>ServerName localhostDocumentRoot /bbs
</VirtualHost><Directory "/bbs">AllowOverride allRequire ip 192.168.242.139 只允许这个ip访问,也可以允许一个网段内的所有ip
</Directory>
拒绝一部分人访问
[root@localhost ~]# vim /etc/httpd/conf.d/bbs.conf
<VirtualHost *:80>ServerName localhostDocumentRoot /bbs
</VirtualHost><Directory "/bbs">AllowOverride all<RequireAll>Require not ip 192.168.242.139Require all granted</RequireAll>
</Directory>
[root@localhost ~]# systemctl restart httpd
面试题*
pv访问量(Page View),即页面访问量,每打开一次页面PV计数+1,刷新页面也是。
通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。
UV访问数(Unique Visitor)指独立访客访问数,一台电脑终端为一个访客。响应时间(RT) :
响应时间是指系统对请求作出响应的时间
吞吐量(Throughput):
吞吐量是指系统在单位时间内处理请求的数量
并发用户数:
并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量
QPS每秒查询率(Query Per Second) :
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。
扩展
[root@localhost ~]# htpasswd -cm /etc/httpd/conf/httppasswd xingdian
New password:
Re-type new password:
Adding password for user xingdian
[root@localhost ~]# cat /etc/httpd/conf/httppasswd
xingdian:$apr1$F7BhWOIe$OCUNAtFsMkAkJfqrkdOpr/
[root@localhost ~]# vim /bbs/.htaccess
AuthName "hello kity"
AuthType Basic
AuthUserFile "/etc/httpd/conf/httppasswd"
Require valid-user
Nginx-第一天--HTTP相关推荐
- docker nginx部署前端项目
最近一直在搞前后端分类,一直在想前端的html页面应该用什么部署 想来想去,如果用tomcat好像有点浪费资源,作为程序员自然要时时刻刻追求新的东西 一直以来都是在apache tomcat上面运行, ...
- Docker for windows挂载文件到Nginx目录踩坑小记
前言:因为最近在学Docker,通过菜鸟教程的文档,在学到Docker安装Nginx时,挂载目录运行容器时碰到了错误,一直跑不起来,浪费了很多时间,这里记录中途的解决方法 相关教程: 菜鸟教程 这是菜 ...
- wsl开nginx和php-fpm遇到的几个小问题
最近换工作又用回了windows.在windows平台下php和nginx 没有Linux下直接用包管理工具来的方便,就准备在wsl下安装nginx和php,然后文件放在d:\\webroot下运行. ...
- 解析nginx负载均衡
摘要:对于一个大型网站来说,负载均衡是永恒的话题.随着硬件技术的迅猛发展,越来越多的负载均衡硬件设备涌现出来,如F5 BIG-IP.Citrix NetScaler.Radware等等,虽然可以解决问 ...
- 基于nginx实现反向代理
准备工作:关闭虚拟机防火墙,selinux,关闭物理机防火墙,关闭物理机的代理. 第一步:配置上游服务器(这里用apache) 1.安装apache # yum install httpd -y 2. ...
- Tomcat+nginx+keepalived+memcached实现双VIP负载均衡及Session会话保持
准备好tomcat 第一台 tar vxf apache-tomcat-7.0.54.tar.gz mv apache-tomcat-7.0.54 /usr/local/tomcat tar vxf ...
- nginx介绍(一) 简介篇
Nginx(发音为"engine x")是一款由俄罗斯软件工程师Igor Sysoev写的开源的web服务器.自从2004年发布以来nginx一直关注于高性能.高并发.低内存的使用 ...
- nginx总结(面试必看)
nginx的产生 一个公司的项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户 慢慢的,使用平台的用户越来越多了,并发量慢 ...
- CI框架 CodeIgniter 伪静态 htaccess设置和Nginx伪静态方法
2019独角兽企业重金招聘Python工程师标准>>> 众所周知,LAMP代表Linux下Apache.MySQL.PHP这种网站服务器架构:而LNMP指的是Linux下Nginx. ...
- 音视频开发(8)---nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/redstarofsle ...
最新文章
- OpenCV计算机视觉编程攻略之用色调、饱和度和亮度表示颜色
- css布局方式_收藏!40 个 CSS 布局技巧
- 一加7 Pro在京东开启预约:人数超34万
- Linux网络协议:当eBPF遇上Linux内核网络 | Linux内核之旅
- 【推荐实践】智能推荐算法在直播场景中的应用
- 【Vue】Vue项目的创建以及饿了么UI的使用
- 阐述SDN的原理、SDN使用场景、SDN技术的优缺点、SDN发展现状及分析SDN对社会和环境的影响
- 感应(异步)电机磁场定向控制速度环PI控制参数设计
- 装饰器模式实现咖啡店(Java代码实例)
- Enrico Da Vincent
- FPGA数字信号处理(十八)Quartus CIC IP核实现
- js实现拼图游戏(数字版本与图片版本)
- microserver gen10 更换硬盘,解决无法开机问题
- 使用selenium解决12306的登录问题
- 微信公众号文章中如何添加附件?
- 小甲鱼《零基础学习Python》课后笔记(二十八):文件——因为懂你,所以永恒
- 运维工作常见问题处理74-100(三)
- 百度开辟新战区:源计划升级为图腾
- HTML5 FLV Player(odd.player.js)支持FLV/fMP4/DASH
- 30岁前!我从农民工自学成为了一个程序员
热门文章
- NO.4【婳骨】の小房子程序
- 语文文学常识。不转可惜!谁整理的?太佩服啦!
- 快手只发作品不直播的赚钱方法
- 通信协议基础知识总结二
- [typescript] ERROR TS18003: No inputs were found in config file ‘tsconfig.json‘. Specified ‘include‘
- 计算机1.1n次方等于100,1的N次方等于1,那1.01的365次方是多少?小进步助你迎来闪光时刻...
- python字符串操作作业_Python基础(7)——字符串作业
- 传说中让理科生沉默,让文科生落泪的文史综合题
- qt make project
- c++rpg黑框游戏_从C语言到第一个黑框游戏