网络服务之Apache

httpd_logo_wide_new.png

  互联网这个历史已经不算很短了,它大大方便了人类获取信息,开阔了人类的眼界,使得让这个世界变得小了起来,人与人之间的距离感也不会存在了,娱乐也更加丰富,听音乐、看电影等等这一系列,都能从网上进行,这些功能,都是由www服务器来提供服务,在Linux中,提供网络的服务器有很多种,那么今天我们就讲一个比较老牌,且依然能存活的服务器“阿帕奇”英文:Apache。


一、Apache简介

  Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性。被广泛使用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

二、特性

  Apache支持许多特性,大部分通过编译的模块实现。这些特性从服务器端的编程语言支持到身份认证方案。一些通用的语言接口支持Perl,Python,Tcl, 和PHP。流行的认证模块包括mod_access,mod_auth和mod_digest。其他的例子有SSL和TLS支持(mod_ssl),代理服务器(proxy)模块,很有用的URL重写(由mod_rewrite实现),定制日志文件(mod_log_config),以及过滤支持(mod_include和mod_ext_filter)。Apache日志可以通过网页浏览器使用免费的脚本AWStats或Visitors来进行分析。

三、工作流程

  Apache工作在应用层,是实现http协议的服务器软件之一,http是超文本传输协议,工作于应用层tcp的80端口,用户发起http协议的请求报文,服务器收到之后进行对客户端的响应,客户端收到之后,通过浏览器显示,其背后为html语言。而html是超文本标记语言,那么一次完整的http报文请求处理过程以如下步骤进行:  
  1、建立或处理连接:接收请求或拒绝请求。  
  2、接收请求:接收来自于网络上的主机请求报文中对某些特定资源的一次请求过程。  
  3、处理请求:对请求报文进行分析,获取客户端进行请求的资源以及请求方法等相关信息。  
  4、访问资源:获取请求报文中的请求资源。  
  5、构建响应报文。  
  6、发送响应报文。  
  7、记录日志。  

页面请求过程.png

四、版本的变革

  早期发布的是apache-1.3,不过现在已经停止支持,之后发布了2.2的版本,但不支持event事件驱动机制,现在最新的版本是2.4,我们就以2.4为例进行说明。

五、操作流程

5.1 安装

  我们都知道在Linux系统当中的安装方式无非有两种,一种是RPM包(RedHat公司提供的二进制包)安装,报名叫httpd,其服务程序也叫httpd,另一种是共官方网站上去下载源码包来进行安装,在本次的实验中,这两种方式我们都会进行,其配置方式也是不尽相同,如果你配置好yum仓库,现在就可以很简单的以RPM方式来进行安装,我们使用以下命令:

[root@node1 ~]# yum -y install httpd

  就这一条命令,我们的RPM包就安装好了,可以直接启动程序打开浏览器来访问

[root@node1 ~]# systemctl start httpd.service

  打开浏览器,访问方式直接输入IP地址就可以,因为http协议浏览器自动加上去的,如果看到了apache的测试页,则证明你成功了。  

