目录
web服务器简介
(1)什么是www
www是world wide web的缩写,也就是全球信息广播的意思。通常说的上网就是使用www来查询用户所需要的信息。www可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方式将信息以Internet传递到世界各处去。
与其他服务器类似,当你连接上www网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可以解析这些数据的软件来处理,那就是浏览器。www服务器与客户端浏览器之间的连接图。
1、 www所用的协议: 浏览器怎样向web服务器请求数据以及服务器怎样把文档传送给浏览器呢?这就是由http协议来定义的,(Hyper Text Transport Protocol,HTTP,超文本传输协议)。
2、www服务器需要提供可让客户端浏览的平台。目前最主流的Web服务器是Apache、Microsoft的Internet信息服务器(Internet Information Services,IIS)和unix nginx。
3、服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓的标记来规范所要显示的数据格式。
4、客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。那么著名的浏览器就有内建在Windows操作系统内的IE浏览器了,还有Firefox浏览器和Google的chrome浏览器。
(2)网址及HTTP简介
web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在 /var/www/html 。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。
URL:Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
网址格式:<协议>://<主机或主机名>[:port]/<目录资源,路径>
浏览器常支持的协议有:http、https、ftp等。
主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。
端口号(port):http为80,https为443 (IANA:互联网数字分配机构)
- 0-1023:众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限启用并让进程监听)
- 1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/TCP
- 41952-60000:客户端程序随机使用的端口,动态端口,或私有端口
http请求方法:在http通信中,每个http请求报文都包含一个方法,用以告诉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报文中有很多行内容,这些行的字段内容都是由一些ASCII码串组成,但各个字段的长度是不同的。http报文可分为两种,一种是从web客户端发往web服务器的http报文,称为请求报文。另外一种是从web服务器发往web客户端的报文,称为响应报文 。
http请求报文由请求行、请求头部、空行和请求报文主体几个部分组成
http响应报文由起始行、响应头部、空行和响应报文主体这几个部分组成
MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)最初是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。后来http也支持了这个功能,用它来描述数据并标记不同的数据内容类型。当web服务器响应http请求时,会为每一个http对象数据加一个MIME类型。当web浏览器获取到服务器返回的对象时,会去查看相关的MIME类型,并进行相应的处理。MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记,表示一种主要的对象类型和一个特定的子类型。常见的MIME类型:
(3)http协议请求的工作流程
- 终端客户在web浏览器地址栏输入访问地址http://www.ceshi.com:80/index.html
- web浏览器请求DNS服务器把域名www.ceshi.com解析成web服务器的IP地址
- web浏览器将端口号(默认是80)从访问地址(URL)中解析出来
- web浏览器通过解析后的ip地址及端口号与web服务器之间建立一条TCP连接
- 建立TCP连接后,web浏览器向web服务器发送一条HTTP请求报文
- web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。
- web服务器关闭HTTP连接,关闭TCP连接,web浏览器显示访问的网站内容到屏幕上。
web服务器的类型
(1)仅提供用户浏览的单向静态网页单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,所以你可以到该网站上去浏览,但是无法进行数据的上传。
(2)提供用户互动接口的动态网站这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过“网页程序语言”来实现与用户互动的行为。常见的例如:PHP网页程序语言,配合数据库系统来进行数据的读、写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库的内容,网页程序并没有任何改变。另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码(JavaScript)传送给客户端,客户端的浏览器如果提供JavaScript的功能,那么该程序就可以在客户端的计算机上面工作了;另外一种可在客户端执行的就是flash动画格式,在这种动画格式内还可以进行程序设计。搭建动态网站的需求:
LAMP(linux+Apache+MySQL+PHP)Apache主要提供www的服务器平台MySQL:传统的文件读取是很麻烦的,如果你只要读取该文件当中的一小部分,系统还是会将整个文件读出来,若又有人同时读取同一个文件时,那就会造成效率与系统上的问题,所以才会有数据库系统的推出。数据库其实是一种特殊格式的文件,这种文件要通过特殊接口(数据库软件)来进行读写。由于这个特殊接口已经针对数据的查询、写入做过优化设计,因此很适合多人同时写入与查询工作。PHP:PHP可以被用来建立动态网页,PHP程序代码可以直接在HTML网页当中嵌入,就像编辑HTML网页一样简单。PHP是一种“程序语言”,这种程序语言可以直接在网页当中编写,不需要经过编译即可执行。
# 服务主路径,程序运行只会先打开此配置文件(主配置文件),然后下面这个参数意思是从/etc/httpd下去查找相关的配置文件
主配置文件内的参数
ServerRoot "/etc/httpd"
监听端口
Listen 80
# 在以上serverRoot参数的前提下找到此httpd路径,系统会扫描以下包含的文件
Include conf.modules.d/*.conf
用户apache,使用httpd服务的时候会使用apache这个普通用户去管理此服务,root用户的任务太多了
User apache
Group apache
用户管理员
ServerAdmin root@localhost
# 服务主机名 域名/ip 访问
#ServerName www.example.com:80
目录标签
<Directory />
# 不允许被覆盖
AllowOverride none
# 请求所有拒绝,保护信息安全
Require all denied
</Directory>
# 文本主目录,网页文件的路径,此参数是全局变量,优先级比较低,如果有在.conf文件中设置虚拟机标签,会优先使用标签内定义的变量
DocumentRoot "/var/www/html"
# 虽然对根目录没有权限但是对/var/www下的目录有权限
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# 在以上已经使用了DocumentRoot 指定了网站的路径,以下就是指定的文件
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
默认查找网页的路径是/var/www/html/index.html 由于以上参数DocumentRoot 设置,如果文件存在查看文件内容,如果不存在查找的是/var/www/html/.noindex.html redhat 测试界面
缺点
此方法可以实现一个网页,但是想要实现一台主机上多个网页就必须要使用到虚拟主机vhosts ,他的一个示例文件在/usr/share/doc/httpd-core/httpd-vhosts.conf
虚拟主机vhosts
[root@Server ~]# find / -name '*vhosts*'
/usr/share/doc/httpd-core/httpd-vhosts.conf
示例的格式如下
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
#精确定位,优先级高于全局匹配的网站资源路径(类似于精确查询和模糊查询)
DocumentRoot "/var/www/dummy-host.example.com"
ServerName dummy-host.example.com
#服务器别名
ServerAlias www.dummy-host.example.com
ErrorLog "/var/log/httpd/dummy-host.example.com-error_log"
CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common
</VirtualHost>
实例
多IP实现多网页
[root@Server conf.d]# pwd
/etc/httpd/conf.d
[root@Server conf.d]# vim newvhosts.conf
[root@Server conf.d]# vim newvhosts.conf
<VirtualHost 192.168.221.137:80>
#精确定位
DocumentRoot /www/137
#服务器主机命名
ServerName 192.168.221.137
</VirtualHost>
<Directory /www>
AllowOverride none
Require all granted
</Directory>
#在ens160这张网卡上增加一个IP地址
[root@Server conf.d]# nmcli connection modify ens160 +ipv4.addresses 192.168.221.137/24 ipv4.gateway 192.168.221.2 ipv4.dns 114.114.114.114
#重新启动网卡
[root@Server conf.d]# nmcli device up ens160
成功用 "ens160899ea601-c004-3e76-93a3-dde18cef82f4" 激活了设备 ""。
#创建数据库目录
[root@Server /]# mkdir www
[root@Server /]# mkdir /www/{135,136,137}
[root@Server /]# cd www
[root@Server www]# ls
135 136 137
#假如带内容的html文件
[root@Server www]# echo 我是135 > 135/index.html
[root@Server www]# echo 我是136 > 136/index.html
[root@Server www]# echo 我是137 > 137/index.html
[root@Server www]# cd 135
[root@Server 135]# ls
index.html
[root@Server 135]# cat index.html
我是135
#关闭防火墙与selinux,重启服务
[root@Server 135]# setenforce 0
[root@Server 135]# systemctl stop firewalld
[root@Server 135]# systemctl restart httpd
linux上测试
[root@Server conf.d]# curl http://192.168.221.135
我是135
[root@Server conf.d]# curl http://192.168.221.136
我是136
[root@Server conf.d]# curl http://192.168.221.137
我是137
windows上测试
完整过程
修改监听端口号
[root@Server conf.d]# vim vhosts.conf
[root@Server conf.d]# systemctl restart httpd
Listen 8909
<VirtualHost 192.168.221.135:80>
DocumentRoot /www/135
ServerName 192.168.221.135
</VirtualHost>
<VirtualHost 192.168.221.136:8909> --修改端口号为8909
#精确定位
DocumentRoot /www/136
#服务器主机命名
ServerName 192.168.221.136
</VirtualHost>
<Directory /www>
AllowOverride none
Require all granted
</Directory>
使用netstat -tuanlp 查看端口号是否正确
hosts文件及域名解析
基于域名的网站,需要用到域名解析。 域名------->ip地址
浏览器如何通过域名去查询URL对应的IP(对应服务器地址):
1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
2、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中的hosts文件找。hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
windows下的hosts文件路径:C:\Windows\System32\drivers\etc\hosts
Linux下的hosts文件路径:/etc/hosts
3、路由缓存:路由器也有DNS缓存。
4、ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。
5、根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)
修改hosts文件内缓存格式
实现效果
实现多域名解析IP地址
在linux上解析:
需要在本地修改hosts文件使得本地存有缓存
将虚拟主机的名称修改
创建DocumentRoot数据库文件夹并在文件夹下添加一个有内容的index.html文件,使得局部变量生效,这里局部变量就相当于数据库的精确查询,全局变量就相当于模糊查询
实现效果:
实验流程视频:
在windows上解析:
windows下的hosts文件路径:C:\Windows\System32\drivers\etc\hosts
实现效果:
httpd错误信息及访问记录
错误信息
通过status来查看状态信息
[root@Server ~]# systemctl status httpd
访问记录
[root@Server ~]# tail -f /etc/httpd/logs/access_log
参数Alias的使用
[root@Server ~]# vim /etc/httpd/conf.d/newvhosts.conf
<VirtualHost 192.168.221.136:80>
#精确定位
DocumentRoot /www/hah
#服务器主机命名
ServerName www.hah.com
Alias /hah /pub/hah/hah.html ---当访问http://www.hah.com/hah 的时候会直接跳转到 /pub/hah/hah.html文件 等同于http://www.hah.com/pub/hah/hah.html
</VirtualHost>
#放通pub目录的访问权限
<Directory /pub>
AllowOverride none
Require all granted
</Directory>
#重新运行httpd程序
[root@Server ~]# systemctl restart httpd
#创建目录
[root@Server /]# mkdir pub
[root@Server /]# cd pub/
[root@Server pub]# mkdir hah
[root@Server pub]# echo 我是hah > hah/hah.html
[root@Server pub]# cat hah/hah.html
我是hah
测试结果
[root@Server pub]# curl http://www.hah.com/hah
我是hah
网页认证
htpasswd命令
apache服务器创建密码认证文件
补充说明
htpasswd命令 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。
语法
htpasswd(选项)(参数)
选项
-c:创建一个加密文件;
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
-m:默认采用MD5算法对密码进行加密;
-d:采用CRYPT算法对密码进行加密;
-p:不对密码进行进行加密,即明文密码;
-s:采用SHA算法对密码进行加密;
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
-D:删除指定的用户。
参数
用户:要创建或者更新密码的用户名;
密码:用户的新密码。
实例
利用htpasswd命令添加用户
htpasswd -bc .passwd www.jsdig.com php
在bin目录下生成一个.passwd文件,用户名www.jsdig.com,密码:php,默认采用MD5加密方式。
在原有密码文件中增加下一个用户
htpasswd -b .passwd Jack 123456
去掉-c选项,即可在第一个用户之后添加第二个用户,依此类推。
不更新密码文件,只显示加密后的用户名和密码
htpasswd -nb Jack 123456
不更新.passwd文件,只在屏幕上输出用户名和经过加密后的密码。
利用htpasswd命令删除用户名和密码
htpasswd -D .passwd Jack
利用htpasswd命令修改密码
htpasswd -D .passwd Jack
htpasswd -b .passwd Jack 123456
即先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能。
[root@Server conf.d]# htpasswd -c /etc/httpd/users shuyan
New password:
Re-type new password:
Adding password for user shuyan
[root@Server conf.d]# vim newvhosts.conf
<VirtualHost 192.168.221.136:80>
#精确定位
DocumentRoot /www/hah
#服务器主机命名
ServerName www.hah.com
Alias /hah /pub/hah/hah.html
</VirtualHost>
<Directory /pub>
AuthType Basic
AuthName "Login"
AuthUserFile /etc/httpd/users
Require user shuyan
</Directory>
[root@Server conf.d]# systemctl restart httpd
实现效果
第一次访问过后第次再访问就不需要用户名和密码了,这是因为浏览器的缓存需要清除掉浏览器缓存才能重新实现效果