Apache服务搭建实验
本文重点在于后面的Apache服务的完整搭建步骤,前面会简单介绍Apache服务的基本概念与配置文件介绍,如有偏差处,欢迎大家指正,谢谢。
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
协议:超文本传输协议 - HTTP 协议
核心:超文本标记语言 - HTML 语言
URL:统一资源定位符 - http:// 或 https://
perfork 模式
一个管理进程 ,多个工作进程 ,一个工作进程管理一个线程 ,每个线程维持一个连接。
worker 模式
一个管理进程 ,多个工作进程,一个工作进程管理多个线程,每个线程维持一个连接。
event 模式
event是Apache最新的工作模式,和worker模式很像,不同的是在于它解决了keep-alive长连接时候占用线程资源被浪费的问题。
源码包安装
/usr/local/apache2/etc/httpd.confRPM 包安装
/etc/httpd/conf/httpd.conf源码包安装
/usr/local/apache2/htdocsRPM 包安装
/var/www/html详细解析见:apache常见请求码
实验目的:掌握apache服务的基本搭建以及常规设置。
实验准备:C6标准虚拟机三台。(selinux与防火墙已关闭)
实验规划:192.168.10.10(apache服务端)
192.168.10.11(访问测试机1)
192.168.10.12(访问测试机2)
实验环境:标准LAMP环境,详细搭建见LAMP环境搭建-Centos6。
导入虚拟机,开始解压。
tar -zxvf apr-util-1.4.1.tar.gz tar -zxvf apr-1.4.6.tar.gz tar -zxvf httpd-2.4.7.tar.gz将依赖放入apache解压目录中
cp -a apr-1.4.6 httpd-2.4.7/srclib/apr cp -a apr-util-1.4.1 httpd-2.4.7/srclib/apr-util备份配置文件
cd /usr/local/apache/conf/ cp -a httpd.conf httpd.conf.bak检测是否开启
netstat -anpt | grep :80浏览器查看
http://192.168.10.10/apache基础服务启动成功。
此步骤完成后,建议准备一个快照。
本试验保护配置文件Directory默认声明的区域,若是想保护其他页面,只需再添加一个Directory声明区域和创建相应文件即可。
创建分布式配置文件
cd /usr/local/apache/htdocs vim .htaccess添加以下内容
authname "welcome to apahce" authtype basic authuserfile /usr/local/apache/htdocs/a.psd require valid-user保存退出,添加chen姓用户。(第一个用户使用-c)
/usr/local/apache/bin/htpasswd -c /usr/local/apache/htdocs/a.psd chen添加shen姓用户 (更多用户使用-m)
/usr/local/apache/bin/htpasswd -m /usr/local/apache/htdocs/a.psd shen查看是否添加成功
cat /usr/local/apache/htdocs/a.psd修改Apache配置文件中Directory声明的区域。
vim /usr/local/apache/conf/httpd.confAllowOverride从字面上解释是允许覆盖的意思,即Apache允许另一配置文件覆盖现有配置文件。
ps:若是想保护其他页面,只需再添加一个Directory声明区域即可。
重启apache服务
/usr/local/apache/bin/apachectl stop /usr/local/apache/bin/apachectl start或将两条命令写入自定义命令中
vim /usr/local/bin/自定义写入以下内容
#!/bin/bash /usr/local/apache/bin/apachectl stop && sleep 2s && /usr/local/apache/bin/apachectl start保存退出,赋予权限。
chmod a+x /usr/local/bin/abaq使用自定义命令重启
abaq浏览器连接测试:
http://192.168.10.10/实验成功,需要输入正确的用户密码才可以登陆。
本试验保护配置文件Directory声明的默认区域,若是想保护其他页面,只需再添加一个Directory声明区域和创建相应文件即可。
还原配置文件
cp -a /usr/local/apache/conf/httpd.conf.bak /usr/local/apache/conf/httpd.conf注释Directory区域中的require声明,添加以下信息。
<requireall> require all granted require ip 192.168.10.11(访问机1 ip) </requireall>重启服务,启动访问机2访问。
curl 192.168.10.10显示403错误,被权限拒绝。
使用访问机1访问测试
访问成功。
添加下列信息
<requireAll> require all granted require not ip 192.168.10.11(访问机1地址) </requireAll>重启服务,使用访问机2连接。
curl 192.168.10.10访问成功
访问机1访问测试。
curl 192.168.10.10显示403错误,被权限拒绝。
Web网站别名配置是被经常使用的一个特性。这个功能实际上是为站点URI定义一个路径映射关系,其配置和使用也较为简单。
还原配置文件,创建测试文件。
mkdir /usr/local/apache/htdocs/a/b/c/d/e/f/g -p echo "daqiang" > /usr/local/apache/htdocs/a/b/c/d/e/f/g/index.html配置别名选项
vim /usr/local/apache/conf/httpd.conf在"Ifmodile alias_module"模块添加以下信息
alias "/daqiang" "/usr/local/apache/htdocs/a/b/c/d/e/f/g"保存退出,重启服务。
浏览器访问测试
http://192.168.10.10/ http://192.168.10.10/daqiang/别名设置成功。
虚拟主机,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。
虚拟主机的分类:
基于IP的虚拟主机:一台服务器,多个ip,搭建多个网站基于端口的虚拟主机:一台服务器,一个ip,搭建多个网站,每个网络使用不同端口访问基于域名的虚拟主机:一台服务器,一个ip,搭建多个网站,每个网站使用不同域名访问三种搭建方式篇幅较长,详细搭建见Apache虚拟主机搭建
当我们变更网站域名,或者申请多个域名指向一个网站的时候,这个时候我们就会用到域名跳转(或者叫域名重定向redirect、域名转向)。
还原配置文件
cp -a /usr/local/apache/conf/httpd.conf.bak /usr/local/apache/conf/httpd.conf搜索关键字vhost,取消以下注释。
141行
464行
搜索关键字rew,取消以下注释。
148行
保存退出。
删除原有配置,添加以下信息。
<VirtualHost *:80> DocumentRoot "/usr/local/apache/htdocs/daqiang" ServerName www.daqiang.com </VirtualHost> <Directory "/usr/local/apache/htdocs//daqiang"> options indexes followsymlinks allowoverride All require all granted </Directory> <VirtualHost *:80> DocumentRoot "/usr/local/apache/htdocs//dadami" ServerName www.dadami.com </VirtualHost> <Directory "/usr/local/apache/htdocs/dadami"> options indexes followsymlinks allowoverride All require all granted </Directory>添加以下规则
rewriteengine on #开启rewrite功能 rewritecond %{HTTP_HOST} ^www.dadami.com #将www.daqiang.com开头的内容赋值给HTTP_HOST变量 rewriterule ^(.*) http://www.daqiang.com/$1 [R=permanent,L] # ^(.*)$ 指代客户端要访问的资源 # $1 把 .* 所指代的内容赋值到$1变量中 # R=permanent 永久重定向 = 301 # L 指定该规则为最后一条生效的规则,以后的不再生效ps:状态码:301是永久跳转,302是临时跳转,网站上一定要设置为301,这样对搜索引擎是比较友好的。
重启服务,准备测试。
修改Windows的hosts文件:C:\Windows\System32\drivers\etc\hosts
添加以下信息
192.168.10.10 www.daqiang.com 192.168.10.10 www.dadami.com浏览器连接测试
HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,用于安全的HTTP数据传输。
使用TCP端口为:80
本实验篇幅较长,已经成立成单独一篇文档,详细见Apache加openssl实现https
我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大,如何避免产生大的日志文件?其实apache有相关的配置,使日志按照我们的需求进行归档,比如每天一个新日志,或者每小时一个新的日志。
本实验配置文件信息较长,已经成立成单独一篇文档,详细见Apache日志管理。
如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的,比如网站的一些图片,还有js、css等静态对象。
本试验已整合至Apache日志管理中。
所说的静态文件指的是图片、js、css等文件,用户访问一个站点,其实大多数元素都是图片、js、css等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总有一些时效性,那么就得设置这个过期时间。
配置静态缓存有两种方法:
ps:还原配置文件再进行实验!!
该模块默认不开启,搜索关键字"expires"取消注释开启该功能。
在文件末尾添加
<IfModule mod_expires.c> ExpiresActive on ExpiresByType image/gif "access plus 1 days" ExpiresByType image/jpeg "access plus 24 hours" ExpiresByType image/png "access plus 24 hours" ExpiresByType text/css "now plus 2 hours" ExpiresByType application/x-javascript "now plus 2 hours" ExpiresByType application/javascript "now plus 2 hours" ExpiresByType application/x-shockwave-flash "now plus 2 hours" ExpiresDefault "now plus 0 min" </IfModule>保存退出,测试配置文件是否可用。
/usr/local/apache/bin/apachectl -t该错误是未设置域名引起,为了进行下一步测试,将域名设置为www.daqiang.com
/usr/local/apache/bin/apachectl stop /usr/local/apache/bin/apachectl start测试通过,重启服务,开始测试。
创建测试目录,创建测试文件。
cd /usr/local/apache/htdocs mkdir image touch a.jpg touch a.css输入以下命令访问
curl -x127.0.0.1:80 'http://www.daqiang.com/image/a.jpg' -I限制生效,.jpg文件缓存失效时间为86400秒,即24小时。
再次输入命令
curl -x127.0.0.1:80 'http://www.daqiang.com/image/a.css' -I限制生效,.css文件缓存失效时间为7200秒,即2个小时。
将httpd.conf文件还原,开始设置限制内容。
该模块默认开启。
在文件末尾添加
<IfModule mod_headers.c> # htm,html,txt 类的文件缓存一个小时 <filesmatch "\.(html|htm|txt)$"> header set cache-control "max-age=3600" </filesmatch> # css, js, swf 类的文件缓存一个星期 <filesmatch "\.(css|js|swf)$"> header set cache-control "max-age=604800" </filesmatch> # jpg,gif,jpeg,png,ico,flv,pdf 等文件缓存一年 <filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$"> header set cache-control "max-age=29030400" </filesmatch> </IfModule>ps:这里的时间单位可以 days、 hours 甚至是 min,两种不同的方法,上面使用的是mod_expires,而下面用的是 mod_headers。
设置www.daqiang.com为服务器域名,保存退出。
测试配置文件
/usr/local/apache/bin/apachectl -t重启服务,开始测试。
curl -x127.0.0.1:80 'http://www.daqiang.com/image/a.jpg' -I限制生效,.jpg文件缓存失效时间为1年。
curl -x127.0.0.1:80 'http://www.daqiang.com/image/a.css' -I限制生效,.css文件缓存失效时间为1个月。
某个目录下禁止解析 php,这个很有用,我们做网站安全的时候,这个用的很多, 比如某些目录可以上传文件(例如,图片,视频,文档等静态文件), 黑客可以通过上传带有木马的文件,然后执行这个文件来攻破我们的服务器,我们可以将该目录设置禁止PHP解析。这样就算上传的文件含有可执行木马,也不能执行。
该实验需要标准LAMP环境,搭建方式见LAMP环境搭建-Centos6。
测试目标:www.dadami.com下test目录中的文件。
浏览器访问Apache,检查是否解析PHP。
在/usr/local/apache/htdocs/下创建test目录测试
mkdir test cd test touch test.php创建test.php,在test.php内填写以下信息。
vim test.php <?php phpinfo(); ?>创建一个普通html文件
touch index.html echo "123" > index.html浏览器开启无痕模式访问
http://192.168.10.10/test/test.php成功解析,apache支持解析PHP。
编辑主配置文件httpd.conf
vim /usr/local/apache/conf/httpd.conf在文件末尾添加以下规则。
<Directory /usr/local/apache/htdocs/test> php_admin_flag engine off <filesmatch "(.*)php"> Order deny,allow Deny from all </filesmatch> </Directory>保存退出,检查配置文件是否有错误。
/usr/local/apache/bin/apachectl -t检查完成,重启服务。
/usr/local/apache/bin/apachectl stop /usr/local/apache/bin/apachectl start显示权限拒绝,无法解析.php文件。
http://192.168.10.10/test/index.html成功解析.html文件,test目录的其他非php的页面仍然可以正常访问。
本文档于2020年10月20日由Vonmerlot重新整理。
转载需联系原作者Vonmerlot。