更新11.16/11.17 A默认虚拟主机11.18 Apache用户认证 11.19/11.20 域名11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间

11.16/11.17 Apache默认虚拟主机

一台服务器可以访问多个网站,每个网站都是一个虚拟主机

概念:域名(主机名)、DNS、解析域名、hosts

任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

vim /usr/local/apache2.4/conf/httpd.conf //搜索httpd-vhost,去掉#

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //改为如下

<VirtualHost *:80>

    ServerAdmin admin@aminglinux.com

    DocumentRoot "/data/wwwroot/aming.com"

    ServerName aming.com

    ServerAlias www.aming.com

    ErrorLog "logs/aming.com-error_log"

    CustomLog "logs/aming.com-access_log" common

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

</VirtualHost>

/usr/local/apache2.4/bin/apachectl –t

/usr/local/apache2.4/bin/apachectl graceful

定义

不同的主机名解析到不同的IP地址,提供虚拟主机服务的机器上同时设置有这些IP地址。服务器根据用户请求的目的IP地址来判定用户请求的是哪个虚拟主机的服务,从而进一步的处理。(默认虚拟主机只能定义单一域名,且为使用该服务器IP所跳转的唯一Apache站点,所有域名均会跳转至唯一定义的DocumentRoot下的网站根目录,一个配置文件只能定义一个Severname)

一台服务器可以访问多个网站,每个网站都是一个虚拟主机

任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

修改Windows系统上的hosts

路径C:\Windows\System32\drivers\etc\hosts

由于默认虚拟主机只能使所有域名指向同一网站根目录,不易于管理,因此可以打开虚拟主机配置文件,使得不同域名可以跳转至不同网站。

打开虚拟主机配置文件 打开去#

编辑虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

