Apache服务搭建实验

it2023-03-27  81

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.conf

RPM 包安装

/etc/httpd/conf/httpd.conf

默认网页保存位置

源码包安装

/usr/local/apache2/htdocs

RPM 包安装

/var/www/html

日志保存位置

源码包安装 /usr/local/apache2/logs RPM 包安装 /var/log/httpd

常见服务响应码

详细解析见:apache常见请求码

实验步骤

实验目的:掌握apache服务的基本搭建以及常规设置。

实验准备:C6标准虚拟机三台。(selinux与防火墙已关闭)

实验规划:192.168.10.10(apache服务端)

​ 192.168.10.11(访问测试机1)

​ 192.168.10.12(访问测试机2)

实验环境:标准LAMP环境,详细搭建见LAMP环境搭建-Centos6。

一、Apache源码安装

1.安装依赖与编译软件

yum -y install openssl openssl-devel zlib zlib-devel pcre-devel gcc*

2.准备源码包

导入虚拟机,开始解压。

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

3.编译安装

cd httpd-2.4.7 ./configure --prefix=/usr/local/apache --enable-rewrite --enable-so --enable-headers --enable-expires --with-mpm=worker --enable-modules=most --enable-deflate --enable-ssl make && make install

4.进行基础配置

备份配置文件

cd /usr/local/apache/conf/ cp -a httpd.conf httpd.conf.bak

5.启动apache服务

/usr/local/apache/bin/apachectl start

检测是否开启

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.conf

AllowOverride从字面上解释是允许覆盖的意思,即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

允许个别,拒绝所有

vim /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访问测试

访问成功。

拒绝个别,允许所有

vim /usr/local/apache/conf/httpd.conf

添加下列信息

<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

1.修改主配置文件,开启vhost与重写功能。

vim /usr/local/apache/conf/httpd.conf

搜索关键字vhost,取消以下注释。

141行

464行

搜索关键字rew,取消以下注释。

148行

保存退出。

2.配置vhost

vim /usr/local/apache/conf/extra/httpd-vhosts.conf

删除原有配置,添加以下信息。

<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>

3.创建测试目录与文件

cd /usr/local/apache/htdocs/ mkdir daqiang dadami echo daqiang > daqiang/index.html echo dadami > dadami/index.html

4.创建规则文件

cd dadami/ vim .htaccess

添加以下规则

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,这样对搜索引擎是比较友好的。

5.测试apache服务配置

/usr/local/apache/bin/apachectl -t

重启服务,准备测试。

6.访问测试

修改Windows的hosts文件:C:\Windows\System32\drivers\etc\hosts

添加以下信息

192.168.10.10 www.daqiang.com 192.168.10.10 www.dadami.com

浏览器连接测试

七、Apache加openssl实现https

HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,用于安全的HTTP数据传输。

使用TCP端口为:80

本实验篇幅较长,已经成立成单独一篇文档,详细见Apache加openssl实现https

八、Apache日志切割

我们每访问一次网站,那么就会记录若干条日志。如果日志不去管理,时间长了日志文件会越来越大,如何避免产生大的日志文件?其实apache有相关的配置,使日志按照我们的需求进行归档,比如每天一个新日志,或者每小时一个新的日志。

本实验配置文件信息较长,已经成立成单独一篇文档,详细见Apache日志管理。

九、不记录指定文件类型的日志

如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志我们其实是可以忽略掉的,比如网站的一些图片,还有js、css等静态对象。

本试验已整合至Apache日志管理中。

十、Apache配置静态缓存

所说的静态文件指的是图片、js、css等文件,用户访问一个站点,其实大多数元素都是图片、js、css等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,提高了用户体验。但这些静态文件总不能一直缓存,它总有一些时效性,那么就得设置这个过期时间。

配置静态缓存有两种方法:

ps:还原配置文件再进行实验!!

1.通过IfModule mod_expires.c模块设置静态缓存

vim /usr/local/apache/conf/httpd.conf

该模块默认不开启,搜索关键字"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个小时。

2.通过IfModule mod_headers.c模块设置静态缓存。

将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,这个很有用,我们做网站安全的时候,这个用的很多, 比如某些目录可以上传文件(例如,图片,视频,文档等静态文件), 黑客可以通过上传带有木马的文件,然后执行这个文件来攻破我们的服务器,我们可以将该目录设置禁止PHP解析。这样就算上传的文件含有可执行木马,也不能执行。

该实验需要标准LAMP环境,搭建方式见LAMP环境搭建-Centos6。

测试目标:www.dadami.com下test目录中的文件。

1.实验前测试

浏览器访问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。

2.添加限制

编辑主配置文件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

3.访问测试

http://192.168.10.10/test/test.php

显示权限拒绝,无法解析.php文件。

http://192.168.10.10/test/index.html

成功解析.html文件,test目录的其他非php的页面仍然可以正常访问。

本文档于2020年10月20日由Vonmerlot重新整理。

转载需联系原作者Vonmerlot。

最新回复(0)