实验环境
搭建yum源;安装httpd

apache简单介绍
apache是世界上使用排名第一的web服务器软件。它快速、可靠并且可通过简单的API扩展,将perl、python等解释器编译到服务器中。
apache的特点是简单、速度快、性能稳定,并且可作代理服务器来使用。
apache web服务器软件拥有以下特性:
支持最新的http/1.1通信协议;
拥有简单而强有力的基于文件的配置过程;
支持通用网关接口;
支持基于ip和基于域名的虚拟主机;
集成perl处理模块;
集成代理服务器模块;
支持实时监视服务器状态和定制服务器日志;
支持服务器端包含指令(SSI);
支持安全Socket层(SSI);
提供用户会话过程的跟踪;
支持FastCGI;
提供第三方模块可以支持JavaServlets。
互联网主流web架构的刨析及apache服务的安装与启用
查看互联网主流web服务器
curl -I www.taobao.com ##查看淘宝的服务器
curl -I www.baidu.com ##查看百度的服务器
apache企业中常用于为web服务,用来提供http://(超文本传输协议)
apache的安装
yum install httpd.x86_64 -y ##安装apache服务
systemctl start httpd
systemctl enable httpd
firewall-cmd --list-all ##列出火墙信息,默认情况下apache服务是不被允许的
firewall-cmd --permanent --add-service=http ##永久允许http
firewall-cmd --reload ##火墙重新加载策略
firewall-cmd --list-all ##列出火墙信息,查看apache服务是否被允许
测试:
apache的基本配置信息及部署优化方案
apache基本信息
rpm -ql httpd ##查看apache基本配置信息
rpm -qc httpd ##查看apache配置文件
netstat -antlupe | grep httpd ##查看apache端口
/var/www/html | apache的/目录,默认发布目录 |
/var/www/html/index.html | apache的默认发布文件 |
/etc/httpd/conf | 主配置目录 |
/etc/httpd/conf/httpd.conf | 主配置文件 |
/etc/httpd/conf.d/ | 子配置目录 |
/etc/httpd/conf.d/*.conf | 子配置文件 |
80 | #默认端口 |
httpd_sys_content_t | 默认安全上下文 |
/etc/httpd/conf/httpd.conf主配置文件内容:
ServerRoot “/etc/httpd” | 配置目录,相当于apache的根 |
Listen 80 | 端口 |
Include conf.modules.d/*.conf | 动态模块插件加载文件 |
User apache | 用户 |
Group apache | 用户组 |
ServerAdmin [email protected] | 管理员邮箱 |
DocumentRoot “/var/www/html” | 默认发布目录 |
DirectoryIndex index.html | 默认发布文件 |
修改apache默认端口
修改端口为8080
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd.service
netstat -antlupe | grep httpd
firewall-cmd --permanent --add-port=8080/tcp ##火墙只允许80端口访问,所以需要修改火墙允许的端口
firewall-cmd --reload
测试:ip:8080
—————————
修改端口为6666,http系统中没有此端口。
修改配置文件的端口信息:
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd.service
发现不能重启http服务,这是因为允许http端口中没有6666端口。
给http服务添加6666端口,发现http服务可以重启;允许6666端口火墙开启。
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 6666
systemctl restart httpd
firewall-cmd --permanent --add-port=6666/tcp
firewall-cmd --reload
测试:ip:6666
修改apache默认发布目录
首先重新建立一个于apache服务默认发布目录建立一个不同的目录,并且修改新建目录的安全上下文,更改主配置文件的默认发布目录,并给这个目录授权,测试从文件内容的不同可以看出发布目录改变了。
1.在默认发布目录里建立文件index.html:
cd /var/www/html/
vim index.html
2.新建一个目录改为apache发布目录,并建立index.html文件:
mkdir -p /westos/html/
cd /westos/html/
vim index.html
从下图可以看出查看的是默认发布目录里的默认发布文件:
3.修改新建目录的安全上下文为apache默认安全上下文:
semanage fcontext -a -t httpd_sys_content_t '/westos(/.*)?'
restorecon -RvvF /westos/
ls -Zd /westos/
4.修改主配置文件中的相关信息:
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
测试:查看到的是新建目录
修改默认发布文件
首先在默认发布目录里新建一个.html文件,其次修改配置文件添加新建的文件,测试可以看出默认发布文件更改了。
默认发表文件就是访问apache时没有指定文件名称时默认访问的文件,这个文件可以指定多个,有访问顺序。
1.在默认发布目录里新建一个.html文件:
cd /var/www/html
vim westos.html
在更改主配置文件前测试:
2.更改主配置文件相关信息:
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
测试:
apache的虚拟主机
用一个apache主机发布多个站点
1.编写站点信息
cd /etc/httpd/conf.d
vim vhost.conf ##名字任意
systemctl restart httpd
> <VirtualHost _default_:80> ##第一个虚拟主机选择默认的80
> DocumentRoot /var/www/html ##访问目录,/var/www做过授权
> CustomLog logs/default.log combined ##日志类型,混合型(所有日志都放在default中)
> </VirtualHost>
2.建立站点信息文件
mkdir -p /var/www/virtual/westos.org/{music,news}
touch /var/www/virtual/westos.org/{music,news}/index.html
vim /var/www/virtual/westos.org/music/index.html
vim /var/www/virtual/westos.org/news/index.html
3.测试:
apache基于ip的安全优化控制
访问主目录时允许谁访问不允许谁访问
cd /etc/httpd/conf.d
vim vhost.conf ##名字任意
systemctl restart httpd
先允许再拒绝,先允许所有ip可以访问,再拒绝172.25.254.64这个ip,把允许所有ip访问这个信息覆盖掉,所以172.25.254.64这台主机访问不到。
<Directory "/var/www/html">
Order allow,deny ##先允许后拒绝
Allow from all ##允许所有人访问
Deny from 172.25.254.64 ##拒绝172.25.254.64这个ip
</Directory>
测试:
先拒绝再允许,先拒绝172.25.254.64这个ip,再允许所有ip访问,就把拒绝172.25.254.64这个ip的信息覆盖掉,所以172.25.254.64这台主机可以访问到。
测试:
apache基于认证的访问控制
1.建立用户
cd /etc/httpd
htpasswd -cm .htpassfile admin ##建立用户
htpasswd -m .htpassfile yee ##令建用户,不能加-c,加了-c会覆盖前面建立的用户的密码
cat .htpassfile##查看用户密码,密码被隐藏
2.编辑信息:
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
<Directory "/var/www/html">
AuthUserFile /etc/httpd/.htpassfile
Authtype basic
AuthName "Please input username and password"
Require user admin ##只允许admin用户登陆
#Require valid-user ##允许所有用户登录
</Directory>
当只允许admin用户登陆时:
现象:只有admin用户可以登陆,其他用户均不可登陆。每次登陆完需要删除历史记录,否则看不到效果。
当允许所有用户登陆时:
现象:admin用户和yee用户都可以登陆上,但是在切换用户登陆时需要删除历史记录,否则看不到效果。
apache对Php、Perl、Python如何执行
apache支持的语言:Php、Perl、Python
虽然apache支持这些语言,但是需要安装创建动态网站的语言脚本软件。
Php
安装php脚本语言:
yum install php.x86_64 -y
systemctl restart httpd
创建语言脚本:
cd /var/www/html/
vim index.php
systemctl restart httpd
测试:
Perl
安装apache的配置手册:
yum install httpd-manual -y
systemctl restart httpd
cgi:通用网关接口,用perl语言给apache写一个程序,但是apache看不懂,这时候需要cgi把perl这个程序翻译好,然后apache就能看懂cgi翻译过后的脚本。
查看cgi的默认安全上下文:
ls -Zd /var/www/cgi-bin/
建立cgi目录,修改目录的安全上下文:
(自己建立一个目录cgi,但是他的安全上下文不符合默认的安全上下文,需要更改成标准的安全上下文)
mkdir /var/www/html/cgi/
ls -Zd /var/www/html/cgi/
semanage fcontext -a -t httpd_sys_script_exec_t "/var/www/html/cgi(/.*)?"
restorecon -FvvR /var/www/html/cgi/
建立cgi脚本:
cd /var/www/html/cgi/
vim index.cgi
chmod +x index.cgi
systemctl restart httpd
#!/usr/bin/perl
print "Content-type: text/html\n\n"; ##把contend-type输出成text/html纯文本
print `date`; ##显示时间
通过cgi通用网管接口翻译成纯文本,再提交给apache执行结果.
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
<Directory "/var/www/html/cgi">
Options +ExecCGI ##执行cgi
AddHandler cgi-script .cgi ##cgi的标识
</Directory>
测试:
Python
安装Python语言脚本:
yum install mod_wsgi.x86_64 -y
建立Python脚本:
cd /var/www/html/
vim script.wsgi
chmod +x script.wsgi
#!/usr/bin/env python
import time
def application (environ, start_response):
response_body = 'UNIX EPOCH time is now: %s\n' % time.time()
status = '200 OK'
response_headers = [('Content-Type', 'text/plain'),
('Content-Length', '1'),
('Content-Length', str(len(response_body)))]
start_response(status, response_headers)
return [response_body]
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
WSGIScriptAlias /WSGI /var/www/html/script.wsgi
测试:
https的证书设定
访问网站时需要和用户实现数据交互,但是当你在http网站上提供了你的信息,上传给服务器的过程中,被第三方截获,这样你的信息就会暴露,是不安全的;但是当你在https网站上提供你的信息时,在上传到服务器的过程中,被第三方截获了,但是第三方截获的这个数据是被加密的,不能看到,这大大提升了用户信息数据的安全性,给用户一个很大的安全保障。
http与https的区别:
http | https |
---|---|
超文本传输协议 | 具有安全性的ssl加密传输协议 |
信息是明文传输 | 是针对数据进行加密的,需要申请ca证书 |
是无状态的协议,无状态是指对事务处理没有记忆能力,缺少状态意味着对后续处理需要的信息没办法提供,只能重新传输这些信息,这样就会增大数据量。另一方面,当不需要信息的时候服务器应答较为快。 | 是由ssl+http构建的可进行加密传输、身份认证的网络协议 |
默认的是80端口 | https默认端口是443端口 |
基于应用层 | 基于传输层 |
安装插件,让系统支持https:
yum install mod_ssl.x86_64 -y
systemctl restart httpd
这时在/etc/httpd/conf.d/目录下有ssl.conf文件
开启443端口的火墙:
netstat -antlupe | grep httpd
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
上图查看了自己网站的界面和百度网站的界面,百度由自己的加密的锁,自己建立的网站是用的默认的锁,网站必须要有自己的专用锁,不能用默认的。所以需要安装生成锁和钥匙的软件。
yum install crypto-utils.x86_64 -y
genkey www.mia.org##要加密网站的名称
需要把加密的目录放在指定的位置?
加密生成的位数:1024
生成随机位
需要敲键盘动鼠标,是因为生成了加密字符串,生成的字符串在/dev/random目录下。
需要申请ca认证?
编辑网站信息:
把钥匙和锁指定给apache文件,指定证书:
vim /etc/httpd/conf.d/ssl.conf
systemctl restart httpd
SSLCertificateFile /etc/pki/tls/certs/www.mia.org.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.mia.org.key
下载认证书:
点击Add Exception
点击Confirm Security Exception下载证书:
测试:
可以查看到我们自己建立的网站已经加密了。
查看网站认证书:
利用网页重写规则优化https的访问
输入百度域名或ip地址会自动跳到https上,所以我们自己建立的网站也需要有这样的设定。
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
<VirtualHost *:443>
ServerName login.mia.org
DocumentRoot /var/www/virtual/westos.org/login
CustomLog logs/login.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.mia.org.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.mia.org.key
</VirtualHost>
建立站点信息目录文件:
mkdir /var/www/virtual/westos.org/login
vim /var/www/virtual/westos.org/login/index.html
在哪台主机浏览就在哪台主机做解析:
vim /etc/hosts
测试:可以看出没有看到建立的目录文件,进入的是80端口。
做网页重写规则:
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
<VirtualHost *:80>
ServerName login.mia.org
DocumentRoot /var/www/virtual/westos.org/login
CustomLog logs/login.log combined
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1
</VirtualHost>
^(/.*)¥ | 客户在浏览器地址栏中输入的所有字符 |
https:// | 强制客户加密访问 |
%{HTTP_HOST} | 客户请求主机 |
$1 | 标示^(/.*)$的值 |
[redirect=301] | 永久重写,302临时 |
测试:可以看出进入了443端口。
cdn加速机制的刨析及翻墙原理和squid的正向代理的部署
CDN介绍
概念 | CDN(Content Delivery Network)是指内容分发网络,也称为内容传输网络。(网络加速器) |
目的 | 为加快网络访问速度而被优化的网络覆盖层 |
构成 | 内容缓存设备、内容交换机、内容路由器、CDN内容管理系统 |
功能 | 节省骨干网带宽,减少带宽需求量;提供服务器端加速,解决由于用户访问量大造成的服务器过载问题;服务商能使用Web Cache技术在本地缓存用户访问过的Web页面和对象,实现相同对象的访问无需占用主干的出口带宽,并提高用户访问因特网页面的相应时间的需求;能克服网站分布不均的问题,并且能降低网站自身建设和维护成本;降低通信风暴的影响,提高网络访问的稳定性。 |
基本原理 | 广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,有缓存服务器直接相应用户请求。 |
翻墙原理:当一个网站看不了,但是有一个主机可以看到,缓存的内容,所以我们绕过火墙可以通过查看这个主机缓存的内容来查看网站。
正向代理
给代理主机设置网关,确保代理主机能够上网。
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/resolv.conf
systemctl restart network
下载软件,编辑配置文件。
yum install squid -y ##安装软件
vim /etc/squid/squid.conf
systemctl restart squid
http_access allow all ##允许所有人
cache_dir ufs /var/spool/squid 100 16 256 ##开启缓存目录,默认缓存100M,在这个目录里默认建立16个一级目录,每一个一级目录建立256个二级目录
开启3128端口的火墙:
firewall-cmd --permanent --add-port=3128/tcp
firewall-cmd --reload
设置客户主机的浏览器
设置好后,客户主机就可以浏览百度了,但是客户主机浏览的是代理主机缓存的百度网页,而不是真正的百度网页。
可以看到客户主机可以上网了,但是它依然ping不同百度:
在客户主机浏览器里翻墙,通过3128端口查看的是代理的缓存网页,squid起的就是这样的作用。
正向代理的作用就是翻墙的作用。
VPN的作用就是使不能查看网页的主机与代理主机产生一个直连通道。
squid反向加速代理
反向代理就是服务商在各个省份放置服务器,使各个省份的用户在访问时访问速度进行加速。
服务商的服务器:
安装apache:
yum install httpd -y
systemctl restart httpd
systemctl enable httpd
关闭火墙:
systemctl stop firewalld
编辑apache默认发布文件:
cd /var/www/html
vim index.html
查看服务商站点是否搭建好:
服务商在各个省份建立的服务器,当用户访问这个服务器时,访问的还是服务商总公司的服务器站点,只是为了加速访问速度,在各个省份的服务器中缓存了总公司的服务器站点数据。squid的作用就是缓存数据,供用户方便使用。
下载squid软件:
yum install squid -y
编辑squid配置文件:
vim /etc/squid/squid.conf
systemctl restart squid.service
http_access allow all
http_port 80 vhost vport
cache_peer 172.25.254.152 parent 80 0 proxy-only
cache_dir ufs /var/spool/squid 100 16 256
http_port 80 vhost vport | 客户在访问web界面时访问的是80端口,因为服务商总公司开启的是apache默认端口80端口,支持虚拟主机和虚拟端口 |
cache_peer 172.25.254.152 | 去哪里取资源的主机的ip |
parent | 资源父级 |
80 | 取哪个接口的资源 |
如果服务器崩了之后通知哪个接口来接手服务的工作(用于备份) | |
proxy-only | 主机只是做一个代理主机 |
查看squid端口是否开启:
netstat -antulpe | grep squid
关闭火墙:
systemctl stop firewalld.service
在浏览器访问各个省份服务器的ip,可以看到查看的是服务商总公司的信息内容:
squid集群调度
调用器:网站之间的轮巡制度。
当所有用户访问同一个站点时,由于访问量过大,所以需要多台主机对这个站点做一个支撑,这些主机之间进行轮巡机制。
下面的实验是两台主机为一个站点进行支撑,这两台主机之间进行轮巡。
分别编辑支撑站点的两台主机的apache默认发布文件:
cd /var/www/html
vim index.html
编辑站点主机的squid配置文件,让访问一台主机3次,访问另一台主机一次。
vim /etc/squid/squid.conf
systemctl restart squid
cache_peer 172.25.254.200 parent 80 0 proxy-only round-robin originserver name=web1 weight=3
cache_peer 172.25.254.64 parent 80 0 proxy-only round-robin originserver name=web2
cache_peer_domain www.westos.org web1 web2 ##访问www.westos.org时,web1与web2轮流访问
round-robin | 轮巡 |
originserver | web服务器 |
weight=3 | 权重 |
在哪台主机浏览访问就在哪台主机做解析。/etc/hosts
访问服务器时可以看到,从172.25.254.200这台主机访问过3次,从172.25.254.64这台主机访问次数是1次。