_$4$(5A9P_BAAB%QI1JTK1R.png  
  那么为什么可以成功?我们可以使用ss命令用来查看:

[root@node1 ~]# ss -tnl 
State Recv-Q Send-Q Local Address:Port Peer Address:Port    
LISTEN 0     128                 *:22                 *:* 
LISTEN 0     100                 127.0.0.1:25         *:* 
LISTEN 0     128                 :::80                :::*    
LISTEN 0     128                 :::22                :::* 
LISTEN 0     100                 ::1:25               :::*

  从以上命令显示我们看出,当服务启动时,就会开启80端口,我们说过,80端口是提供WEB服务的。  
以上就是以RPM包方式的安装,那么现在我们看一下如何以源码包方式进行安装,源码包的安装过程方式很是繁杂,但是其有点是可以自由定制功能,我们使用
--enable来使用是否开启次功能,--with用来是否添加此功能,还可以用  --with-out用来取消此功能,意思是在安装上默认添加的功能给去除掉,现在我们可以从官网上下载源码包,其下载地址为:http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.25.tar.gz,直接复制就能够下载,在Linux上,使用wget就可以。

[root@node1 ~]# wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.25.tar.gz

  下载完成之后,由于是压缩包,所以我们必须要解压才能够使用安装,把它解压到/usr/src/目录下。

[root@node1 ~]# tar -xf httpd-2.4.25.tar.gz -C /usr/src/

  之后我们下载两个依赖包,一个是apr包,另一个是apr-util包,那么apr是什么?其实它是一个底层支撑Apache跨平台特性的一个安装包,有了这个包就可以不用修改整个程序,就像是一个虚拟机一样,提供一个环境让系统跑起来,apache也亦是如此,现在我们可以使用wget命令下载下来:

[root@node1 src]# wget http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.gz    
[root@node1 src]# wget http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz

  下载完成之后,由于都在/usr/src的目录下,所以就直接加压。

[root@node1 src]# tar -xf apr-1.5.2.tar.gz 
[root@node1 src]# tar -xf apr-util-1.5.4.tar.gz

  我们首先进入apr目录,开始安装,不过在安装之前,我们首先要安装开发包组:

[root@node1 ~]# yum -y groupinstall "Development Tools" "Server Platform Development"
[root@node1 src]# cd apr-1.5.2/ 
[root@node1 apr-1.5.2]# ./configure --prefix=/usr/local/apr-1.5    
[root@node1 apr-1.5.2]# make && make install 
[root@node1 src]# cd apr-util-1.5.4/    
[root@node1 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util-1.5 --with-apr=/usr/local/apr-1.5

  如果以上程序包都安装完成的话,恭喜你,可以安装http了,首先进入该目录,之后进行安装,如果中途出现一些错误的话,是可以解决的。

[root@node1 httpd-2.4.25]# ./configure --prefix=/usr/local/apache-2.4 --enable-so    --enable-ssl --with-pcre --with-rewrite --with-mpm=prefork --enable-cgi --with-zlib    --with-libxml2=/usr --with-apr=/usr/local/apr-1.5 --with-apr-util=/usr/local/apr-util-1.5    --with-openssl --enable-modules=most --enable-mpms-shared=all 
[root@node1 httpd-2.4.25]#    make && make install

  之后打开浏览器,步骤一样,输入IP,只不过出现的是 It Works的页面。  
  安装过程中,可能会报错,但这些错误都可以解决,以上成功的话,则代表第一阶段完成。  
  接下来可以启动源码包安装的程序,不过必要先要关闭RPM包的apache,因为一个端口不能为两个程序所使用。

[root@node1 ~]# /usr/local/apache-2.4/bin/apachectl start

5.2 配置介绍

  其实两种安装方式任意选一种都可以,毕竟这只是实验,并没有好坏,最后的配置方法都是差不多的,接下来说一下配置文件的详解,以及我们可以搭建什么服务,我们就以RPM包所安装的来进行配置,我们的主配置文件在/etc/httpd/conf/etc/httpd/conf.d,注意:我们要把主配置文件复制出来进行备份,不然的话,如果到了不可挽回的余地,最起码覆盖掉,解决一下,从头再来,那么其配置结构如下:

XG5ZR82}W)D`LR{F{O6{0ER.png 

  我们使用的响应模型是默认是prefork,它是开启多个进程来处理不同的请求,其模式共有三个,另外两个是workerevent模型,那么我们首先来介绍一下prework模型,它是一个多进程模型,由一个主进程和多个子进程组成,一个主进程负责创建和销毁子进程以及套接字,也负责接收请求,并将请求转发到子进程来进行处理。那么多个子进程,每一个子进程分别处理一个请求,其工作模型为会预先生成几个空闲进程,用来等待处理用户请求。  
  接下来是worker模型,它是多进程多线程的模型,有一个主进程和多个子进程,主进程和以上一样,创建并销毁子进程以及建立套接字并接受请求,然后将请求转发给子进程,而多个子进程却没有直接处理请求,而是交给了它所生成的线程处理,每个子进程生成多个线程,每个线程都会去响应用户请求。其并发的响应数量为  
m*n。  

worker_prefork.jpg

  最后一个是event模型,它是一个事件驱动的模型,每个进程响应多个用户请求,也是由一个主进程个子进程组成,主进程的功能和以上的两种模式一样,那么子进程是基于事件驱动直接响应多个用户请求,在httpd-2.4中是支持的。  
  以上就是对模式的介绍,那么接下来其它文件的位置,我们安装完成之后就必然开启它进行web服务,那么在  
CentOS 6中,它的服务脚本在/etc/rc.d/init.d/httpd路径下,站点文件在/var/www/html的路径下,为什么会配置在哪儿?因为在httpd.conf配置文件中,定义了DocumentRoot "/var/www/html"的文档根目录,日志文件保存在/var/log/httpd目录下,访问日志为access_log错误日志为error_log。服务控制和启动在CentOS7是不一样的,分别是:  
  CentOS 6:

[root@node1 ~] # service httpd { start | stop | restart | status }

  CentOS 7:

[root@node1 ~] # systemctl { start | stop | restart | status } https.service

5.3 配置别名及认证方式和虚拟主机

5.3.1 配置别名

在配置文件下使用alias来定义别名,其格式如下:

[root@node1 conf.d]# vim alias.conf 
Alias /web1/ /web/html1/ 
<Directory "/web/html1">    
    options None 
    allowOverride None 
    Require all granted 
</Directory> 
[root@node1 ~]# systemctl reload httpd.service

  接下来为定义的配置文件建立目录。

[root@node1 conf.d]# mkdir /web/html1 -pv

  定义主页。

[root@node1 conf.d]# cd /web/html1/ 
[root@node1 html1]# vim index.html 
<h1>Alias Page</h1>

  打开浏览器访问。  

RIRT%BO2FTBOWXXQPRJ9({J.png

5.3.2 认证服务

  认证其实很好理解,就是让用户向服务器提供用户名和密码,这是证明自己的一种手段,其配置如下:

[root@node1 ~]# cd /etc/httpd/conf.d/ 
[root@node1 ~]# vim auth.conf 
Alias /apps/ "/apps/html/" 
<Directory "/apps/html"> 
    Options None 
    AllowOverride None    
    Authtype basic 
    AuthUserFile "/apps/html/.htpasswd" 
    AuthName "Admin String"    
    Require valid-user 
</Directory> 
[root@node1 conf.d]# cd /apps/html/ 
[root@node1 html]# vim index.html 
<h1>Auth Page</h1> 
[root@node1 ~]# systemctl reload httpd.service

  重新启动打开浏览器进行访问,输入用户名和密码就可以,创建用户和密码的命令是htpasswd,格式如下:

[root@node1 conf.d]# htpasswd -c -m /apps/html/.htpasswd user1

9@39~JYBQ)BGPIWAB62_S`Y.png

