1、准备工作
为了避免发生端口冲突、程序冲突等现象,建议卸载使用RPM方式安装httpd。
rpm -e httpd --nodeps #卸载httpd
Apache的配置及运行需要apr、pcre等软件包的支持,因此应预先安装这些软件及其开发包。下面使用挂载光盘,从光盘镜像中预先安装。
安装依赖包:
rpm -ivh apr-1.4.8-3.el7.x86_64.rpm
rpm -ivh apr-devel-1.4.8-3.el7.x86_64.rpm
rpm -ivh cyrus-sasl-2.1.26-21.el7.x86_64.rpm
rpm -ivh cyrus-sasl-devel-2.1.26-21.el7.x86_64.rpm (此包的依赖包为上一个安装包,安装前需要安装上一个)
rpm -ivh expat-devel-2.1.0-10.el7_3.x86_64.rpm
rpm -ivh libdb-devel-5.3.21-20.el7.x86_64.rpm
rpm -ivh openldap-devel-2.4.44-5.el7.x86_64.rpm
rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
rpm -ivh pcre-devel-8.32-17.el7.x86_64.rpm
rpm -ivh pcre-8.32-17.el7.x86_64.rpm
安装gcc编译器:
3.安装gcc编译器
rpm -ivh kernel-headers-3.10.0-693.el7.x86_64.rpm
rpm -ivh glibc-headers-2.17-196.el7.x86_64.rpm
rpm -ivh glibc-devel-2.17-196.el7.x86_64.rpm
rpm -ivh libgomp-4.8.5-16.el7.x86_64.rpm
rpm -ivh libpcap-1.5.3-9.el7.x86_64.rpm
rpm -ivh ppp-2.4.5-33.el7.x86_64.rpm
rpm -ivh mpfr-3.1.1-4.el7.x86_64.rpm
rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm
rpm -ivh cpp-4.4.7-4.el6.x86_64.rpm
rpm -ivh gcc-4.8.5-16.el7.x86_64.rpm
rpm -ivh libstdc++-devel-4.8.5-16.el7.x86_64.rpm
rpm -ivh gcc-c++-4.8.5-16.el7.x86_64.rpm
2、源码编译及安装
上传或下载httpd源码包
1)解包
tar zxvf httpd-2.4.25.tar.gz -C /usr/src #将源码包解压到指定的位置
cd /usr/src/httpd-2.4.25
2)配置
./configure \
--prefix=/usr/local/httpd\ #指定将httpd服务程序安装到哪个目录下
--enable-so\ #启用动态加载模块支持,使httpd具备进一步扩展功能的能力
--enalbe-rewrite\ #启用网页地址重写功能,用于网站优化及目录迁移维护
--enable-charset-lite\ #启动字符集支持,以便支持使用各种字符集编码的网页
--enable-cgi #启用CGI脚本程序支持,便于扩展网站的应用访问能力
&&make &&make install
3)确认安装结果
由于指定的安装目录为/usr/local/httpd,因此httpd服务的各种程序、模块、帮助文件等都将复制到此目录下。
在安装后的/usr/local/httpd目录下,主要子目录的用途如下:
4)优化
通过源码编译安装的httpd服务,程序路径并不在默认的搜索路径上,为了使该服务在使用时更加方便,可以为相关程序添加符号链接
ln -s /usr/local/httpd/bin/* /usr/local/bin
ls -l /usr/local/bin/httpd /usr/local/bin/apachectl
测试
3、添加httpd系统服务
将编译安装的程序添加为系统服务有两种方式
1)使用chkconfig添加系统服务
复制httpd自带的脚本到/etc/init.d/目录下,起名为httpd,并在文件开头添加chkconfig识别配置,服务识别参数,在级别3,5中启动,启动和关闭的顺序分别为,85、21.
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
2)建立httpd.service文件
vim /lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server #设置服务单元描述字符串
After=network.target #设置服务单元的启动先后顺序。network.target表示启动时先启动netwoek.target,后启动httpd.service,关闭时顺序相反
[Service]
Type=forking #设置服务进程的启动类型。需要注意的是,当启动类型为forking时需要同时设置PIDFile配置项,以帮助systemd准确定位到服务的主进程。
PIDFile=/usr/local/httpd/logs/httpd.pid #设置服务的守护进程的PID文件
ExecStart=/usr/local/bin/apachectl $OPTIONS #设置服务启动时执行的命令
ExecReload=/bin/kill -HUP $MAINPID #设置服务重新加载时执行的命令
KillMode=process #设置在单元停止时,杀死进程的方法。process表示仅杀死主进程
Restart=on-failure #设置服务进程正常退出、异常退出、被杀死、超时的时候,是否重启该服务。on-failure表示仅在进程异常退出时重启
RestartSec=42s #设置在重启服务前暂停多长时间,默认为100ms
[Install]
WantedBy=graphical.target #设置该服务所在的Target(运行目标),“graphical.target(图形界面多用户系统)”是指该服务所在的Target(运行目标)
httpd.service文件编写完成后,执行如下命令设置httpd服务开机启动
systemctl enable httpd #设置httpd服务开机自启
systemctl is-enabled httpd #查看httpd服务的自启动状态
1)确定网站名称、IP地址
若要向internet中发布一个wep节点,需要申请一个合法的互联网ip,并向DNS服务提供商标注册一个完整的网站名称。在企业内部这些信息可以自行设置。列如wep主机的IP地址为192.168.248.13 ,网站名称为www.aaaa.com。
2)配置并启动httpd服务
编辑httpd服务的主配置文件httpd.conf,查找配置项“ServerName”,在附近添加一行内容“ServiceName www.aaaa.com”,用于设置网站名称。
vim /usr/local/httpd/conf/httpd.conf
修改httpd.conf文件的配置内容后,使用apachectl -t命令对配置内容进行语法检查(或使用“httpd -t”命令)。如果语法没有错误,将会显示“Syntax OK”信息,否则需要根据错误提示信息来修正配置。
2)启动httpd服务
使用脚本文件/usr/local/httpd/bin/apachectl,分别通过“start”、“stop”,“restart”选项进行开启、终止、重启httpd控制。或者使用systemctl命令控制/lib/systemd/system/httpd.service配置文件,从而实现对httpd服务进行控制。正常启动httpd服务后,默认将监听TCP协议的80端口。
3)部署网页文档
编译安装的httpd服务,网站根目录位于/usr/local/httpd/htdocs下,需要将web站点的网页文档复制或上传此目录下。httpd服务器默认已经提供了一个名为index.html的测试网页。
在客户机的网页浏览器中,通过域名或IP地址服务httpd服务器,将可以看到web站点的页面内容。
4)查看web站点的访问情况
httpd服务器使用了两种类型的日志:访问日志和错误日志。这两种日志文件分别为access_log和error_log,均位于/usr/local/httpd/logs目录下。
通过查看访问日志文件access_log,可以及时了解web站点的访问情况。
访问日志中的每行对应一条访问记录,记录了客户机的ip地址、访问服务器的容器和时间、请求的网页对象等信息。
查看错误日志文件error_log,可以为排查服务器运行故障提供参考根据。错误日志文件中的每行对应一条错误记录,记录了发生错误的容器和时间、错误事件类型、错误事件的内容描述等信息。
1)全局配置项
全局配置决定httpd服务器的全局运行参数,使用“关键字 值”的配置格式。
每条全局配置都是一项独立的配置,不需要包含在其他任务区域中。
各全局配置项的含义如下:
以上为httpd.conf文件中主要的全局配置项。
2)区域配置项
除了全局配置项以外,httpd.conf文件中的大多数配置是包括在区域中的。区域配置使用一对组合标记,限定了配置项的作用范围。
#定义“/”目录区域的开始
AllowOverride None #不允许隐含控制文件中的覆盖配置
Options FollowSymLinks #控制选项,允许使用符号链接
Require all granted #禁止任何人访问此区域
#定义“/”目录区域的结束
以上区域定义中,设置了一个根目录的区域配置,其中添加的访问控制相关配置只对该目录有效,而不会作用于全局或其他目录区域(这里所说的根目录是指设置httpd服务器的根目录“ServerRoot"所设置的值,而不是系统的根目录。
一、客户机地址限制
通过Require配置项,可以根据主机名或ip地址来决定是否允许客户端访问。在httpd服务器的主配置文件的
通常情况下,网站服务器是对所有客户机开放的,网页文档目录并未做任何限制,因此使用的是“Require all granted”策略,表示允许从任何客户机访问。
定义限制策略时,多个不带not的Require配置语句之间是“或”的关系,即任意一条Require配置语句满足条件均可以访问。若即出现了不带not的Require配置语句,,又出现了带not的Require配置语句,则语句之间是“与”的关系,即同时满足所有Require配置语句才可以访问。
若需要使用“仅拒绝”的限制策略时,灵活使用Require与Require not配置语句设置拒绝策略,只禁止一部分主机访问。在使用not禁止访问时要将其置于
用户授权限制
基于用户的访问控制包含认证(Authentication)和授权(Authorization)两个过程,是Apache允许指定用户使用用户名和密码访问特定资源的一种方式。认证是指识别用户身份的过程,授权是指允许特定用户访问特定目录区域的过程。
httpd服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式。使用摘要认证需要在编译httpd之前添加“--enable-auth-digest”选项,但并不是所有的浏览器都支持摘要认证;基本认证是httpd服务的基本功能,不需要预先配置特别的选项。
1)创建用户认证数据文件
httpd的基本认证通过校验用户名,密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的htppasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。
执行以下操作可以建立数据文件/usr/local/httpd/conf/.awspwd,其中包含一个名为webadmin的用户信息。
使用htpasswd工具时,必须指定用户数据文件的位置,添加“-c”选项表示新建立此文件,若省略“-c”选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。
2)添加用户授权
修改httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置允许那些用户访问。
vim /usr/local/httpd/conf/httpd.conf
....
AuthName "DocumentRoot" #定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示
AuthType Basic #设置认证的类型,Basic表示基本认证
AuthUserFile /usr/local/httpd/conf/.awspwd #设置用于保护用户账号、密码的认证文件路径
Require valid-user #要求只有认证文件中的合法才能访问,“valid-user”表示所有合法用户,若只授权给单个用户,可改为指定的用户名。
....
基本认证的登录界面:
认证失败时将拒绝访问:
二、构建虚拟web主机
虚拟web主机指的是在同一台服务器中运行多个web站点,其中的每个站点上并不独立占用整个服务器。通过虚拟web主机服务器可以充分利用服务器的硬件资源。
httpd支持的虚拟主机类型包括三种:
1)为虚拟主机提供域名解析
自行搭建测试用的DNS服务器。主配置文件named.conf中添加两个域名。