码迷,mamicode.com
首页 > Web开发 > 详细

使用httpd(即apache)搭建多个虚拟主机和https相关的用法

时间:2016-07-14 19:33:50      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:apache   虚拟主机   https   httpd   

要求: 

   分别使用httpd-2.2和httpd-2.4实现

1、建立httpd服务,要求:

  (1) 提供两个基于名称的虚拟主机www1, www2;有单独的错误日志和访问日志; 

  (2) 通过www1的/server-status提供状态信息,且仅允许tom用户访问;

      (3) www2不允许192.168.0.0/24网络中任意主机访问;

2、为上面的第2个虚拟主机提供https服务;

 

 以下将会演示分别在CentOS 6和CentOS 7上搭建httpd,并实现对web的访问控制以及https,在CentOS 6上使用的是httpd2.2,CentOS 7上使用的是httpd2.4。

    

    CentOS 6上搭建http和httpsf服务:


                第一部分:搭建http服务


        1、先配置好yum源,用于安装httpd2.2

        ]# yum install httpd -y


       2、在/etc/httpd/conf.d/创建2个虚拟主机所用的文件名称分别为vhosts1.conf、vhosts2.conf

    vhosts1.conf的内容为       

        <VirtualHost 172.16.6.6:80>
            ServerName  www1
            DocumentRoot /data/vhosts/www1
            CustomLog logs/www1-access_log combined
            ErrorLog logs/www1-error_log
        </VirtualHost>
        
    vhosts2.conf的内容为
        <VirtualHost 172.16.6.6:80>
            ServerName  www2
            DocumentRoot /data/vhosts/www2
            CustomLog logs/www2-access_log combined
            ErrorLog logs/www2-error_log
        </VirtualHost>
        
      3、需要将httpd的主配置文件/etc/httpd/conf/httpd.conf中的NameVirtualHost指定注释去掉,设置为
            NameVirtualHost 172.16.6.6:80
          否则,启动时会有警告
          
      4、启动httpd服务
            [root@localhost ~]# service httpd start
            Starting httpd:                                            [  OK  ]

        5、由于需要在www1上能够查看httpd的状态,所以需要httpd支持status_module模块,查看当前是否有支持的模块: 

                    [root@localhost ~]# httpd -M | grep status
                     status_module (shared)

       能出现以上提示就说明能支持查看httpd的运行状态信息

    

        6、创建测试页并进行测试网页,即在/data/vhosts/www1和/data/vhosts/www2下创建测试页

            [root@localhost ~]# echo www1 > /data/vhosts/www1/index.html
            [root@localhost ~]# echo www2 > /data/vhosts/www2/index.html
        测试:
            [root@localhost ~]# curl  http://www1
            www1
            [root@localhost ~]# curl  http://www2
            www2
           出现显示www1和www2,则说明两个虚拟主机工作正常
       
       7、设置基于basic的访问控制,在/etc/httpd/conf.d/vhosts1.conf中添加内容,添加后的显示如下:
                <VirtualHost 172.16.6.6:80>
                    ServerName  www1
                    DocumentRoot /data/vhosts/www1
                        CustomLog logs/www1-access_log combined
                        ErrorLog logs/www1-error_log
                        <Location /server-status>
                           SetHandler server-status
                        AuthType basic
                        AuthUserFile "/etc/httpd/.htpasswd"
                        AuthName "Dangerous,it‘s only administrator area."
                        Require User tom
                        </Location>
                        
                </VirtualHost>
         设置访问相关的文件,用以存储用户tom登录时用到的信息:
             [root@localhost ~]# htpasswd -c -m /etc/httpd/.htpasswd tom
                    New password: 
                    Re-type new password: 
                    Adding password for user tom
                /etc/httpd/.htpasswd为稍后登录时用到的存储tom账号和密码的文件。
                
         检查之前所添加的文件是否有语法错误:

            [root@localhost ~]# httpd -t

            Syntax OK       说明语法检查正常,没有出现错误

          让httpd重载配置文件:        

                        [root@localhost ~]# service httpd reload
                        Reloading httpd:

          分别测试http://www1和http://www1/server-status页面

         技术分享

         显示http://www1访问正常。

        技术分享

        测试http://www1/server-status需要基于basic认证,需要输入用户tom的账号和密码才可以登录,输入之前设置tom的账号和密码后就可以显示内容了,登录后显示如下

        

        技术分享

        技术分享

        至此,基于basic认证的虚拟主机www1以完成,接下来将完成虚拟主机www2的设置


       8、设置www2禁止某个ip段访问,比如192.168.0.0,也可以禁止某一ip访问

               <VirtualHost 172.16.6.6:80>
                    ServerName  www2
                    DocumentRoot /data/vhosts/www2
                    CustomLog logs/www2-access_log combined
                    ErrorLog logs/www2-error_log
                    <Directory "/data/vhosts/www2">
                        Options None
                        AllowOverride None
                        Order deny,allow
                        deny from 192.168.0
                        deny from 172.16.6.3
                    </Directory>

              </VirtualHost>
            之后,检查下文件的语法,并重新加载配置文件:
                [root@localhost ~]# httpd -t
                Syntax OK
                [root@localhost ~]# service httpd reload
                Reloading httpd: 
                
            这边在172.16.6.3上测试对www2的访问,显示禁止:
                [root@centos7 ~]# curl -I http://www2
                            HTTP/1.1 403 Forbidden
                            Date: Thu, 14 Jul 2016 08:44:22 GMT
                            Server: Apache/2.2.15 (CentOS)
                            Accept-Ranges: bytes
                            Content-Length: 4961
                            Connection: close
                            Content-Type: text/html; charset=UTF-8
                            
                   第二部分:配置虚拟主机www2能提供https服务
                   
        1、https是调用ssl库进行,所以首先需要安装下ssl的模块
                    [root@localhost ~]# yum install mod_ssl
           
        2、这边先用一台机器 172.16.6.1作为CA,并对提供https服务的机器提供证书签发
            使用172.16.6.1创建为私有CA:
              [root@localhost ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
                      Generating RSA private key, 2048 bit long modulus
                      .............................+++
                      ...........+++
                     e is 65537 (0x10001)
                    生成自签证书:
                      [root@localhost ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
        3、虚拟主机www2上生成私钥,然后生成证书申请,并发给私有CA 172.16.6.1
             [root@localhost ~]# mkdir /etc/httpd/ssl
             [root@localhost ~]# (umask 077 ; openssl genrsa -out /etc/httpd/ssl/httpd.key 1024)
                                             
            创建证书用到的数据库文件:
               [root@localhost CA]# touch index.txt
               [root@localhost CA]# echo 01 > serial
                    
                                     
            将证书申请发给CA:
               [root@localhost ~]# scp /etc/httpd/ssl/httpd.csr 172.16.6.1:/etc/pki/CA/newcerts/
               root@172.16.6.1‘s password: 
               httpd.csr
                     
            CA签署证书:
               [root@localhost CA]# openssl ca -in /etc/pki/CA/newcerts/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365                                                                  100%  676     0.7KB/s   00:00
                  
           签署截图如下:

                        技术分享

         4、将此证书发给虚拟主机www2,并修改ssl的配置文件/etc/httpd/conf.d/ssl.conf

                [root@localhost ~]#  scp /etc/pki/CA/certs/httpd.crt 172.16.6.6:/etc/httpd/ssl/
               
               将修改以下几项:    
                   DocumentRoot "/data/vhosts/www2"
                   ServerName www2:443
                   SSLCertificateFile /etc/httpd/ssl/httpd.crt
                   SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
                   
               验证修改的文件是否有语法错误,并重新加载配置:
                   [root@localhost httpd]# httpd -t
                   Syntax OK
                   [root@localhost httpd]# service httpd reload
                   Reloading httpd:
       5、测试虚拟主机www2的https服务是否能正常访问

        技术分享

        显示无法验证证书,由于CA的证书还未导入到浏览器

          这边还提供一个测试办法:将CA证书发到测试的机器上,并用CA证书进行测试,如下

                [root@centos7 ~]# curl --cacert /root/cacert.pem https://www2                
                www2
              显示结果为虚拟主机www2的证书通过了验证,并得以显示

          

            

            

        


    

        

    

        

使用httpd(即apache)搭建多个虚拟主机和https相关的用法

标签:apache   虚拟主机   https   httpd   

原文地址:http://yy0430.blog.51cto.com/11619642/1826472

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!