~8{~OEQ$BUDEM_9LO37$H72.png

5.3.3 虚拟主机服务

  虚拟主机是可以在一个主机上提供多个访问站点,共有三种实现方案,分别是基于IP、基于端口、基于域名,我们就以基于域名的方式来配置虚拟主机,配置如下:

[root@node1 conf.d]# vim vhost.conf 
<VirtualHost *:80>
    ServerName www1.stux.com
    DocumentRoot "/apps/www"
      <Directory "/apps/www"> 
          Options None 
          AllowOverride None
          Require all granted 
        </Directory> 
</VirtualHost> 
[root@node1 ~]# mkdir /apps/www 
[root@node1 ~]# vim /apps/www/index.html 
<h1>Test Virtual Page</h1> 
[root@node1 ~]# systemctl reload httpd.service

  现在我们可以测试一下,如果成功,那我恭喜你。

@Y%X{~8N2$2KTP{Y(1Q6Q67.png

原创文章,作者:刘 祥宇,如若转载,请注明出处:http://www.178linux.com/66535

(0)
刘 祥宇刘 祥宇
上一篇 2017-01-13
下一篇 2017-01-14

相关推荐

  • Linux系统的介绍及如何获取帮助?(学习笔记)

    第一、Linux 基础   CPU架构:      x86      x64 (amd64)      m68000,m68k      arm    &nbs…

    Linux干货 2016-12-12
  • 马哥教育面授班22期:第一天课程练习

    Linux发展史:        1984年:Richard Stallman发起GNU项目和自由软件基金会创建开源的UNIX实用工具版本        创建通用公共许可证(GPL)        1991年:Linux Torvalds发…

    Linux干货 2017-05-16
  • N21-第二周博客

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 文件管理命令有复制、删除与移动:cp,mv,rm cp(复制档案或目录) [root@study ~]# cp [-adfilprsu] 源(source) 目标(destination) [root@study ~]# cp [options] source1 source2 s…

    Linux干货 2016-07-16
  • linux哲学思想

    有关运维,在哲学上的思想。 正确的哲学思想在我看来就是公理,就是像1+1=2一样大家都必须得遵守的公理。 当然,所有的公理都是有前提的,而有关linux的哲学思想当然是在linux环境这个大前提下。才是公理。在我看来,公理就是在学习知识之前所要依靠的准则,linux下的一切都在这些准则下。 比如: 一切接文件  linux下所有都是以文件的形式保存…

    2017-07-22
  • Kickstart

    1、安装所需软件包  yum -y install createrepo mkisofs isomd5sum 上传centos6.9原始镜像内容 mkdir /mnt/centos   创建挂载目录 mount -o loop centos6.9 /mnt/centos   上传centos6.9镜像并且挂载至centos目录 mkdir /tmp/iso …

    2018-03-26
  • 马哥教育网络班22期+第二周课程练习

    Linux上文件可管理类命令,其常用的使用方法和相关示例 目录管理类命令 目录管理类命令包含:mkdir,rmdir mkdir 使用说明及格式 移除空目录 rmdir [OPTION]… DIRECTORY…   常见选项及说明 -p –parents 创建时如果父目录不存在,一并创建 -v –ve…

    Linux干货 2016-08-24