Apache网站服务

一、Apache的主要特点

  1. 开放源代码:这是Apache服务器的重要特点之一,也是其特性的基础。
  2. 跨平台应用:这个特性得益于Apache的源代码开放。Apache服务器可以运行在绝大数软硬件平台上,所有UNIX操作系统都可以运行,甚至可以良好的运行在Windows系统平台上。
  3. 支持各种web编程语言:Apache服务器可支持的网页编程语言包括Perl、PHP、Python、java等,甚至微软的ASP技术也可以在Apache服务器中使用。
  4. 模块化设计:Apache并没有将所有的功能集中在单一的服务程序内部,而是尽可能地通过标准的模块实现专有的功能,这位Apache服务器带来了良好的扩展性。
  5. 运行稳定:Apache服务器可以用于构建具有大负载访问量的web站点。
  6. 良好的安全性:Apache服务器具有相对较好的安全性,这是开源软件共同具有的特性。

二、安装Apache服务器

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目录下,主要子目录的用途如下:

  • /usr/local/httpd/bin:存放httpd服务的各种执行程序文件,包括主程序httpd、服务控制工具apachectl等。
  • /usr/local/httpd/cgi-bin:存放各种CGI程序文件
  • /usr/local/httpd/logs:存放httpd服务的日志文件
  • /usr/local/httpd/conf:存放httpd服务的各种配置文件,包括配置文件httpd.conf、增强配置子目录wxtra等
  • /usr/local/httpd/htdocs:存放网页文档,包括默认首页文件index.html等
  • /usr/local/httpd/modules:存放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命令添加为系统服务,然后由systemctl进行管理
  2. 在/lib/systemd/system/目录下,手动编写以 .service结尾的单元(unit)配置文件

1)使用chkconfig添加系统服务

复制httpd自带的脚本到/etc/init.d/目录下,起名为httpd,并在文件开头添加chkconfig识别配置,服务识别参数,在级别3,5中启动,启动和关闭的顺序分别为,85、21.

cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd

 

Apache网站服务_第1张图片

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服务的自启动状态

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

Apache网站服务_第2张图片

修改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站点的页面内容。

Apache网站服务_第3张图片

4)查看web站点的访问情况

httpd服务器使用了两种类型的日志:访问日志和错误日志。这两种日志文件分别为access_log和error_log,均位于/usr/local/httpd/logs目录下。

通过查看访问日志文件access_log,可以及时了解web站点的访问情况。

Apache网站服务_第4张图片

访问日志中的每行对应一条访问记录,记录了客户机的ip地址、访问服务器的容器和时间、请求的网页对象等信息。

查看错误日志文件error_log,可以为排查服务器运行故障提供参考根据。错误日志文件中的每行对应一条错误记录,记录了发生错误的容器和时间、错误事件类型、错误事件的内容描述等信息。

四、httpd.conf配置文件

1)全局配置项

全局配置决定httpd服务器的全局运行参数,使用“关键字 值”的配置格式。

每条全局配置都是一项独立的配置,不需要包含在其他任务区域中。

各全局配置项的含义如下:

  • ServerRoot:设置httpd服务器的根目录,该目录下包括了运行web站点必需的子目录和文件。默认情况下,httpd服务器的根目录为httpd的安装目录
  • Listen:设置httpd服务器监听的网络端口号,默认为80.
  • User:设置运行httpd进程时的用户身份,默认为daemon。
  • Group:设置运行httpd进程时的组身份,默认为daemon。
  • ServerAdmin:设置httpd服务器的管理元E-mail地址,可以通过E-mail地址及时联系web站点的管理员。
  • ServerName:设置web站点的完整主机名(主机名+域名)
  • DocumentRoot:设置网站根目录,即网页文档在系统中的实际存放路径。此配置项比较容易和ServerRoot混淆。
  • Diectorylndex:设置网站的默认索引页(首页),可以设置多个首页文件,以空格分开,默认的首页文件为index.html。
  • ErroLog:设置错误日志文件路径,默认路径为logs/error_log。
  • LogLevel:设置记录日志的级别,默认级别为warn(警告)。
  • CustomLog:设置访问日志文件的路径,日志类型,默认路径为log/access_log,使用的类型为common(通用格式)。
  • PidFile:设置用于保存httpd进程号(PID)的文件,默认保存地址为logs/httpd.pid,logs目录位于Apache的服务器根目录下。
  • AddDefaultCharset:设置站点中的网页默认使用的字符集编码,如utf-8,gb2312等。
  • lnclude:包含另一个配置文件的内容,可以实现将一些特殊功能的配置放到一个单独的文件中,在使用lnclude配置项将其包含到httpd.conf文件中,这样便于独立进行配置功能的维护而不影响主配置文件。

以上为httpd.conf文件中主要的全局配置项。

2)区域配置项

除了全局配置项以外,httpd.conf文件中的大多数配置是包括在区域中的。区域配置使用一对组合标记,限定了配置项的作用范围。

    #定义“/”目录区域的开始
    AllowOverride None    #不允许隐含控制文件中的覆盖配置
    Options FollowSymLinks    #控制选项,允许使用符号链接
    Require all granted    #禁止任何人访问此区域
    #定义“/”目录区域的结束

以上区域定义中,设置了一个根目录的区域配置,其中添加的访问控制相关配置只对该目录有效,而不会作用于全局或其他目录区域(这里所说的根目录是指设置httpd服务器的根目录“ServerRoot"所设置的值,而不是系统的根目录。

 

 

四,httpd访问的访问控制

一、客户机地址限制

通过Require配置项,可以根据主机名或ip地址来决定是否允许客户端访问。在httpd服务器的主配置文件的,,,配置段中均可以使用Require配置项来控制客户端的访问。使用Require配置项时,需要设置客户机地址以构成完整的限制策略,地址的形式可以是ip地址,网络地址,主机名或域名。使用”all“时表示任意地址。限制策略的常用格式如下

  • Require all granted:表示允许所有主机访问
  • Require all denied:表示拒绝所有主机访问
  • Require local:表示仅允许本地主机访问
  • Require [not] host <主机名或域名列表>:表示允许或拒绝指定主机或域访问
  • Require [not] ip :表示允许或拒绝指定IP地址或网段访问

通常情况下,网站服务器是对所有客户机开放的,网页文档目录并未做任何限制,因此使用的是“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的用户信息。

Apache网站服务_第5张图片

使用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”表示所有合法用户,若只授权给单个用户,可改为指定的用户名。
....

基本认证的登录界面:

Apache网站服务_第6张图片

认证失败时将拒绝访问:

Apache网站服务_第7张图片

二、构建虚拟web主机

虚拟web主机指的是在同一台服务器中运行多个web站点,其中的每个站点上并不独立占用整个服务器。通过虚拟web主机服务器可以充分利用服务器的硬件资源。

httpd支持的虚拟主机类型包括三种:

  • 基于域名:为每个虚拟主机使用不同的域名,但对应的IP地址是相同的。
  • 基于IP地址:为每个虚拟主机使用不同的域名,且其对应的IP地址也不相同。
  • 基于端口:这种方式并不使用域名、IP地址来区分不同的站点内容,而是使用不同的tcp端口号,访问时需要指定端口号才能访问。

1)为虚拟主机提供域名解析

自行搭建测试用的DNS服务器。主配置文件named.conf中添加两个域名。

 

你可能感兴趣的:(Apache网站服务)