一.HTTP的基础知识
1.HTTP:(超文本传输协议)。早期仅仅是实现了再不同文本(仅ASCII码)之间的跳转。随着后期的不断改进最终形成了如今的HTTPD
2. 说到HTTPD就必须说到Apache这个世界排名第一的Web服务器, 一个网页的浏览需要一个服务器端和一个客户端。服务器端可以用Apache,IIS,Nignx,thttpd(小巧的轻量级Web server)
3.客户端用什么来访问网页呢,是用浏览器来访问网站。经常见到的Web浏览器有Chrome,Firefox,IE,QQ浏览器。
4.服务器提供的最重要数据是超文本标记语言HTML(Hyper Text Markup Language),超媒体文件。
5.什么是静态网页或是动态网页呢,我之前一直以为网页有动画就叫动态网页,网页只有静态的文字就是静态网页。其实这是不对的。动态网页是服务器接受到访问请求,这时就需生成一个子进程将PHP,或者Java呀的什么的语言交给解释器运行一遍,再将运行结果返回给Web进程。所以凡是结合了HTML以外的高级语言和数据库技术进行的网页编程生成的网页都是动态网页。
6.httpd的状态码。我们经常访问网站时出现错误404.知道这是什么吗,其实这是状态码
1xx :通常是纯信息。很少见
2xx :(成功类) 如200,请求成功
3xx : (重定向 ) 如301,请求被永久重定向。302 请求被暂时重定向
4xx :(客户端错误) 如400请求参数错误。403 服务端也理解请求,但拒绝服务 。404 请求资源不存在
5xx :(服务器端错误)如502(Bad Gateway)作为网关或代理服务器藏是请求时。从上游服务器收到无效的响应
二.HTTPD的安装及配置文件
httpd 的配置文件主要在/etc/httpd这个文件下,主要要用到的在conf下(/etc/httpd/conf/httpd.conf)
1.配置文件的结构
分为三部分 分别是 全局环境的配置 ,主服务的配置,虚拟主机的配置
网页的首页及其目录相关的权限设置(DocumentRoot与Directory)
Doucument定义了www默认的首页是放在/var/www/html这个目录中。对可被浏览的目录进行权限的相关设置就是<Directory>在起作用。
2.开始主要的server端的配置吧
1.ServerAdmin (注意,在86行定义,可能随着更改有小许偏差,下面不再说明)
定义了服务器的管理员的邮箱地址
86 ServerAdmin root@localhost
2.ServerName
定义了服务器的主机名
95 #ServerName www.example.com:80
3.DocumentRoot
文档根目录,网页文件存放的位置。对网站来说,/就指向了/var/www/html. URL路径就是相对DocumentRoot而言的
119 DocumentRoot "/var/www/html"
如果想要修改默认发布目录
当selinux是disable状态
vim /etc/httpd/conf/httpd.conf 注释原文件131行在下面加入下面内容即可
<Directory "/westos"> ""中为自己要发布目录
Require all granted 允许所有人访问
</Directory>
重启服务systemctl restart httpd
当selinux是enforcing状态
配置文件修改内容与上述相同
然后重启服务 修改发布目录安全上下文并刷新:
semanage fcontext -a -t httpd_sys_content_t '/westos(/.*)?'
restorecon -RvvF /westos
如果想要加一些权限就可以加一个<Directory "/var/www/html">来限定这个路径该如何被访问
访问选项
如下144,151,156均为访问控制选项
默认的定义 Options 定义网页被访问的属性。每个属性被空格隔开。
Options 部分 :
Indexes 如果在此目录下找不到首页文件,就显示整个目录下的所有文件(最好关了,除非是下载站点)如下图
FollowSymLinks 若这个目录下有一个软连接。假如软连接连接的是/etc。就可以访问符号连接的文件(最好关了,不安全)
Includes 允许执行服务端包含的(Server-Side Include 程序)(最好关了)
SyminksifOwnerMatch 允许执行符号连接,但所属组必须是httpd (前面那个都最好关了,这个还开着干啥?)
ExecCGI 是否允许运行DGI脚本 (开着吧)
MultViews 可判断客户端来源,来显示不同的语言(不是国际化网站就别开着装逼了)
ALL 以上全开
None 以上全关
AllowOverride 部分:
允许的覆盖参数功能
让下面的参数不生效了,
ALL 全部的权限都可以被覆盖
AuthConfig 仅有网页认证可覆盖
Indexes 仅允许Indexes方面的覆盖
Limits 允许利用Allow,Deny与Order管理可浏览的权限
None 不可覆盖
举个例子吧(基于用户和组的访问控制)
让用户提供帐号密码才可以访问网站(在/etc/httpd/conf/httpd.conf中的这里作出以下配置)
<Directory "/var/www/html/admin">
AuthUserFile /etc/httpd/accessuser 用户认证文件
AuthName "Please input your name and password !!" 用户认证提示信息
AuthType basic 认证类型
Require valid-user 认证用户,认证文件中所有用户都可以通过
[Require user admin] 只允许认证文件中admin用户访问,二写一
</Directory>
组的认证在创建文件,文件内容
好了,创建一个用户和密码( -c 首次创建 -m 使用md5 加密)
重启服务
systemctl restart httpd
登陆网页(要求输入用户名和密码)
我要是不输入呢(就报告如下错误)
Order 部分: (能够定义基于主机的访问功能,IP,的控制访问的记住)
(tips:allow和deny谁在前,谁的优先级就高)
Order allow,deny
Allow from 172.25.254.217
Deny from 172.25.254.117
4.DirectoryIndex
默认不指定访问页面时,默认的页面名称
169 DirectoryIndex index.html
176 <Files ".ht*">
177 Require all denied
178 </Files>
.ht的文件不准被访问
6.TypesConfig 支持传输的二进制文件类型
271 TypesConfig /etc/mime.typ
288 AddType application/x-compress .Z
289 AddType application/x-gzip .gz .tgz
7.ErrorLog(服务错误日志的所在位置)
187 ErrorLog "logs/error_log"
194 LogLevel warn
8.LogFormat(日志的格式)
%h 是客户端地址 %l远端主机的登陆名称 %u认证的用户 %t 时间 %r请求报文的首行 %>s 状态码 %b响应报文的大小%{Referer}i网站访问时通过哪里来的 %{User-Agent}i 客户访问时使用的浏览器。。。 combined 是混合模式
201 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
202 LogFormat "%h %l %u %t \"%r\" %>s %b" common
222 CustomLog "logs/access_log" combined</span>
通过日志就可以看到你网站的访问量
PV: Page View 页面访问量
UV: User View 每天独立IP的访问量
三.虚拟主机
什么时虚拟主机呢?举个例子。你搭建的网站每天只有1,2个人访问。但时你搭建网站时需要服务于不同的站点,那你还那一堆子主机来搭建一个网络集群码??没必要吧,投入太大了,所以就提出了虚拟主机的概念。
但是对与一个主机而言。IP是很稀有的资源。端口在TCP上就只有一个。那怎么来设置虚拟主机呢。这就需要基于域名来设置虚拟主机。就是每个站点的主机名不一样。
HTTP的首部表明了Host,哪怕IP和端口都一样也可以访问不同的Host.
配置
建立子网页发布目录创建发布文件
vim /etc/httpd/conf.d/default.conf 未指定域名的访问都访问default
<Virtualhost _default_:80> 虚拟主机开启的端口
DocumentRoot "/var/www/html" 虚拟主机的默认发布目录
CustomLog "logs/default.log" combined 虚拟主机日志
</Virtualhost>
vim /etc/httpd/conf.d/news.conf 指定域名news.westos.com的访问到指定默认发布目录中
vim /etc/httpd/conf.d/haha.conf 指定域名haha.westos.com的访问到指定默认发布目录中
重新启动服务
测试
在测试机中写入本地解析
上图看出达到了我们想要的实验结果!!!
四.HTTPS
1.https的概念
首先https是安全httpd,使用SSL(安全套接字层)加密。也就是在应用层和传输层之间加一层安全加密。这样就可以安全的通信了。普通的HTTP是明文传输的,这极不安全,因为像淘宝这种网页输入密码如果别人抓包了就完蛋了(其实安全套接层也不安全,黑客攻击并发现安全套接层的漏洞,心脏出血就是有名的案例)
HTTPS他不再监听在80端口了,而是监听在443端口。
https建立流程
1.客户端先发起SYN的TCP连接请求。3次握手
2.完了之后,客户端与服务器端协商加密算法。协商成功后。服务器端发送自己的证书给客户端
3.客户端验证完成后,就生成一个对成密钥,并发送给服务器端。客户端这时发送访问的页面请求
4.服务器端通过公钥加秘并返回给客户端
所以说必须要一个第三方机构给服务器端颁发证书,而客户端也需要信任这个第三方机构。(实际生活中,找第三方机构申请证书是需要钱的)
2.安装httpd 的安全模块
3.获取一个密钥匙生成证书
genkey www.westos.com
指定生成密钥长度(建议长度1024否则待会会后悔的,哈哈)
下面就开始生成密钥了这时卡住不动就需要我们手动乱敲键盘了,刚刚设置长度越长敲的越久
下面这个我们是实验就选NO 不发送了
这个直接next
最后填写信息
这样我们就生成密钥和证书了
下面我们就需要将生成的密钥和证书写入主配置文件
注释掉原有路径,在101,109分别写入证书和密钥路径(路径在生成后有显示,自己查看)
设置域名设置步骤与虚拟机中设置步骤一样
mkdir /var/www/westos/login.westos.com -p
vim /var/www/westos/login.westos.com/index.html
vim /etc/httpd/conf.d/login.conf
<Virtualhost *:443>
ServerName "login.westos.com"
DocumentRoot "/var/www/virtual/login.westos.com/html"
CustomLog "logs/login.log" combined
SSLEngine on 开始https功能
SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt 证书
SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key 密钥
</Virtualhost>
<Directory "/var/www/virtual/login.westos.com/html">
Require all granted
</Directory>
<Virtualhost *:80> 网页重写实现自动访问https
ServerName login.westos.com
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
</Virtualhost>
^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
^(/.*)$ 客户主机在地址栏中写入的所有字符,不包含换行符
https:// 定向成为的访问协议
%{HTTP_HOST} 客户请求主机
$1 $1的值就表示^(/.*)$的值
[redirect=301] 临时重定向 302永久重定向
重启服务
以上过程我们就完成了对服务器的配置,下面就该配置客户端了。
客户端配置
在配置之前我们先修改本地解析文件测试(修改方法参照虚拟机中修改方法,只需加入login.westo.com)
注意地址栏我们输入的和按完回车后的
可以发现他会自动跳转到https://
说明我们服务器配置没问题只需配置客户端了,点击我已充分了解可能的风险
添加例外
查看我们的证书,没错就时我们刚刚生成的
点击确认安全例外这样就OK了
五.服务器代理
首先安装代理软件
正向代理
当你的主机IP与你想要访问的服务器处在不同的IP段时你就无法访问该服务器这时候我们又向访问这时该怎么办?
这就需要一台机器处在你和服务器直接作为连接客户机与服务器的桥梁叫做代理这台机器有两块网卡一块网卡IP与服务器处在同一IP段另一块网卡与服务器处同一IP段
下面我们就来演示一下,首先配置客户端 两块网卡及两个不同IP段的Ip(必须的)
上面我们已经安装好了代理软件现在该修改配置文件了
只需要将56行修改一下62取消注释就OK了
下面就该配置客户段了
首先设置ip
然后我们试着访问服务器
发现访问不到,这就对了因为不在一个ip段,现在我们只要修改浏览器设置就OK了
点击Preferences进入下面界面再点击Settings
按照上图设置好之后点击OK
然后发现真的OK了!
反向代理
虽然企业中的服务器都很强大,但是也有超载时侯,为了解决这个问题也需要一个代理服务器来代理了
举个简单的例子,我们在西安,要访问腾讯的服务器,我们都知道腾讯总服务器在深圳,然后我们直接去访问深圳的服务器吗?如果全国各地都去访问深圳总服务器那么总服务器肯定会负载,而且我们从西安访问深圳服务器途中要经过很多端口大大降低效率。腾讯也会想到这点问题的因此他会在全国各大城市建立代理的缓存服务器,这些服务器本身没有任何数据存储,当客户端去访问他时他直接去深圳总服务器去取你想要的数据这样我在西安访问西安的服务器就可以了,这样大大降低总服务器负载。
下面我们就通过简单实验来演示一下
首先还是配置服务器的squid配置文件
修改58,59行
测试
我们可以发现我们访问172.25.254.31和访问172.25.17.217看到同样内容这时172.25.17.217就是172.25.254.31的一个代理服务器!
,