Apache的虚拟主机配置计划,httpd虚拟主机

2019-05-03 22:43 来源:未知

实验拓扑图:

在上一次的测试中可以看到在访问AWStats日志分析系统时,并不需要提高账号和密码,只要知道对应的网址就可以获知web站点的访问情况,这给服务器带来了安全隐患。为了更好的控制对网站资源的访问,可以待定的网站目录添加访问授权。

Apache虚拟主机:

一台WEB服务器发布单个网站会非常浪费资源,所以一台WEB服务器上会发布多个网站,

在一台服务器上发布多网站,也称之为部署多个虚拟主机,WEB虚拟主机配置方法有三种:

    基于单IP多个Socket端口;

    基于多IP地址一个端口;

    基于单IP一个端口不同域名。

图片 1

部署AWStats 

Apache WEB服务器安装:

1)安装apr:

[root@localhost src]# wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
[root@localhost src]# tar xf apr-1.5.2.tar.gz
[root@localhost src]# cd apr-1.5.2
[root@localhost apr-1.5.2]# ./configure --prefix=/usr/local/apr
[root@localhost apr-1.5.2]# make && make install

2)安装apr-util:

[root@localhost src]# wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
[root@localhost src]# tar xf apr-util-1.5.4.tar.gz 
[root@localhost src]# cd apr-util-1.5.4
[root@localhost apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@localhost apr-util-1.5.4]# make && make install

3)编译httpd-2.4:

[root@localhost src]# yum -y install pcre-devel openssl-devel libevent-devel
[root@localhost src]# wget http://archive.apache.org/dist/httpd/httpd-2.4.10.tar.bz2
[root@localhost src]# tar xf httpd-2.4.10.tar.bz2
[root@localhost src]# cd httpd-2.4.10
[root@localhost httpd-2.4.10]# ./configure --prefix=/usr/local/apache --enable-so --enable-ssl --enable-rewrite --enable-defalte --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-pcre --with-zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/
[root@localhost httpd-2.4.10]# make && make install

4)启动httpd:

[root@localhost ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
[root@localhost ~]# source /etc/profile.d/httpd.sh

图片 2

基于一个端口不同域名配置:

1)创建虚拟主机配置文件httpd-vhosts.conf,该文件默认已存在,只需去掉httpd.conf主配置文件中#号即可

[root@localhost ~]# vim /usr/local/apache/conf/httpd.conf

图片 3

2)配置虚拟主机:

[root@localhost ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf

<VirtualHost *:80>                        #监听所有网卡的80端口
    DocumentRoot "/usr/local/apache/htdocs/www1"       #虚拟主机发布目录
    ServerName www.a.com                   #虚拟主机完整域名
    ErrorLog "logs/www.a.com-error_log"            #错误日志路径
    CustomLog "logs/www.a.com-access_log" common        #访问日志路径
    <Location /server-status>             #提供状态信息,且仅允许tom用户访问
        SetHandler server-status
        AuthType basic
        AuthName "Fortom"
        AuthUserFile "/usr/local/apache/conf/.htpasswd"
        Require user tom
    </Location>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/www2"
    ServerName www.b.com
    ErrorLog "logs/www.b.com-error_log"
    CustomLog "logs/www.b.com-access_log" combined
    <Directory "/usr/local/apache/htdocs/www2">      #设置www2目录权限,不允许192.168.2.0网段任意主机访问
        Options None
        AllowOverride None
        Order deny,allow
        Deny from 192.168.2.0/24
    </Directory>
</VirtualHost>

3)创建虚拟主机发布目录:

[root@localhost ~]# mkdir -p /usr/local/apache/htdocs/{www1,www2}
[root@localhost ~]# echo '<h1>www.a.com Pages</h1>' > /usr/local/apache/htdocs/www1/index.html
[root@localhost ~]# echo '<h1>www.b.com Pages</h1>' > /usr/local/apache/htdocs/www2/index.html

4)创建tom用户:
[root@localhost ~]# htpasswd -cm /usr/local/apache/conf/.htpasswd tom
[root@localhost ~]# apachectl restart

 5)测试虚拟主机:

修改客户端hosts文件,域名能够解析到服务器ip

图片 4

6)测试server-status:

图片 5

7)测试www2访问权限:

图片 6

 

https加密配置:

建立私有CA:

生成私钥:

[root@localhost CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)

#生成自签证书:

