httpd 2.2(Apache Web服务器)

apache (Web服务器)

简介:

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。 

 

Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。

它可以运行在几乎所有广泛使用的计算机平台上。

Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用

 

http请求处理过程

一次完整的http请求处理过程:

(1) 建立或处理连接:接收请求或拒绝请求

(2) 接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;

          (3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据请求报文的首部来判断用户请求的资料

(4) 访问资源:获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot

(5) 构建响应报文

(6) 发送响应报文,有长连接和短连接模式

(7) 记录日志

并发访问响应模型(Web I/O):

1.单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应;

2.多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

3.复用I/O结构:一个进程响应n个请求;

         (1)多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

         (2)事件驱动:event-driven

4复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;

apache 的工作模式

    1.prefork:多进程模型,每个进程响应一个请求;

一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

    2.worker:多线程模型,每个线程响应一个请求;

一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;                                   

    3.event:事件驱动模型,每个线程响应n个请求;

一个主进程:生成m个子进程,每个进程直接响应n个请求;

 

 

安装前准备

说明

操作系统:CentOS 6.7 64

Apache 版本:httpd-2.2.15-47.el6.centos.3.x86_64

httpd服务器ip:192.168.1.5

 

1.  配置好IPDNS 、网关,确保使用远程连接工具能够连接服务器

2.       配置防火墙,iptables –F 清理防火墙规则或者关闭iptables

3.       关闭SELINUX, setenforce 0  #立即生效(实际是宽容模式)

 

安装配置

1.  安装apache,yum安装会自动解决依赖关系

yum -y install httpd

2.  启动httpd 服务,并测试页面是否显示正常

service httpd start

如果启动报错信息是:httpd:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName

那就去主配置文件找到#ServerName www.example.com:80 ,把前面的注释去掉就可以启动不报错了.

blob.png

3.  定义server页面文档路径,在新的路径目录下创建文件内容,重新加载服务,测试页面.

mkdir -pv /www/htdocs

vi /www/htdocs/index.html

test Page

主配置文件修改这一行 DocumentRoot "/var/www/html"

vi /etc/httpd/conf/httpd.conf

DocumentRoot "/www/htdocs"  #修改成这样

 service httpd reload

    blob.png

4.  基于来源访问控制.

vi /etc/httpd/conf/httpd.conf

    <Directory "/www/htdocs">  #修改这里的路径    
    Order allow,deny
    Deny from 192.168.1.3  #找到这一行添加192.168.1.3
    Allow from all

    service httpd reload

blob.png

5.  设置路径别名

 cd /www/htdocs/

 vi bbs/index.html

 Page at /www/htdocs/bbs      #先自己测试看看是否是显示的内容

 mkdir /forum

 vi /forum/index.html

 Page /forum

 vi /etc/httpd/conf/httpd.conf

 Alias /bbs/ "/forum/"

 

service httpd reload

blob.png

6.  基于用户访问控制

     cd /www/htdocs/

    mkdir amdin

    vi admin/index.html

    Page FOR Admin

    vi /etc/httpd/conf/httpd.conf  #在主配置文件下添加如下几行

     <Directory "/www/htdocs/admin">
            Options None
            AllowOverride None
            AuthType Basic
            AuthName "Administator private"
            AuthUserFile "/etc/httpd/conf.d/.htpasswd"
            Require valid-user
     </Directory>


     创建2个用户

    htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom

    htpasswd -m /etc/httpd/conf.d/.htpasswd jerry

    service httpd reload

    blob.png

7.  基于组的用户认证,基于组的认证修改的配置文件在以上的例子添加修改

     vi /etc/httpd/conf/httpd.conf  #在主配置文件下添加如下几行

     <Directory "/www/htdocs/admin">
            Options None
            AllowOverride None
            AuthType Basic
            AuthName "Administator private"
            AuthUserFile "/etc/httpd/conf.d/.htpasswd"
                    AuthGroupFile "/etc/httpd/conf.d/.htgroup"
            Require group webadmin
     </Directory>

    htpasswd -m /etc/httpd/conf.d/.htpasswd obama

    创建组添加用户

    vi /etc/httpd/conf.d/.htgroup

      webadmin:jerry obama

     

    service httpd reload

    blob.png

 

虚拟主机

注意:现在httpd服务器ip172.28.0.97

1.  基于ip 的虚拟主机配置,进入主配置文件修改

vi /etc/httpd/conf/httpd.conf

#DocumentRoot "/var/www/html"    #把这行注释掉

        <VirtualHost 172.28.0.97:80>    
            ServerName web1.test.com
            DocumentRoot "/vhosts/web1/htdocs"
        </VirtualHost>

然后创建相应的目录和内容,并重新加载配置文件和测试

mkdir -pv /vhosts/{web1,web2}/htdocs

vi /vhosts/web1/htdocs/index.html

Page at Web1

service httpd reload

        blob.png

2.  基于端口的虚拟主机,在以上的例子中在多个8080端口

vi /vhosts/web2/htdocs/index.html

    Page at Web2

vi /etc/httpd/conf/httpd.conf

        Listen 8080  #添加这一行监听8080端口    
        <VirtualHost 172.28.0.97:8080>
            ServerName web3.magedu.com
            DocumentRoot "/vhosts/web2/htdocs"
        </VirtualHost>

 

httpd -t     #测试语法错误

service httpd restart

blob.png

3.  基于名称的虚拟主机,在以上的虚拟配置上修改,并测试

vi /etc/httpd/conf/httpd.conf

NameVirtualHost 172.28.0.97:80  #把注释去掉,表示基于主机名的虚拟主机

blob.png

httpd -t

mkdir -pv /web/vhosts/{www1,www2}

vi /web/vhosts/www1/index.html

    Page at www1.stu.com

vi /web/vhosts/www2/index.html

Page at www2.stu.com

 

        在另外一台机子上可以在hosts文件中添加172.28.0.97 www1.stu.com www2.stu.com

blob.png

4.  通过www1.stu.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status);

