002_Apache 虚拟主机配置

Apache 虚拟主机配置

1. Apache用户认证

将网站中的文件夹设置成需要账户、密码访问的方式;如访问"www.chenyu.com/abc/12.txt"将abc文件夹内容设置成需要使用账户密码访问的方式;

1.1 创建路径、文件

创建abc/12.txt文件夹和内容

[root@CentOS-1 www]# mkdir abc
[root@CentOS-1 www]# cd abc
[root@CentOS-1 abc]# ls -a
.  ..
[root@CentOS-1 abc]# cp /etc/passwd ./12.txt
[root@CentOS-1 abc]# ls -a
.  ..  12.txt

1.2 设置虚拟主机配置文件

[root@CentOS-1 abc]#vim /usr/local/apache/conf/extra/httpd-vhosts.conf   //虚拟主机配置文件
#### 添加相关配置参数内容
<VirtualHost *:80>
    #ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/data/www"
    ServerName www.chenyue.com
    ServerAlias www.123qwe.com
    #ErrorLog "logs/dummy-host.example.com-error_log"
    #CustomLog "logs/dummy-host.example.com-access_log" common
    <Directory /data/www/abc>             //需要设置的文件夹路径,此项Directory内容为添加的内容
        Allowoverride AuthConfig
        AuthName "自定义的"              //密码提示
        AuthType Basic
        AuthUserFile /data/.htpasswd       //存放用户名和密码的文件位置
        require valid-user
    </Directory>
</VirtualHost>

1.3 Apache 扩展

将apache配置命令/usr/local/apache/bin/apachectl缩写成apachectl

[root@CentOS-1 abc]# vim /etc/profile.d/path.sh
#!/bin/bash
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/apache/bin
[root@CentOS-1 abc]# !source
source /etc/profile.d/path.sh

1.4 创建文件夹访问的用户、密码文件

[root@CentOS-1 abc]# htpasswd -c /data/.htpasswd user1      //创建用户user1
New password:                                               //创建密码
Re-type new password:                                       //确认密码
Adding password for user user1
[root@CentOS-1 abc]# cat /data/.htpasswd
user1:$apr1$FM4Db9bq$dEpnyenuZeDqG1vdxO9Hm.                //加密后的密码

#### 创建第二个用户的话,不用-c
[root@CentOS-1 abc]# htpasswd /data/.htpasswd user2    //然后根据提示输入密码即可,-c 会替换掉user1的文件的
New password:                                           //创建用户user2 密码
Re-type new password: 
Adding password for user user2                          //确认用户密码
[root@CentOS-1 abc]# apachectl -t                       //查看配置是否有错
Syntax OK
[root@CentOS-1 abc]# apachectl graceful                //重新加载apache配置

2. 设置默认虚拟主机

设置默认虚拟主机文件为空后,使用IP或其他 未定义的域名将会无法访问,只有使用定义的域名访问才可以的

