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

11.16/11.17 Apache默认虚拟主机

定义

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

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

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

修改Windows系统上的hosts

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

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

打开虚拟主机配置文件

编辑虚拟主机配置文件

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

# Virtual Hosts

...

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

ServerAdmin [email protected]//管理员邮箱,可不填写

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 [email protected]//管理员邮箱,可不填写

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>

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

重新加载服务

/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没解析 检查

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

11.18 Apache用户认证

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

修改虚拟主机配置文件

[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 域名跳转

修改虚拟主机配置文件

<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规则,当满足上面的条件时,这条规则才会执行

</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

11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间

11.22 访问日志不记录静态文件

11.23 访问日志切割

11.24 静态元素过期时间

扩展 

apache日志记录代理IP以及真实客户端IP  http://ask.apelearn.com/question/960

apache只记录指定URI的日志  http://ask.apelearn.com/question/981

apache日志记录客户端请求的域名  http://ask.apelearn.com/question/1037

apache 日志切割问题  http://ask.apelearn.com/question/566

11.22 访问日志不记录静态文件

网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 ,否则会使日志文件过于庞大,占用较多的磁盘空间。

编辑虚拟主机配置文件

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

ErrorLog "logs/def.com-error_log"

SetEnvIf Request_URI ".*\.gif$" tupian //将图片格式设置为标签tupian

SetEnvIf Request_URI ".*\.jpg$" tupian //将图片格式设置为标签tupian

SetEnvIf Request_URI ".*\.png$" tupian //将图片格式设置为标签tupian

SetEnvIf Request_URI ".*\.bmp$" tupian //将图片格式设置为标签tupian

SetEnvIf Request_URI ".*\.swf$" tupian //将图片格式设置为标签tupian

SetEnvIf Request_URI ".*\.js$" tupian //将图片格式设置为标签tupian

SetEnvIf Request_URI ".*\.css$" tupian //将图片格式设置为标签tupian

CustomLog "logs/def.com-access_log" combined env=!tupian //访问日志记录排除带有标签为tupain的内容

效果测试

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

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL /ceshi.jpg was not found on this server.</p></body></html>

[root@linux-5 ~]# tail /usr/local/apache2.4/logs/def.com-access_log

192.168.88.5 - - [30/May/2018:12:00:16 +0800] "GET HTTP://def.com/ HTTP/1.1" 401 381

192.168.88.5 - lem [30/May/2018:12:05:41 +0800] "GET HTTP://def.com/ HTTP/1.1" 200 7

192.168.88.5 - lem [30/May/2018:12:19:28 +0800] "GET HTTP://def.com/admin.php HTTP/1.1" 200 5

192.168.88.5 - - [30/May/2018:12:19:54 +0800] "GET HTTP://def.com/ HTTP/1.1" 200 7

192.168.88.5 - - [30/May/2018:12:26:27 +0800] "GET HTTP://def.com/admin.php HTTP/1.1" 401 381

192.168.88.5 - - [30/May/2018:13:28:45 +0800] "HEAD HTTP://www.def.com/ HTTP/1.1" 301 -

添加过滤脚本后,对于静态文件没有日志产生。

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

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

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL /ceshi.jpg was not found on this server.</p></body></html>

[root@linux-5 ~]# tail /usr/local/apache2.4/logs/def.com-access_log

192.168.88.5 - - [30/May/2018:12:00:16 +0800] "GET HTTP://def.com/ HTTP/1.1" 401 381

192.168.88.5 - lem [30/May/2018:12:05:41 +0800] "GET HTTP://def.com/ HTTP/1.1" 200 7

192.168.88.5 - lem [30/May/2018:12:19:28 +0800] "GET HTTP://def.com/admin.php HTTP/1.1" 200 5

192.168.88.5 - - [30/May/2018:12:19:54 +0800] "GET HTTP://def.com/ HTTP/1.1" 200 7

192.168.88.5 - - [30/May/2018:12:26:27 +0800] "GET HTTP://def.com/admin.php HTTP/1.1" 401 381

192.168.88.5 - - [30/May/2018:13:28:45 +0800] "HEAD HTTP://www.def.com/ HTTP/1.1" 301 -

192.168.88.5 - - [31/May/2018:16:09:36 +0800] "GET HTTP://def.com/ceshi.jpg HTTP/1.1" 404 207 "-" "curl/7.29.0"

删除过滤脚本后,日志记录了有关静态文件的日志。

11.23 访问日志切割

日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 。并且日志切割后可以用特定的格式进行命名,更加方便查找与管理。

修改虚拟主机配置文件

CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.log 86400" combined env=!img

|/usr/local/apache2.4/bin/rotatelogs 是Apache服务自带的日志切割工具

-l选项是使切割工具的时间与本机同步,否则会按照默认时区(UTC 美国)进行切割,中国是CST

logs/123.com-access_%Y%m%d.log 86400 是日志文件的存储路径格式

%Y代表年份

%m代表月份

%d代表日期

86400 是秒钟,换算后是24小时,代表日志文件每24小时切割一次

效果测试

[root@linux-5 ~]# curl -x 192.168.88.5:80 def.comdef.com[root@linux-5 ~]# ls /usr/local/apache2.4/logs/

abc.com-access_log access_log def.com-access_log error_log

abc.com-error_logdef.com-access_20180531.log def.com-error_log httpd.pid

修改完配置文件后,发现生成新的访问日志时,日志目录中生成了新的日志文件。

想要保持日志文件对于磁盘空间的合理使用,还需在系统中针对访问日志增加任务计划,周期性的删除陈旧的访问日志,以保证访问日志对磁盘空间的合理使用。

11.24 静态元素过期时间

浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了,同样可以设置这些静态文件的过期时间,超出后会重新下载。

修改虚拟主机配置文件

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

<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 text/css "now plus 2 hour"

ExpiresByType application/x-javascript "now plus 2 hours"

ExpiresByType application/javascript "now plus 2 hours"

ExpiresByType application/x-shockwave-flash "now plus 2 hours"

ExpiresDefault "now plus 0 min"</IfModule>

开启expires_module模块

测试结果

出现Cache-Control,说明配置已经生效。

猜你喜欢

转载自blog.csdn.net/weixin_42213920/article/details/82595491