[root@linux-5 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 

# Virtual Hosts

...

<VirtualHost *:80> //可定义多个虚拟主机(当前第一个)

ServerAdmin webmaster@dummy-host.example.com//管理员邮箱,可不填写

DocumentRoot "/data/wwwroot/abc.com" //网站的根目录

ServerName abc.com//网站(服务器)名称,唯一

ServerAlias www.abc.com www.123.com //网站(服务器)别名,可多个

ErrorLog "logs/abc.com-error_log" //错误日志

CustomLog "logs/abc.com-access_log" common //访问日志

</VirtualHost>

 

<VirtualHost *:80> //可定义多个虚拟主机(当前第二个)

ServerAdmin webmaster@dummy-host2.example.com//管理员邮箱,可不填写

DocumentRoot "/data/wwwroot/def.com" //网站的根目录

ServerName def.com//网站(服务器)名称,唯一

ServerAlias www.def.com www.456.com //网站(服务器)别名,可多个

ErrorLog "logs/def.com-error_log" //错误日志

CustomLog "logs/def.com-access_log" common //访问日志

</VirtualHost>

注:一旦虚拟主机配置文件生效,则默认主机配置的文件定义的内容会失效

<VirtualHost *:80>    ##可定义多个虚拟主机 当前第一个                  

    ServerAdmin webmaster@dummy-host.example.com                   ##管理员邮箱,可不写

    DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"     ##  网站根目录

    ServerName dummy-host.example.com                         ##网站名称                  

    ServerAlias www.dummy-host.example.com                   ##别名

    ErrorLog "logs/dummy-host.example.com-error_log"           ##错误日志       

    CustomLog "logs/dummy-host.example.com-access_log" common      ##访问日志

</VirtualHost>

修改后

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/abc.com"

    ServerName abc.com

    ServerAlias www.abc.comwww.123.com

    ErrorLog "logs/abc.com-error_log"

    CustomLog "logs/abc.com-access_log" common

</VirtualHost>

 

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName 111.com

    ErrorLog "logs/111.example.com-error_log"

    CustomLog "logs/111.com-access_log" common

</VirtualHost>

</VirtualHost>

mkdir -p /data/wwwroot/

mkdir /data/wwwroot/abc.com

 mkdir /data/wwwroot/111.com

vim /data/wwwroot/abc.com/index.php

<?php

echo 'hello wordabc';

?>

vim /data/wwwroot/111.com/index.php

<?php

echo 'hello word111';

?>

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

vi /etc/hosts 

172.16.90.41 www.abc.com

172.16.90.41 111.com

curl -x172.16.90.41:80 abc.com   虚拟主机里面的第一个虚拟主机他就是默认虚拟主机无论什么IP只要解析到这个IP上都会访问这个网站,这个网站对应的虚拟主机

重新加载服务

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

在虚拟主机配置文件中不能在代码后添加注释,否则会引起报错

 

创建相应的网站目录

[root@linux-5 ~]# mkdir /data/wwwroot/[root@linux-5 ~]# mkdir /data/wwwroot/abc.com[root@linux-5 ~]# mkdir /data/wwwroot/def.com

创建相应目录下的网站文件

[root@linux-5 ~]# vim /data/wwwroot/abc.com/index.php<?phpecho "abc.com";

[root@linux-5 ~]# vim /data/wwwroot/def.com/index.php<?phpecho "def.com";

测试网站效果

curl -x //发送网络请求,-x选项为网络请求增加代理,相当于hosts的作用

[root@linux-5 ~]# curl -x 192.168.88.5:80 abc.comabc.com[root@linux-5 ~]#

[root@linux-5 ~]# curl -x 192.168.88.5:80 def.comdef.com[root@linux-5 ~]#

在测试过程中使用的是两个虚拟主机,则第一个虚拟主机则是Apache服务的默认虚拟主机,无论访问哪个域名(其他虚拟主机定义的域名除外),只要指向了服务器的IP地址,都会跳转至默认虚拟主机。我们实验所使用的Linux虚拟机,在其上安装的Apache服务的主配置文件,相当于实体主机,也是默认主机,只能指定一个域名,访问单一目录下的文件。

 

vim /usr/local/apache2.4/conf/httpd.conf

PHP7 加#

153 LoadModule php5_module        modules/libphp5.so

154 #LoadModule php7_module        modules/libphp7.so

windows  安装 telnet

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

 

Require all granted

 

 

PHP没解析 检查 

vim /usr/local/apache2.4/conf/httpd.conf

1 /usr/local/apache2.4/bin/apachectl -M

ls /usr/local/apache2.4/modules/libphp5.so  差看有没有这个文件

 

 

3检查 

 

4检查

 

5 检查

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

 

https://jingyan.baidu.com/article/92255446a3a11d851648f48e.html  WIN10 改hosts后缀名  另存为桌面,然后把这个删掉,桌面的丢进去。原文件可以复制到另一个地方备份下。

11.16/11.17 Apache默认虚拟主机

一台服务器可以访问多个网站,每个网站都是一个虚拟主机

概念:域名(主机名)、DNS、解析域名、hosts

任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

vim /usr/local/apache2.4/conf/httpd.conf //搜索httpd-vhost,去掉#

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //改为如下

<VirtualHost *:80>

    ServerAdmin admin@aminglinux.com

    DocumentRoot "/data/wwwroot/aming.com"

    ServerName aming.com

    ServerAlias www.aming.com

    ErrorLog "logs/aming.com-error_log"

    CustomLog "logs/aming.com-access_log" common

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

</VirtualHost>

/usr/local/apache2.4/bin/apachectl –t

/usr/local/apache2.4/bin/apachectl graceful

定义

不同的主机名解析到不同的IP地址,提供虚拟主机服务的机器上同时设置有这些IP地址。服务器根据用户请求的目的IP地址来判定用户请求的是哪个虚拟主机的服务,从而进一步的处理。(默认虚拟主机只能定义单一域名,且为使用该服务器IP所跳转的唯一Apache站点,所有域名均会跳转至唯一定义的DocumentRoot下的网站根目录,一个配置文件只能定义一个Severname)

一台服务器可以访问多个网站,每个网站都是一个虚拟主机

任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

修改Windows系统上的hosts

路径C:\Windows\System32\drivers\etc\hosts

由于默认虚拟主机只能使所有域名指向同一网站根目录,不易于管理,因此可以打开虚拟主机配置文件,使得不同域名可以跳转至不同网站。

打开虚拟主机配置文件 打开去#

编辑虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

[root@linux-5 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 

# Virtual Hosts

...

<VirtualHost *:80> //可定义多个虚拟主机(当前第一个)

ServerAdmin webmaster@dummy-host.example.com//管理员邮箱,可不填写

DocumentRoot "/data/wwwroot/abc.com" //网站的根目录

ServerName abc.com//网站(服务器)名称,唯一

ServerAlias www.abc.com www.123.com //网站(服务器)别名,可多个

ErrorLog "logs/abc.com-error_log" //错误日志

CustomLog "logs/abc.com-access_log" common //访问日志

</VirtualHost>

 

<VirtualHost *:80> //可定义多个虚拟主机(当前第二个)

ServerAdmin webmaster@dummy-host2.example.com//管理员邮箱,可不填写

DocumentRoot "/data/wwwroot/def.com" //网站的根目录

ServerName def.com//网站(服务器)名称,唯一

ServerAlias www.def.com www.456.com //网站(服务器)别名,可多个

ErrorLog "logs/def.com-error_log" //错误日志

CustomLog "logs/def.com-access_log" common //访问日志

</VirtualHost>

注:一旦虚拟主机配置文件生效,则默认主机配置的文件定义的内容会失效

<VirtualHost *:80>    ##可定义多个虚拟主机 当前第一个                  

    ServerAdmin webmaster@dummy-host.example.com                   ##管理员邮箱,可不写

    DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"     ##  网站根目录

    ServerName dummy-host.example.com                         ##网站名称                  

    ServerAlias www.dummy-host.example.com                   ##别名

    ErrorLog "logs/dummy-host.example.com-error_log"           ##错误日志       

    CustomLog "logs/dummy-host.example.com-access_log" common      ##访问日志

</VirtualHost>

修改后

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/abc.com"

    ServerName abc.com

    ServerAlias www.abc.comwww.123.com

    ErrorLog "logs/abc.com-error_log"

    CustomLog "logs/abc.com-access_log" common

</VirtualHost>

 

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName 111.com

    ErrorLog "logs/111.example.com-error_log"

    CustomLog "logs/111.com-access_log" common

</VirtualHost>

</VirtualHost>

mkdir -p /data/wwwroot/

mkdir /data/wwwroot/abc.com

 mkdir /data/wwwroot/111.com

vim /data/wwwroot/abc.com/index.php

<?php

echo 'hello wordabc';

?>

vim /data/wwwroot/111.com/index.php

<?php

echo 'hello word111';

?>

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

vi /etc/hosts 

172.16.90.41 www.abc.com

172.16.90.41 111.com

curl -x172.16.90.41:80 abc.com   虚拟主机里面的第一个虚拟主机他就是默认虚拟主机无论什么IP只要解析到这个IP上都会访问这个网站,这个网站对应的虚拟主机

重新加载服务

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

在虚拟主机配置文件中不能在代码后添加注释,否则会引起报错

 

创建相应的网站目录

[root@linux-5 ~]# mkdir /data/wwwroot/[root@linux-5 ~]# mkdir /data/wwwroot/abc.com[root@linux-5 ~]# mkdir /data/wwwroot/def.com

创建相应目录下的网站文件

[root@linux-5 ~]# vim /data/wwwroot/abc.com/index.php<?phpecho "abc.com";

[root@linux-5 ~]# vim /data/wwwroot/def.com/index.php<?phpecho "def.com";

测试网站效果

curl -x //发送网络请求,-x选项为网络请求增加代理,相当于hosts的作用

[root@linux-5 ~]# curl -x 192.168.88.5:80 abc.comabc.com[root@linux-5 ~]#

[root@linux-5 ~]# curl -x 192.168.88.5:80 def.comdef.com[root@linux-5 ~]#

在测试过程中使用的是两个虚拟主机,则第一个虚拟主机则是Apache服务的默认虚拟主机,无论访问哪个域名(其他虚拟主机定义的域名除外),只要指向了服务器的IP地址,都会跳转至默认虚拟主机。我们实验所使用的Linux虚拟机,在其上安装的Apache服务的主配置文件,相当于实体主机,也是默认主机,只能指定一个域名,访问单一目录下的文件。

 

vim /usr/local/apache2.4/conf/httpd.conf

PHP7 加#

153 LoadModule php5_module        modules/libphp5.so

154 #LoadModule php7_module        modules/libphp7.so

windows  安装 telnet

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

 

Require all granted

 

 

PHP没解析 检查 

vim /usr/local/apache2.4/conf/httpd.conf

1 /usr/local/apache2.4/bin/apachectl -M

ls /usr/local/apache2.4/modules/libphp5.so  差看有没有这个文件

 

 

3检查 

 

4检查

 

5 检查

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

 

https://jingyan.baidu.com/article/92255446a3a11d851648f48e.html  WIN10 改hosts后缀名  另存为桌面,然后把这个删掉,桌面的丢进去。原文件可以复制到另一个地方备份下。

十周三次课

11.18 Apache用户认证

11.19/11.20 域名跳转

11.21 Apache访问日志

扩展 

apache虚拟主机开启php的短标签   http://ask.apelearn.com/question/5370

11.18 Apache用户认证

为增强网站的安全性,可对指定页面采用用户认证的方式进行访问

修改虚拟主机配置文件

  vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //123.com那个虚拟主机编辑成如下内容

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    <Directory /data/wwwroot/www.123.com> //指定认证的目录

        AllowOverride AuthConfig //这个相当于打开认证的开关

        AuthName "123.com user auth" //自定义认证的名字,作用不大

        AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过

        AuthUserFile /data/.htpasswd  //指定密码文件所在位置

        require valid-user //指定需要认证的用户为全部可用用户

    </Directory>

</VirtualHost>

 

#添加账户密码 aming aming 

[root@root02 111.com]# /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming

New password:     

Re-type new password:                  

Adding password for user aming 

/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd chenyun  再添加用户就不用加c 

重新加载配置-t , graceful

/usr/local/apache2.4/bin/apachectl -t

 /usr/local/apache2.4/bin/apachectl graceful

绑定hosts,浏览器测试

 

重点 几个容易错误

1 windows hosts 172.16.90.41 www.abc.comwww.123.comwww.111.com

2 linux  hosts 172.16.90.41 vi /etc/hosts 172.16.90.41 www.111.com

3 inux  hosts 172.16.90.41 vi /etc/hosts 172.16.90.41 www.111.com

配置文件是否正确

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName www.111.com

   # ServerAlias www.example.com

    <Directory /data/wwwroot/111.com>

        AllowOverride AuthConfig

        AuthName "111.com user auth"

        AuthType Basic

        AuthUserFile /data/.htpasswd

        require valid-user

    </Directory>

    ErrorLog "logs/111.example.com-error_log"

    CustomLog "logs/111.com-access_log" common

</VirtualHost>

 

 

 

curl -x127.0.0.1:80 www.111.com//状态码为401

 curl -x127.0.0.1:80 -uchenyun:chenyun www.111.com 正确直接显示hello 不正确显示401

[root@linux-5 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/def.com"

ServerName def.com

ServerAlias www.def.com www.456.com

<Directory /data/wwwroot/def.com> //指定认证的目录

AllowOverride AuthConfig //这个相当于打开认证的开关

AuthName "def.com user auth" //自定义认证的名字,作用不大

AuthType Basic //认证的类型,一般为Basic,其他类型很少用

AuthUserFile /data/.htpasswd //指定密码文件所在位置

require valid-user //指定需要认证的用户为全部可用用户

</Directory>

ErrorLog "logs/def.com-error_log"

CustomLog "logs/def.com-access_log" common

</VirtualHost>

注:实际修改时要把注释都删掉,否则配置文件可能会报错

创建用户认证所需的用户和密码

[root@linux-5 ~]# /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd lem

New password:

Re-type new password:

Adding password for user lem

[root@linux-5 ~]# cat /data/.htpasswd lem:$apr1$eajZKgW0$0nM0gJQaBPtmBbuWzRcPr.

-c为创建密码文件,-m为md5的加密方式,当需要添加其他用户时(如lem2),则不需要加-c选项。

重新加载配置

[root@linux-5 ~]# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@linux-5 ~]# /usr/local/apache2.4/bin/apachectl graceful

访问测试

[root@linux-5 ~]# curl -x 192.168.88.5:80 def.com

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>401 Unauthorized</title></head><body><h1>Unauthorized</h1><p>This server could not verify that you

are authorized to access the document

requested. Either you supplied the wrong

credentials (e.g., bad password), or your

browser doesn't understand how to supply

the credentials required.</p></body></html>

测试发现产生了401的状态码,401代表着访问的内容需要做用户认证

[root@linux-5 ~]# curl -x 192.168.88.5:80 -u lem:123456 def.comdef.com[root@linux-5 ~]#

-u选项可以使curl命令输入用户认证所需的账户和密码,输入正确的账号和密码后,访问正常。

针对单个文件进行认证

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/def.com"

ServerNamedef.com

ServerAliaswww.def.comwww.456.com

<FilesMatch admin.php> #匹配这个文件

AllowOverride AuthConfig

AuthName "def.com user auth"

AuthType Basic

AuthUserFile /data/.htpasswd

require valid-user

</FilesMatch>

ErrorLog "logs/def.com-error_log"

CustomLog "logs/def.com-access_log" common

</VirtualHost>

访问测试

admin[root@linux-5 ~]# curl -x 192.168.88.5:80 def.com

def.com

//def.com可以正常访问

[root@linux-5 ~]# curl -x 192.168.88.5:80 def.com/admin.php

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>401 Unauthorized</title></head><body><h1>Unauthorized</h1><p>This server could not verify that you

are authorized to access the document

requested. Either you supplied the wrong

credentials (e.g., bad password), or your

browser doesn't understand how to supply

the credentials required.</p></body></html>

//访问admin.php会显示401

[root@linux-5 ~]# curl -x 192.168.88.5:80 -u lem:123456 def.com/admin.php

admin

//输入正确的用户名和密码后可以正常访问admin.php

11.19/11.20 域名跳转

修改虚拟主机配置文件

 

需求,把123.com域名跳转到www.123.com,配置如下:

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    ServerAlias 123.com

    <IfModule mod_rewrite.c> //需要mod_rewrite模块支持

        RewriteEngine on  //打开rewrite功能

        RewriteCond %{HTTP_HOST} !^www.123.com$  //定义rewrite的条件,主机名(域名)不是www.123.com满足条件

        RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行

</IfModule>

</VirtualHost>

/usr/local/apache2.4/bin/apachectl -M |grep rewrite  ##查看模块有没有加载没有显示就是没有

 vim /usr/local/apache2.4/conf/httpd.conf

查找 rewrite 去#

再检查下

curl -x127.0.0.1:80 -I 123.com //态码为301

<VirtualHost *:80>

[root@linux-5 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

DocumentRoot "/data/wwwroot/def.com"

ServerName def.com

ServerAlias www.def.com www.456.com

<IfModule mod_rewrite.c> //需要mod_rewrite模块支持

RewriteEngine on //打开rewrite功能

RewriteCond %{HTTP_HOST} !^def.com$ //定义rewrite的条件,主机名(域名)不是www.123.com满足条件

RewriteRule ^/(.*)$ http://def.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,R=301 永久重定向;R=302 临时重定向 L只跳转一次

</IfModule>

ErrorLog "logs/def.com-error_log"

CustomLog "logs/def.com-access_log" common

</VirtualHost>

R=301 永久重定向;R=302 临时重定向(浏览器不友好,不会降低源域名的权重增至新域名);

L只跳转一次

检测Apache是否加载了rewrite模块

[root@linux-5 ~]# /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite

[root@linux-5 ~]# //输出为空,则说明Apache没有加载此模块//若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#

[root@linux-5 ~]# /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite

rewrite_module (shared) //再次检测,有相应输出,说明模块已加载

访问测试

[root@linux-5 ~]# curl -x 192.168.88.5:80 www.def.com -I

HTTP/1.1 301 Moved Permanently

Date: Wed, 30 May 2018 05:28:45 GMTServer: Apache/2.4.33 (Unix) PHP/5.6.32Location: http://def.com/Content-Type: text/html; charset=iso-8859-1

 

-I 选项可以不显示访问内容,显示状态码

状态码为301,说明已经跳转成功。

11.21 Apache访问日志

日志格式

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common //默认格式

%h:来源IP

%l :用户

%u:用户名密码

%t:时间

%r:行为(一般是“动作 目标网址”)

%>s:状态码

%b:大小

%{Referer}:访问目标网址前所在的网址(比如,在猿课论坛上创建一个指向本地Apache服务的网址,那么在本地Apache的访问日志上的Referer一项就会显示猿课论坛的网址)

%{User-Agent}:用户代理,就是用户通过何种方式进行访问(curl,谷歌浏览器等)

修改日志格式

[root@linux-5 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

CustomLog "logs/def.com-access_log" combined //将common改为combined

 


我改的文件

 

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/abc.com"

    ServerName abc.com

    ServerAlias www.abc.com www.123.com

    ErrorLog "logs/abc.com-error_log"

    CustomLog "logs/abc.com-access_log" common

</VirtualHost>

 

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName www.111.com

    ServerAlias www.example.com www.2111.com www.222.com

   # <Directory /data/wwwroot/111.com>

   #     AllowOverride AuthConfig

   #     AuthName "111.com user auth"

   #     AuthType Basic

   #     AuthUserFile /data/.htpasswd  

   #     require valid-user

    #</Directory>

<IfModule mod_rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_HOST} !^www.111.com$

        RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]

</IfModule>

    ErrorLog "logs/111.example.com-error_log"

    CustomLog "logs/111.com-access_log" common

</VirtualHost>

 

十周三次课

11.18 Apache用户认证

11.19/11.20 域名跳转

11.21 Apache访问日志

扩展 

apache虚拟主机开启php的短标签   http://ask.apelearn.com/question/5370

11.18 Apache用户认证

为增强网站的安全性,可对指定页面采用用户认证的方式进行访问

修改虚拟主机配置文件

  vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //123.com那个虚拟主机编辑成如下内容

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    <Directory /data/wwwroot/www.123.com> //指定认证的目录

        AllowOverride AuthConfig //这个相当于打开认证的开关

        AuthName "123.com user auth" //自定义认证的名字,作用不大

        AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过

        AuthUserFile /data/.htpasswd  //指定密码文件所在位置

        require valid-user //指定需要认证的用户为全部可用用户

    </Directory>

</VirtualHost>

 

#添加账户密码 aming aming 

[root@root02 111.com]# /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming

New password:     

Re-type new password:                  

Adding password for user aming 

/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd chenyun  再添加用户就不用加c 

重新加载配置-t , graceful

/usr/local/apache2.4/bin/apachectl -t

 /usr/local/apache2.4/bin/apachectl graceful

绑定hosts,浏览器测试

 

重点 几个容易错误

1 windows hosts 172.16.90.41 www.abc.comwww.123.comwww.111.com

2 linux  hosts 172.16.90.41 vi /etc/hosts 172.16.90.41 www.111.com

3 inux  hosts 172.16.90.41 vi /etc/hosts 172.16.90.41 www.111.com

配置文件是否正确

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName www.111.com

   # ServerAlias www.example.com

    <Directory /data/wwwroot/111.com>

        AllowOverride AuthConfig

        AuthName "111.com user auth"

        AuthType Basic

        AuthUserFile /data/.htpasswd

        require valid-user

    </Directory>

    ErrorLog "logs/111.example.com-error_log"

    CustomLog "logs/111.com-access_log" common

</VirtualHost>

 

 

 

curl -x127.0.0.1:80 www.111.com//状态码为401

 curl -x127.0.0.1:80 -uchenyun:chenyun www.111.com 正确直接显示hello 不正确显示401

[root@linux-5 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/def.com"

ServerName def.com

ServerAlias www.def.com www.456.com

<Directory /data/wwwroot/def.com> //指定认证的目录

AllowOverride AuthConfig //这个相当于打开认证的开关

AuthName "def.com user auth" //自定义认证的名字,作用不大

AuthType Basic //认证的类型,一般为Basic,其他类型很少用

AuthUserFile /data/.htpasswd //指定密码文件所在位置

require valid-user //指定需要认证的用户为全部可用用户

</Directory>

ErrorLog "logs/def.com-error_log"

CustomLog "logs/def.com-access_log" common

</VirtualHost>

注:实际修改时要把注释都删掉,否则配置文件可能会报错

创建用户认证所需的用户和密码

[root@linux-5 ~]# /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd lem

New password:

Re-type new password:

Adding password for user lem

[root@linux-5 ~]# cat /data/.htpasswd lem:$apr1$eajZKgW0$0nM0gJQaBPtmBbuWzRcPr.

-c为创建密码文件,-m为md5的加密方式,当需要添加其他用户时(如lem2),则不需要加-c选项。

重新加载配置

[root@linux-5 ~]# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@linux-5 ~]# /usr/local/apache2.4/bin/apachectl graceful

访问测试

[root@linux-5 ~]# curl -x 192.168.88.5:80 def.com

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>401 Unauthorized</title></head><body><h1>Unauthorized</h1><p>This server could not verify that you

are authorized to access the document

requested. Either you supplied the wrong

credentials (e.g., bad password), or your

browser doesn't understand how to supply

the credentials required.</p></body></html>

测试发现产生了401的状态码,401代表着访问的内容需要做用户认证

[root@linux-5 ~]# curl -x 192.168.88.5:80 -u lem:123456 def.comdef.com[root@linux-5 ~]#

-u选项可以使curl命令输入用户认证所需的账户和密码,输入正确的账号和密码后,访问正常。

针对单个文件进行认证

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/def.com"

ServerNamedef.com

ServerAliaswww.def.comwww.456.com

<FilesMatch admin.php> #匹配这个文件

AllowOverride AuthConfig

AuthName "def.com user auth"

AuthType Basic

AuthUserFile /data/.htpasswd

require valid-user

</FilesMatch>

ErrorLog "logs/def.com-error_log"

CustomLog "logs/def.com-access_log" common

</VirtualHost>

访问测试

admin[root@linux-5 ~]# curl -x 192.168.88.5:80 def.com

def.com

//def.com可以正常访问

[root@linux-5 ~]# curl -x 192.168.88.5:80 def.com/admin.php

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>401 Unauthorized</title></head><body><h1>Unauthorized</h1><p>This server could not verify that you

are authorized to access the document

requested. Either you supplied the wrong

credentials (e.g., bad password), or your

browser doesn't understand how to supply

the credentials required.</p></body></html>

//访问admin.php会显示401

[root@linux-5 ~]# curl -x 192.168.88.5:80 -u lem:123456 def.com/admin.php

admin

//输入正确的用户名和密码后可以正常访问admin.php

11.19/11.20 域名跳转

修改虚拟主机配置文件

 

需求,把123.com域名跳转到www.123.com,配置如下:

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/www.123.com"

    ServerName www.123.com

    ServerAlias 123.com

    <IfModule mod_rewrite.c> //需要mod_rewrite模块支持

        RewriteEngine on  //打开rewrite功能

        RewriteCond %{HTTP_HOST} !^www.123.com$  //定义rewrite的条件,主机名(域名)不是www.123.com满足条件

        RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行

</IfModule>

</VirtualHost>

/usr/local/apache2.4/bin/apachectl -M |grep rewrite  ##查看模块有没有加载没有显示就是没有

 vim /usr/local/apache2.4/conf/httpd.conf

查找 rewrite 去#

再检查下

curl -x127.0.0.1:80 -I 123.com //态码为301

<VirtualHost *:80>

[root@linux-5 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

DocumentRoot "/data/wwwroot/def.com"

ServerName def.com

ServerAlias www.def.com www.456.com

<IfModule mod_rewrite.c> //需要mod_rewrite模块支持

RewriteEngine on //打开rewrite功能

RewriteCond %{HTTP_HOST} !^def.com$ //定义rewrite的条件,主机名(域名)不是www.123.com满足条件

RewriteRule ^/(.*)$ http://def.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,R=301 永久重定向;R=302 临时重定向 L只跳转一次

</IfModule>

ErrorLog "logs/def.com-error_log"

CustomLog "logs/def.com-access_log" common

</VirtualHost>

R=301 永久重定向;R=302 临时重定向(浏览器不友好,不会降低源域名的权重增至新域名);

L只跳转一次

检测Apache是否加载了rewrite模块

[root@linux-5 ~]# /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite

[root@linux-5 ~]# //输出为空,则说明Apache没有加载此模块//若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#

[root@linux-5 ~]# /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite

rewrite_module (shared) //再次检测,有相应输出,说明模块已加载

访问测试

[root@linux-5 ~]# curl -x 192.168.88.5:80 www.def.com -I

HTTP/1.1 301 Moved Permanently

Date: Wed, 30 May 2018 05:28:45 GMTServer: Apache/2.4.33 (Unix) PHP/5.6.32Location: http://def.com/Content-Type: text/html; charset=iso-8859-1

 

-I 选项可以不显示访问内容,显示状态码

状态码为301,说明已经跳转成功。

11.21 Apache访问日志

日志格式

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common //默认格式

%h:来源IP

%l :用户

%u:用户名密码

%t:时间

%r:行为(一般是“动作 目标网址”)

%>s:状态码

%b:大小

%{Referer}:访问目标网址前所在的网址(比如,在猿课论坛上创建一个指向本地Apache服务的网址,那么在本地Apache的访问日志上的Referer一项就会显示猿课论坛的网址)

%{User-Agent}:用户代理,就是用户通过何种方式进行访问(curl,谷歌浏览器等)

修改日志格式

[root@linux-5 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

CustomLog "logs/def.com-access_log" combined //将common改为combined

 


我改的文件

 

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/abc.com"

    ServerName abc.com

    ServerAlias www.abc.com www.123.com

    ErrorLog "logs/abc.com-error_log"

    CustomLog "logs/abc.com-access_log" common

</VirtualHost>

 

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName www.111.com

    ServerAlias www.example.com www.2111.com www.222.com

   # <Directory /data/wwwroot/111.com>

   #     AllowOverride AuthConfig

   #     AuthName "111.com user auth"

   #     AuthType Basic

   #     AuthUserFile /data/.htpasswd  

   #     require valid-user

    #</Directory>

<IfModule mod_rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_HOST} !^www.111.com$

        RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]

</IfModule>

    ErrorLog "logs/111.example.com-error_log"

    CustomLog "logs/111.com-access_log" common

</VirtualHost>

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值