[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:ym
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www.a.com
Email Address []:admin@a.com

#提供辅助文件:
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 >serial

#生成私钥:
[root@localhost CA]# mkdir /usr/local/apache/ssl
[root@localhost CA]# cd /usr/local/apache/ssl
[root@localhost ssl]# (umask 077; openssl genrsa -out httpd.key 1024)

#生成证书请求:

[root@localhost ssl]# openssl req -new -key httpd.key -out httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:ym
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www.a.com
Email Address []:admin@a.com

#CA签发证书:
[root@localhost ssl]# ls
httpd.csr  httpd.key
[root@localhost ssl]# openssl ca -in httpd.csr -out httpd.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Nov  3 12:05:53 2017 GMT
            Not After : Nov  3 12:05:53 2018 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = bj
            organizationName          = ym
            organizationalUnitName    = Ops
            commonName                = www.a.com
            emailAddress              = admin@a.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                47:68:63:A8:C4:51:9E:E5:33:7A:CD:AF:72:8E:F9:C0:A1:01:92:D2
            X509v3 Authority Key Identifier: 
                keyid:76:96:79:13:59:48:85:EC:D6:FE:4D:C5:2D:29:24:E3:A9:24:6C:3D

修改配置文件,启用SSL模块:

[root@localhost ssl]# vim /usr/local/apache/conf/httpd.conf

LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

SSL配置:

[root@localhost ssl]# vim /usr/local/apache/conf/extra/httpd-ssl.conf 

Listen 443
<VirtualHost _default_:443>
    DocumentRoot "/usr/local/apache/htdocs/www1"
    ServerName www.a.com:443
    SSLCertificateFile /usr/local/apache/ssl/httpd.crt
    SSLCertificateKeyFile /usr/local/apache/ssl/httpd.key
    <Directory "/usr/local/apache/htdocs/www1">
        SSLOptions  StdEnvVars
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

https访问:

 图片 7

实验要求:

一、客户机地址限制

1、  搭建WEB服务器,能访问默认站点,并使用awstats软件能监控到默认站点的访问情况。

通过配置选项Order、Deny from、allow from 可以根据客户机名和主机名或者ip地址来决定是否允许客户端的访问,其中order配置项用于限制顺序,Deny from和allow from、配置项用于设置具体的限制内容。

2、  修改Apache的主配置文件,设置1.10只能访问awstats网站,客户端修改IP地址测试。

allow,deny:先“允许“后”拒绝“默认拒绝所有,未明确允许的客户机地址

3、  修改Apache的主配置文件,客户端访问awstats网站,需用户授权(zhangsan)才能访问。

deny,allow:先”拒绝“后“允许”默认允许所有,未明确拒绝的客户机地址

4、  在web服务器实现虚拟主机

使用allow from和deny from配置时,需要设置客户机的地址构成完整的限制策略,地址的形式可以是ip地址,网络地址,主机名和域名使用名称all时表示任意地址,限制策略的格式如下:

  1. 基于域名

  2. 基本IP

  3. 基于端口

Deny from address1 address2 ****

一、先搭建环境,安装apache(请参考公众号以前的文档:apache的安装),能访问默认站点,并使用awstats软件能监控到默认站点的访问情况。如下图:

Allow from address1 address2 ****

图片 8

通常情况下,网站服务器是对所有的客户机开放,网页文档目录未做任何的限制,因此使用的是 Allow from all的策略,表示运行从任何客户机访问,

二、修改Apache的主配置文件,设置只能1.100访问awstats网站,客户端修改IP地址测试。

#

  ‘’‘’‘’‘’‘’‘’‘

    Order allow,deny

    Allow from all

步骤:

需要使用”仅允许“的限制策略时,应将处理顺序为allow,deny并明确设置允许策略只允许一部分主机可以访问,例如只希望ip地址为192.168.137.120的机器可以访问awstats系统如下:

1)  首先进入主配置文件  /usr/local/httpd/conf/httpd.conf

#

  ‘’‘’‘’‘’‘’‘’‘

    Order allow,deny

    Allow from 192.168.137.120

图片 9

需要使用仅拒绝策略时可以处理顺序为 deny,allow 并明确设置拒绝策略,只是禁止一部分主机禁止登陆awstats系统,例如禁止192.168.137.120访问,如下:

2)在文件末尾找到<directory>选项,并修改,如下图:

#

  ‘’‘’‘’‘’‘’‘’‘

    Order deny,allow

    deny  from 192.168.137.120

 图片 10

图片 11

3)  重启apache服务并用客户机验证,如下图:

设置好之后我们使用137.120访问awstats测试

图片 12

图片 13

图片 14

二、用户授权限制

图片 15

http服务器支持使用摘要认证,和基本认证,两种方式。使用摘要认证需要在编译安装httpd之前添加--enable-auth-digest选项,并不是所有浏览器都支持摘要认证,而基本的认证是httpd服务的基本功能,不需要在编译前加任何参数。

三、修改Apache的主配置文件,客户端访问awstats网站,需用户授权(zhangsan)才能访问。

1.创建用户认证数据文件

步骤:

