文章目录
http简介
- 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
- 端口:http为80/8080。https为443。
IANA:互联网数字分配机构
0-1023:众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限启用并让进程监听);
1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/TCP
41952-60000:客户端程序随机使用的端口,动态端口,或私有端口; - 服务:是运行在操作系统后台的一个或多个程序,为用户或系统提供某项特定的服务。服务配置最多的是网络服务,网络服务通常就是为其他用户,其他计算机提供某项功能服务。
web服务器
- Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。
- 目前最主流的三个Web服务器是Apache和Microsoft的Internet信息服务器(Internet Information Services,IIS)unix nginx。
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。同时Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。也是一个基金会的名称、一种武装直升机等等。 - iis是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和Windows Server 2003一起发行,但在Windows XP Home版本上并没有IIS。IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。
- Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
网页、网页文件和网站
- 网页是网站的基本信息单位,是WWW的基本文档。它由文字、图片、动画、声音等多种媒体信息以及链接组成,是用HTML编写的,通过链接实现与其他网页或网站的关联和跳转。
网页文件是用HTML(标准通用标记语言下的一个应用)编写的,可在WWW上传输,能被浏览器识别显示的文本文件。其扩展名是.htm和.html。
网站由众多不同内容的网页构成,网页的内容可体现网站的全部功能。通常把进入网站首先看到的网页称为首页或主页(homepage),例如,新浪、网易、搜狐就是国内比较知名的大型门户网站。
www
- 是环球信息网的缩写,(亦作“Web”、“WWW”、“‘W3’”,英文全称为“World Wide Web”),中文名字为“万维网”,"环球网"等,常简称为Web。 分为Web客户端和Web服务器程序。 WWW可以让Web客户端(常用浏览器)访问浏览Web服务器上的页面。 是一个由许多互相链接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样“资源”;并且由一个全局“统一资源标识符”(URI)标识;这些资源通过超文本传输协议(Hypertext Transfer Protocol)传送给用户,而后者通过点击链接来获得资源。
(也就是全球信息广播的意思,通常说的上网就是使用www来查询用户所需要的信息。www可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方式将信息以Internet传递到世界各处去。
与其他服务器类似,当你连接上www网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可以解析这些数据的软件来处理,那就是浏览器。www服务器与客户端浏览器之间的连接图。)
- 互联网—万维网区别
Internet提供的主要服务有万维网(WWW)、文件传输(FTP)、电子邮件(E-mail)、远程登录(Telnet)、手机 (3GHZ) 等。 - 浏览器怎样向web服务器请求数据以及服务器怎样把文档传送给浏览器呢?
- 这就是由http协议来定义的,(Hyper Text Transport Protocol,HTTP,超文本传输协议)。
- www服务器需要提供可让客户端浏览的平台。目前最主流的Web服务器是Apache、Microsoft的Internet信息服务器(Internet Information Services,IIS)和unix nginx。
- 服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓的标记来规范所要显示的数据格式。
- 客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。那么著名的浏览器就有内建在Windows操作系统内的IE浏览器了,还有Firefox浏览器和Google的chrome浏览器。
web服务器的类型
- 仅提供用户浏览的单向静态网页
单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,所以你可以到该网站上去浏览,但是无法进行数据的上传。 - 提供用户互动接口的动态网站
这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过“网页程序语言”来实现与用户互动的行为。常见的例如:PHP网页程序语言,配合数据库系统来进行数据的读、写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库的内容,网页程序并没有任何改变。
动态网站架构lamp
- 谈到apache,我们不得不提到lamp
静态网页:html
动态网页 : 和后台数据库实现一些交互 php jsp python perl …
Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案. - LAMP(linux+Apache+MySQL+PHP)
Apache主要提供www的服务器平台
MySQL:传统的文件读取是很麻烦的,如果你只要读取该文件当中的一小部分,系统还是会将整个文件读出来,若又有人同时读取同一个文件时,那就会造成效率与系统上的问题,所以才会有数据库系统的推出。数据库其实是一种特殊格式的文件,这种文件要通过特殊接口(数据库软件)来进行读写。由于这个特殊接口已经针对数据的查询、写入做过优化设计,因此很适合多人同时写入与查询工作。
PHP:PHP可以被用来建立动态网页,PHP程序代码可以直接在HTML网页当中嵌入,就像编辑HTML网页一样简单。PHP是一种“程序语言”,这种程序语言可以直接在网页当中编写,不需要经过编译即可执行
搭建动态网站的需求
- 可支持的操作系统:让所有需要的软件都能够进行安装。
- 可运行的www服务器:例如Apache。
- 网页程序语言:Perl(Practical Extraction and Report Language,实用报表提取语言)、PHP(Hypertext Preprocessor,超文本预处理器,是一种通用开源脚本语言)、JSP(Java Server Pages,java服务器页面)、CGI(Common Gateway Interface,公共网关接口)、ASP(Active Server Pages,动态服务器页面)。
- 数据存储的数据库系统 :MySQL、MSSQL、Oracle等。
网址的意义
- web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在Redhat中,这个目录默认在/var/www/html。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。
- URL:Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。<协议>://<主机地址或主机名>[:port]/<目录资源,路径>
- 浏览器常支持的协议有:http、https、ftp等。
- 主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。
http协议运行原理
- Web浏览器使用HTTP命令向一个特定的服务器发出Web页面请求。
- 若该服务器在特定端口(通常是TCP 80端口)处接收到Web页面请求后,就发送一个应答并在客户和服务器之间建立连接。
- 服务器Web查找客户端所需文档,若Web服务器查找到所请求的文档,就会将所请求的文档传送给Web浏览器。若该文档不存在,则服务器会发送一个相应的错误提示文档给客户端。
- Web浏览器接收到文档后,就将它显示出来。
- 当客户端浏览完成后,就断开与服务器的连接。
请求相应过程
浏览器与服务器之间传递数据的方法:
- 状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
状态代码 | 简介 | 解释 |
---|---|---|
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 | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
http请求报文
- 请求行
请求行分为三个部分:请求方法、请求地址和协议版本
- 请求方法
HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。
最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。 - 请求地址
URL:统一资源定位符,是一种自愿位置的抽象唯一识别方法。
组成:<协议>://<主机>:<端口>/<路径>
端口和路径有时可以省略(HTTP默认端口号是80)
如下例: - 协议版本
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
- 请求头部
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。
常见请求头如下:
- 请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行非常重要,必不可少
- 请求数据
可选部分,比如GET请求就没有请求数据。
下面是一个POST方法的请求报文:
POST /index.php HTTP/1.1 请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=aa&password=1234 请求数据
http响应报文
- HTTP响应报文主要由状态行、响应头部、空行以及响应数据组成
- 状态行
由3部分组成,分别为:协议版本,状态码,状态码描述。
其中协议版本与请求报文一致,状态码描述是对状态码的简单描述,所以这里就只介绍状态码。
- 状态码
状态代码为3位数字。
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。
下面列举几个常见的:
- 响应头部
与请求头部类似,为响应报文添加了一些附加信息
常见响应头部如下: - 响应数据
用于存放需要返回给客户端的数据信息。
下面是一个响应报文的实例:
HTTP/1.1 200 OK 状态行
Date: Sun, 17 Mar 2013 08:12:54 GMT 响应头部
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
空行
<html> 响应数据
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
代理服务器: S和C之间的访问实体
缓存服务器: 特殊的代理服务器
网关服务器: 一个http/FTP网关服务器C—http – 8080 (FTP<–>HTTP )-----S FTP
<源ip地址><源端口号> <目标ip地址><端口>
web网站搭建
- 搭建流程
- 搭建环境:
- 搭建架构C/S
- (客户端)-网站访问格式:
- (服务端) 服务搭建执行命令框架
- 安装软件包
- 启用服务
- 设置防火墙,selinux规则策略
- 配置服务,设置访问信息(根据需求设置访问格式,访问内容)
- 重启服务
- 通过客户端测试
- Linux环境搭建步骤
- yum install httpd 安装软件包
- systemctl start httpd 启用服务
- systemctl stop firewalld 关闭防火墙
setenfoce 0 关闭selinux - Vim /etc/httpd/conf.d/vhosts.conf 设置主机访问目录,以及目录权限
vim /var/www/html/index.html 定义网站资源信息 - systemctl restart httpd 重启服务
- 打开游览器通过http://ip 通过指定格式访问测试,是否满足需求
web服务器基本配置以及常用文件目录介绍
搭建静态网站——基于http协议的静态网站
- 服务器端:在linux上面实现网页服务器需要Apache这套服务器软件,httpd提供Apache主程序。
http://httpd.apache.org/docs/2.4/ - 安装软件
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# rpm -ql httpd 查看安装配置
- /etc/httpd/conf/httpd.conf 主要的配置文件 。
- /etc/httpd/conf.d/*.conf 额外的参数文件。如果你不想要修改原始配置文件httpd.conf的话,那么你可以将你自己的额外参数文件独立出来,例如你想要有自己的额外设置值,可以将它写入/etc/httpd/conf.d/zhuji.conf(注意,扩展名一定是.conf),而启动Apache时,这个文件就会被读入主要配置文件当中了。
- /var/www/html/这就是默认的首页所在目录,当输入网址时所显示的数据,就是放在这个目录当中的首页文件(默认为index.html)。
- /var/www/cgi-bin/默认给一些可执行的CGI(网页程序)程序放置的目录,当输入网址/cgi-bin/时所显示的数据所在。
- /var/log/httpd/默认的Apache日志文件都放在这里,对于流量比较大的网站来说,一个星期的日志文件的数据可以达到1GB左右。
- 启动脚本:/usr/lib/systemd/system/httpd.service
使用端口:80(http),443(https)
[root@localhost httpd]# netstat -tlnup | grep 80
- 点击查看主配置文件内容:vim /etc/httpd/conf/httpd.conf
- httpd.conf配置文件主要由3个部分组成
Global Environment 全局环境
Main Server Configuration主服务器配置
Virtual hosts虚拟主机
(每部分都有相应的配置语句,该文件所有配置语句的语法为“配置参数名称 参数值”的形式。
httpd.conf的配置语句除了选项的参数值以外,所有选项指令均不区分大小写,可以在每一行前用“#”号表示注释。
全局配置的相关参数,全局的参数一般不用改动 )
配置路径: /etc/httpd/*
主配置目录: /etc/httpd/conf
子配置目录: /etc/httpd/conf.d(apache是一个模块化的一个配置服务,所以我们可以根据每个模块进行一些配置,不仅对程序本身进行模块化配置对配置文件也进行了模块化配置)
<>
</>
服务器的搭建
1.1 默认http访问界面
systemctl stop firewalld 停止防火墙
setenforce 0 关闭selinux
mount /dev/sr0 /mnt
vim /etc/yum.repos.d/base.repo
[base]
name=base
baseurl=file:///mnt
gpgcheck=0
enable=1
yum install httpd -y
systemctl status httpd
vim /etc/httpd/conf/httpd.conf
ServerName 0.0.0.0:80
systemctl restart httpd
[root@localhost ~]# vim /var/www/html/index.html
1.2 http访问静态界面
查看主配置文件参数如下:
vim /etc/httpd/conf/httpd.conf
LISTEN 80
ServerName 0.0.0.0:8080
DocumentRoot "/var/www/html"
ser apache
Group apache
<Direcotry />
Allow Override none
RequieAll denied
</Directroy>
<Directory "/var/www/html">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
[root@localhost ~]#echo helloworld > /var/www/html/index.html
<VirtualHost *:@@Port@@>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "@@ServerRoot@@/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "/var/log/httpd/dummy-host2.example.com-error_log"
CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common
</VirtualHost>
1.3 基于ip地址对web服务器的访问
- 一个ip对应一个网。例如实现以下操作:
建立一个192.168.10.100的网站 ,文件放在/www/100,内容显示this is 192.168.10.100.
建立一个192.168.10.200的网站 ,文件放在/www/200,内容显示this is 192.168.10.200.
第一步:配置网络:
[root@localhost ~]# nmcli connection modify eno16777736 ipv4.addresses 192.168.10.100/24 ipv4.gateway 192.168.10.1 ipv4.dns 114.114.114.114 ipv4.method manual connection.autoconnect yes
[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.10.200/24 ipv4.gateway 192.168.10.1 ipv4.dns 114.114.114.114 ipv4.method manual connection.autoconnect yes
[root@localhost ~]# nmcli connection up eno16777736
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/12)
第二步:编辑配置文件:
[root@localhost ~]# mkdir /www/{100,200} -pv
mkdir: 已创建目录 "/www/100"
mkdir: 已创建目录 "/www/200"
[root@localhost ~]# echo this is 192.168.10.100 > /www/100/index.html
[root@localhost ~]# echo this is 192.168.10.200 > /www/200/index.html
vim /etc/httpd/conf.d/vhosts.conf
<Direotory /www>
AllowOverride none ----允许覆盖
Require all granted -----设置访问目录权限
</Directory>
<VirtualHost 192.168.10.100:80>
DocumentRoot /www/100 -------指定当前主机访问网站根目录
ServerName 192.168.10.100 ----指定访问网站名称
ServerAdmin root@localhost
ErrorLog "/var/log/httpd/dummy-host2.example.com-error_log" ---错误日志
CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common ---访问日志
</VirtualHost>
<VirtualHost 192.168.10.200:80>
DocumentRoot /www/200
ServerName 192.168.10.200
ErrorLog "/var/log/httpd/dummy-host2.example.com-error_log"
CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common
</VirtualHost>
[root@localhost ~]# systemctl restart httpd
测试
[root@localhost ~]# curl http://192.168.10.200
this is 192.168.10.200
[root@localhost ~]# curl http://192.168.10.100
this is 192.168.10.100
- 搭建web网站基于ip访问,当前web网站的根目录为/www,创建当前网站虚拟目录,内容自定
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf
[root@localhost ~]# mkdir /www/111 -pv
mkdir: created directory ‘/www/111’
[root@localhost ~]# echo 今天是3月14日-白色情人节 > /www/111/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl http://192.168.8.138
今天是3月14日-白色情人节
1.4 基于端口
- 首先在vhosts.conf文件中添加LISTEN端口,然后“VirtualHost +IP+:端口 ”即可
- 基于不同端口访问不同网站
搭建web服务器通过端口10000能够访问到网页内容为“小胖,你咋这么胖呢!”
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf
[root@localhost ~]# echo 小胖,你咋这么胖呢!> /www/131/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl http://192.168.8.138:8909
小胖,你咋这么胖呢!
1.5 基于域名
- 基于域名的网站,需要用到域名解析。域名------->ip地址
浏览器如何通过域名去查询URL对应的IP(对应服务器地址):
- 浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
- 操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中的hosts文件找。hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
windows下的hosts文件路径:C:\Windows\System32\drivers\etc\hosts
Linux下的hosts文件路径:/etc/hosts - 路由缓存:路由器也有DNS缓存。
- ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。
- 根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)。
- 要求搭建web服务器,创建基于域名的虚拟主机,能够使用www.xiaopang.com和www.dapang.com访问各自的网站网站存放路径分别为/xiaopang和/dapang,内容自定
[root@localhost~]#vim/etc/httpd/conf.d/vhosts.conf
[root@localhost ~]# vim /etc/hosts
windows:
C:\Windows\System32\drivers\etc\hosts
Linux
/etc/hosts
[root@localhost ~]# mkdir /xiaopang/xp -pv
mkdir: created directory ‘/xiaopang’
mkdir: created directory ‘/xiaopang/xp’
[root@localhost ~]# mkdir /dapang/dp -pv
mkdir: created directory ‘/dapang’
mkdir: created directory ‘/dapang/dp’
[root@localhost ~]# echo “你好,我是小胖哦!!!” > /xiaopang/xp/index.html
[root@localhost ~]# echo “你好,我是大胖哦!!!” > /dapang/dp/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl http://www.xiaopang.com
你好,我是小胖哦!!!
[root@localhost ~]# curl http://www.dapang.com
你好,我是大胖哦!!!
1.6 https(ssl认证)
- 搭建静态网站——基于https协议的静态网站
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。
-
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道。HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。
共享密钥加密(对称密钥加密):加密和解密同用一个密钥。加密时就必须将密钥传送给对方,那么如何安全的传输呢?
公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走
但由于公开密钥比共享密钥要慢,所以我们就需要综合一下他们两者的优缺点,使他们共同使用,而这也是HTTPS采用的加密方式。在交换密钥阶段使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。 -
这里就有一个问题,如何证明公开密钥本省是货真价实的公开密钥。如,正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输过程中,真正的公开密钥已经被攻击者替换掉了。这个时候就需要第三方公证单位来帮忙啦。
CA就是一个公认的公证单位,你可以自行产生一把密钥且制作出必要的证书数据并向CA单位注册,那么当客户端的浏览器在浏览时,该浏览器会主动向CA单位确认该证书是否为合法注册过,如果是,那么该次连接才会建立,如果不是,浏览器会发出警告信息,告知用户应避免建立连接。所以说,如此一来WWW服务器不但有公证单位的证书,用户在建立连接时也比较有保障。
接收到证书的客户端可以使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可以明确两件事:
一、认证服务器的公开密钥的是真实有效的数字证书认证机构。
二、服务器的公开密钥是值得信赖的。 -
此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。
- 服务器把自己的公开密钥登录至数字证书认证机构。
- 数字证书认证机构用自己的私有密钥向服务器的公开密钥署数字签名并颁发公钥证书。
- 客户端拿到服务器的公钥证书后,使用数字签名认证机构的公开密钥,向数字证书认证机构验证公钥证书上的数字签名,以确认服务器的公开密钥的真实性。
- 使用服务器的公开密钥对报文加密后发送。
- 服务器用私有密钥对报文解密。
- HTTPS的安全通信机制:
- 工作流程可大致分为三个阶段:
- 认证服务器:浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。
- 协商会话密钥:客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。
- 加密通讯:此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。
证书标准:X.509,该标准定义了证书中应该包含哪些内容。
X.509通用的证书格式包含三个文件:key,csr,crt。
- key是私钥文件。
- csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名。在制作csr文件时,必须使用自己的私钥来签署,还可以设定一个密钥。
- crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息。
- PKI:Public Key Infrastructure,公钥基础设施;PKI是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
- mod_ssl一种以openssl 的工具箱为基础专门为apache webserver 提供密码保护的软件。
练习例题
1.7 虚拟目录和用户控制
虚拟目录实现原理:
目的:在一台计算机上创建多个WEB站点,并为每个WEB站点设置不同的主目录和虚拟子目录,每个WEB站点作为各自独立的网站分配给不同的公司或部门。
好处:多个公司或部门的网站就可以共用同一台计算机,而用户感觉每个公司和部门都有各自独立的网站。多个没有实力在Internet上架设自己专用服务器的中小公司可以联合租用一台WEB服务器,对外提供各自的WEB服务而互不影响。
/www/hehe/xixi/maomao /hehe /xixi
原理:
WEB服务器上的每个WEB站点必须设置有不同的标识信息
WEB浏览器发出的连接和请求信息中包含WEB站点的标识信息
WEB站点的标识信息:
IP地址、端口号、主机名
- 创建虚拟目录真实物理位置在 /usr/local/maomao,内容自定,但允许abc和xyz用户通过密码访问。
[root@localhost ~]# mkdir /usr/local/maomao
[root@localhost ~]# echo this is maomao > /usr/local/maomao/index.html
[root@localhost ~]# htpasswd -c /etc/httpd/usr abc
New password:
Re-type new password:
Adding password for user abc
[root@localhost ~]# htpasswd /etc/httpd/usr xyz
New password:
Re-type new password:
Adding password for user xyz
[root@localhost ~]#
1.8 动态网站搭建
安装包mod_wsgi //web server Gateway Interface// alt 属性是一个必需的属性,它规定在图像无法显示时的替代文本
Listen 8909
mkdir /var/www/alt
<Directory "/var/www/alt">
AllowOverride None
Require all granted
</Directory>
<VirtualHost 192.168.0.129:8909>
WSGIScriptAlias / /var/www/alt/webinfo.wsgi
</VirtualHost>
python脚本内容 vim /var/www/alt/webinfo.wsgi
def application(environ, start_response):
status = '200 OK'
output = 'Hello World'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
application 是一个接受接受两个参数environ, start_response的标准 wsgi app:
environ: 一个包含请求信息及环境信息的字典, server 端会详细说明
start_response: 一个接受两个参数`status, response_headers`的方法:
status: 返回状态码,如 http 200 、 404 等
response_headers: 返回信息头部列表