[root@CentOS-1 ~]# mkdir /tmp/123
[root@CentOS-1 ~]# chmod 600 /tmp/123
[root@CentOS-1 ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf
#### 在虚拟主机配置文件前,添加个不存在的虚拟主机;第一个主机虚拟主机为默认的。
<VirtualHost *:80>
    DocumentRoot "/tmp/123"
    ServerName 111.com
</VirtualHost>
#### 检查配置、重新启动Apache
[root@CentOS-1 ~]# apachectl -t
Syntax OK
[root@CentOS-1 htdocs]# apachectl restart

3. 域名301跳转

Pr 权重
修改配置虚拟主机中的配置文件,添加rewrite_module (shared)配置参数,实现301跳转

[root@CentOS-1 ~]# apachectl -M
 rewrite_module (shared)                   //调用这个配置模块实现301跳转
[root@CentOS-1 ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ServerName www.chenyue.com
    DocumentRoot "/data/www"
    ServerAlias www.123qwe.com
    #ErrorLog "logs/dummy-host.example.com-error_log"
    #CustomLog "logs/dummy-host.example.com-access_log" common
    <IfModule mod_rewrite.c>                                      //由此配置文件实现跳转;
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.chenyue.com$ [OR]           //OR 是“或者”的意思,没有这个OR 是指“并且”;
        RewriteCond %{HTTP_HOST} ^www.chenyue.com$ 
        RewriteRule ^/(.*)$ http://www.123qwe.com$1 [R=301,L]    //^开始 R=301 指跳转类型,L 指结束;
    </IfModule>
    <Directory /data/www/abc>
        Allowoverride AuthConfig
        AuthName "自定义的"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
    </Directory>
</VirtualHost>
#### 检查配置、重新启动Apache
[root@CentOS-1 ~]# apachectl -t
Syntax OK
[root@CentOS-1 htdocs]# apachectl restart

跳转类型: 301永久重定向,对浏览器、搜索引擎是比较友好的,302临时跳转;

4. Apache 日志

4.1 预置日志格式

主配置文件中预置日志格式有combined、common两种,具体样式如下:

[root@CentOS-1 ~]# vim /usr/local/apache/conf/httpd.conf
···
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
···

%u 用户 %t 时间 %r 动作 %{Referer}i\被访问的地址 %{User-Agent}i\浏览器的标识`

4.2 开启日志、并设置日志类型

开启ErrorLog 错误日志和CustomLog 访问日志 并将CustomLog日志设置成combined类型

[root@CentOS-1 ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/www"
    ServerName www.chenyue.com
    ServerAlias www.123qwe.com
    #ErrorLog "logs/dummy-host.example.com-error_log"            // 错误日志
    #CustomLog "logs/dummy-host.example.com-access_log" common   // 访问日志
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.123qwe.com$ [OR]
        RewriteCond %{HTTP_HOST} ^www.cy-a.com$
        RewriteRule ^(.*)$ http://www.chenyue.com$1 [R=301,L]
    </IfModule>
    <Directory /data/www/abc>
        Allowoverride AuthConfig
        AuthName "自定义的"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
    </Directory>
</VirtualHost> 
[root@CentOS-1 ~]# apachectl -t
Syntax OK
[root@CentOS-1 ~]# apachectl graceful
[root@CentOS-1 ~]# cd /usr/local/apache/logs
[root@CentOS-1 logs]# ls -a
.  ..  access_log  chenyue.com-error_log  chneyua.com-access_log  error_log  httpd.pid
[root@CentOS-1 logs]# 

4.3 tail 查看增加的内容

[root@CentOS-1 logs]# tail chenyue.com-access_log |grep -v static     //不显示static内容的条目
[root@CentOS-1 logs]# wc -l chenyue.com-access_log                    //查看文件中有多少条内容
174 chenyue.com-access_log

4.4 切割日志文件

ErrorLog "logs/chenyue.com-error_log"
CustomLog "| /usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/chenyue.com-access_%Y%m%d_log 86400" combine

| /usr/local/apache/bin/rotatelogs -l 切割日志的工具,后面日志的路径;将相对路径改成绝对路径; 并添加日期%Y%m%d 、 86400 是时间(秒为单位),这里指一天切割一次。

4.4 不记录指定文件类型的日志

虚拟主机文件访问日志前,添加标记文件,如下:

    ErrorLog "logs/chenyue.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" image-request   //下列文件为允许的文件,最后使用 env=!image-request 否定
    SetEnvIf Request_URI ".*\.jpg$" image-request
    SetEnvIf Request_URI ".*\.png$" image-request
    SetEnvIf Request_URI ".*\.bmp$" image-request
    SetEnvIf Request_URI ".*\.swf$" image-request
    SetEnvIf Request_URI ".*\.js$" image-request
    SetEnvIf Request_URI ".*\.css$" image-request
    CustomLog "| /usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/chenyue.com-access_%Y%m%d_log 86400" combined env=!image-request 

5. Apache 配置静态缓存

5.1 虚拟主机配置文件

日志条目下增加mod_expires.c模块内容:

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/gif "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType image/css "now plus 2 hours"
    ExpiresByType application/x-javascript"now plus 1 days"
    ExpiresByType application/x-shockwave-flash "now plus 1 days"
    ExpiresDefault "now plus 0 min"
</IfModule>

5.2 验证方式

[root@CentOS-1 logs]# curl -x127.0.0.1:80 'http://www.chenyue.com/static/image/common/logo.png' -I
HTTP/1.1 200 OK
Date: Sat, 10 Dec 2016 08:31:30 GMT
Server: Apache/2.2.31 (Unix) PHP/5.5.38
Last-Modified: Tue, 31 May 2016 03:08:36 GMT
ETag: "60a69-1149-5341ab0597500"
Accept-Ranges: bytes
Content-Length: 4425
Cache-Control: max-age=86400       // max-age=86400 是缓存时间 
Expires: Sun, 11 Dec 2016 08:31:30 GMT
Content-Type: image/png

6. Apache 配置防盗链

虚拟主机中增加以下配置文件,即可开启防盗链;防止他人调用自己网站的图片等。(可以避免网站带宽过多被他人调用资源占用)

SetEnvIfNoCase Referer "^http://.*\.chenyue\.com" local_ref  // '\'脱异符号,^使用的是正则表达式
SetEnvIfNoCase Referer "^.*\chenyue\.com" local_ref     //允许调用的链接白名单,自己的域名一定要添加上
#SetEnvIfNoCase Referer "^$" local_ref
   <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">      //限制调用的文件类型
        Order Allow,Deny
        Allow from env=local_ref      //满足上面条件的允许
        #Deny from all     //全部禁用,网站本身也失效,这里关闭
    </filesmatch>

7. Apache 访问控制

7.1 配置文件

主配置文件中获取模板,在虚拟主机配置文件中添加以下配置参数(Allow允许的、Deny不允许的)

  <Directory "/data/www">
     AllowOverride None
     Options None
     Order allow,deny     //条件顺序:先 allow 、再 deny ,顺序可颠倒
     Allow from all       //允许所有的条件通过
     deny from 127.0.0.1  //限制127.0.0.1 的Ip
  </Directory>

7.2 测试验证

[root@CentOS-1 ~]# curl -x127.0.0.1:80 -I www.chenyue.com
HTTP/1.1 403 Forbidden                 // 403 说明配置已经生效了、301 跳转 正常、200 正常
Date: Sat, 10 Dec 2016 16:03:13 GMT
Server: Apache/2.2.31 (Unix) PHP/5.5.38
Content-Type: text/html; charset=iso-8859-1

8. 白名单(Apache 访问控制)

可以设置网站的相关管理界面等,固定IP访问,提高安全性;

8.1 配置文件

添加以下配置文件,访问有admin字符的链接,只有127.0.0.1的Ip允许访问

<FilesMatch "^(.*)admin(.*)">
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1   //白名单中允许的IP
</FilesMatch>

8.2 测试验证

测试的是Discuz论坛的管理设置界面访问

[root@CentOS-1 ~]# curl -x192.168.0.106:80 -I http://www.chenyue.com/admin.php
HTTP/1.1 403 Forbidden
Date: Sat, 10 Dec 2016 16:16:58 GMT
Server: Apache/2.2.31 (Unix) PHP/5.5.38
Content-Type: text/html; charset=iso-8859-1

[root@CentOS-1 ~]# curl -x127.0.0.1:80 -I http://www.chenyue.com/admin.php
HTTP/1.1 200 OK
Date: Sat, 10 Dec 2016 16:19:31 GMT
Server: Apache/2.2.31 (Unix) PHP/5.5.38
···

9. Apache 安全策略

9.1 Apache 禁止解析php

上传到服务器文件夹中的文件(如:论坛上传的图片等) 可能存在安全隐患(上传的文件中包含木马病毒等,可以获取服务器相关配置等),所以需要设置相关文件夹的php禁止解析等限制;

虚拟主机中添加以下配置文件,关闭php解析和控制访问路径

<Directory "/data/www/data">    //需要配置禁止解析的文件夹路径
    php_admin_flag engine off   //关闭php解析
    <FilesMatch "^(.*)php">     //关闭data文件夹下的文件访问
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1    //这里是允许访问的IP 但是无法解析,测试使用,正常可以删除
    </FilesMatch>
</Directory>

9.2 Apache 禁止指定user_agent

user_agent指的是用户访问的浏览类型等(正常体现在访问日志中);这里禁用指定user_agent可以用作禁止部分搜索引擎的爬虫访问,导致的带宽浪费,如禁用 360、搜狗、有道等搜索引擎;

在虚拟主机文件中添加下列配置内容即可

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.123qwe.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www.cy-a.com$
    RewriteRule ^(.*)$ http://www.chenyue.com$1 [R=301,L]
    RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR]  //这里添加user_agent 标识
    RewriteCond %{HTTP_USER_AGENT} ^.*chrome* [NC]
    RewriteRule ^.* - [F]                             //将符合标识的访问终止(拒绝)
</IfModule>

9.3 Apache通过rewrite限制某个目录

禁止访问网站域名链接下的某个文件夹,如某个文件夹中存放着非常重要的缓存文件,不愿意让别人访问;
虚拟主机IfModule mod_rewrite.c配置文件中添加以下配置内容;如:条件^.*/tmp/.* [NC] 识别到tmp相关字符的文件夹,直接终止终止跳转;访问网站下的/tmp文件夹内容直接会403报错

RewriteCond %{REQUEST_URI} ^.*/tmp/.* [NC]
RewriteRule ^.* - [F]
上一篇:002


下一篇:002.redis 持久化机对于生产环境中的灾难恢复的意义