cd /web/vhosts/www1/

mkdir admin

htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom

vi /etc/httpd/conf/httpd.conf

blob.png

blob.png

service httpd reload

 

blob.png

 

为上面的第1个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;

httpd服务器ip:172.28.0.97

CA服务器IP172.28.0.59

1.  生成密钥对 cakey.pem,并创建所需文件(在CA服务器上操作)

cd /etc/pki/CA/

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

touch index.txt

echo 01 > serial

2.  开始申请CA机构的根证书,20年x509类型(在CA服务器上操作)

    openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300

    -new: 生成新证书签署请求;

-x509: 专用于CA生成自签证书;

-key: 生成请求时用到的私钥文件;

-days n:证书的有效期限;

-out /PATH/TO/SOMECERTFILE: 证书的保存路径;

blob.png

3.  在httpd服务器上,生成自己的私钥key与csr证书请求

cd /etc/httpd/

mkdir ssl

cd ssl/

(umask 077;openssl genrsa -out httpd.key 1024)  #生成自己的私钥

openssl req -new -key httpd.key -out httpd.csr

blob.png

4.  把证书传送给CA

    scp httpd.csr root@172.28.0.59:/tmp/

    blob.png

 

5.  在CA上签署证书,并将证书发还给请求者(在CA服务器上操作)

openssl ca -in /tmp/httpd.csr -out certs/www1.stu.com.crt -days 365

scp certs/www1.stu.com.crt 172.28.0.97:/etc/httpd/ssl

blob.png

blob.png

 

6.  httpd要支持SSL 需要安装这个mod_ssl模块

 yum -y install mod_ssl

 cd /etc/httpd/conf.d/

 vi ssl.conf

    <VirtualHost 172.28.0.97:443>   #修改这行IP    
    DocumentRoot "/web/vhosts/www1" #注释去掉修改
    ServerName  www1.stu.com        #注释去掉修改
    #   Server Certificate:
    SSLCertificateFile /etc/httpd/ssl/www1.stu.com.crt  #修改证书文件路径
    #   Server Private Key:
    SSLCertificateKeyFile /etc/httpd/ssl/httpd.key      #这个证书私钥
     service httpd restart

7.  测试https是否配置成功

在其他的机子上做测试

openssl s_client -connect 172.28.0.97:443 -CAfile /etc/pki/CA/cacert.pem

blob.png

blob.png

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

评论列表(1条)

  • stanley
    stanley 2016-03-30 12:14

    已置顶,优化点:
    1. markdown 神器可参考
    2. 题目不够专业