使用专门的htpasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。在使用stpasswd工具时,必须指定用户数据文件的位置,添加-c的选项表示新建立此文件,列如执行下面操作可以新建数据文件,列如执行下面操作可以新建数据文件/usr/local/httpd/conf/.awspwd其中包含一个名字为webadmin的用户信息

1)使用专门的htpasswd工具程序,创建授权用户数据文件。如下图:

# bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin

图片 16

图片 17

2)添加用户授权配置,首先进入主配置文件,然后修改<directory>选项,如下图:

2.确定用户的数据文件

 图片 18

图片 19

图片 20

3。添加用户授权配置

4)重启apache服务后验证,如下图:

有了授权用户账号以后,还需要修改httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置允许哪些用户访问。例如只允许awspwd数据文件中的任一用户访问awstats系统如下:

 图片 21

#   AuthName "AWStats Directory"

    AuthType  Basic

    AuthUserFile /usr/local/httpd/conf/.awspwd

    require valid-user

图片 22

图片 23

四、在web服务器实现虚拟主机

添加完成后重启httpd服务,验证用户访问授权。访问awstats系统出现如下:输入正确的用户名和密码后就可以进入系统,否则将拒绝访问!

1、基于域名

图片 24

步骤:1)首先在主配置文件named.conf下添加两个区域。如下图

图片 25

 图片 26

三、构建虚拟web主机

图片 27

基于域名:为每个虚拟主机使用不同的域名,但是对应的ip地址是相同的,例如www.zhangsan.com和www.lisi.com站点的ip地址都是192.168.137.100这是使用最为普遍的虚拟web主机类型

2)修改区域数据文件,(注:benet.com.zone是第一步提前建好的)

基于ip地址:为每个虚拟主机使用不同的域名,且各自对应的ip地址也是不一样的,使用的并不是很广泛

 图片 28

基于端口:这种方式并不使用域名,ip地址来区分不同站点的内容,而是使用了不同的tcp端口号,因此用户在浏览不同站点的时候需要指定不同的端口来访问。这种方式不常用

图片 29

本次采用,最常用的基于域名构建虚拟主机

3)为了方便测试,分别为每个虚拟web主机提供包含不同内容的首页文件,并分别编写网页测试文件。如下图:

1.设置域名映射同一个ip地址。修改hosts文件

图片 30

192.168.137.100 www.zhangsan.com
192.168.137.100 www.lisi.com

图片 31

2.建立虚拟主机存放网页的目录

5)  修改虚拟主机配置文件,如下图:

[root@yankerp ~]# mkdir -p /usr/local/httpd/htdocs/zhangsan

 图片 32

[root@yankerp ~]# mkdir -p /usr/local/httpd/htdocs/lisi

图片 33

[root@yankerp ~]# echo "This is a zhangsan" >> /usr/local/httpd/htdocs/zhangsan/index.html

图片 34

[root@yankerp ~]# echo "This is a lisi" >> /usr/local/httpd/htdocs/lisi/index.html

6)  加载独立的配置文件 进入/usr/local/httpd/conf/httpd.conf,如下图:

3. 在httpd.conf中将附加配置文件httpd-vhosts.conf包含进来,接着在httpd-vhosts.conf中写入如下配置:

 图片 35

#NameVirtualHost *:80

#zhangsan虚拟站点区域2017.11.5



    ServerAdmin ywyankerp@163.com

    DocumentRoot "/usr/local/httpd/htdocs/zhangsan"

    ServerName www.zhangsan.com

    ErrorLog "logs/dummy-host.example.com-error_log"

    CustomLog "logs/dummy-host.example.com-access_log" common





#lisi虚拟站点区域2017.11.5



    ServerAdmin ywyankerp@163.com

    DocumentRoot "/usr/local/httpd/htdocs/lisi"

    ServerName www.lisi.com

    ErrorLog "logs/dummy-host2.example.com-error_log"

    CustomLog "logs/dummy-host2.example.com-access_log" common

7)重启apache服务,测试。

图片 36  

 图片 37

访问不同的域名测试:

图片 38

图片 39

图片 40

2、  基于IP

步骤:

1)修改虚拟主机配置文件 /usr/local/httpd/conf/extra/httpd-vhosts.conf并添加一个ip地址。如下图:

图片 41

图片 42

2)重启apache服务测试,

图片 43

图片 44

图片 45

3、 基于端口

步骤:

1)修改虚拟主机配置文件 /usr/local/httpd/conf/extra/httpd-vhosts.conf如下图:

 图片 46

2)进入主配置文件 /usr/local/httpd/conf/httpd.conf  添加监听端口。

 图片 47

3)重启apache服务,测试。

 图片 48

图片 49

文章参考微信公众号:L宝宝聊IT

TAG标签: 韦德娱乐1946
版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于韦德国际1946官网,转载请注明出处:Apache的虚拟主机配置计划,httpd虚拟主机