httpd的默认虚拟主机
一台服务器可以访问多个网站,每个网站都是一个虚拟主机
概念:域名(主机名)、DNS、解析域名、hosts
任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
首先我们修改主配置文件,搜索httpd-vhost,去掉注释
[root@localhost conf]# vi httpd.conf
然后我们来修改vhosts这个配置文件,我们先来备份一下这个文件
[root@localhost extra]# cp httpd-vhosts.conf httpd-vhosts.conf-bak
然后修改这个配置文件(根据个人需要进行修改)
[root@localhost extra]# vi httpd-vhosts.conf
ServerAdmin:用户地址
DocumentRoot:网站的根目录
ServerName:域名
ServerAlias:网站的别名
ErrorLog:日志
CustomLog:日志
我们现在到apache2.4下来创建一个docs目录切换进去再创建和我们网站名称一样的目录
在两个目录分别创建index.html文件,输入一些测试内容
接下来我们重启一下apache服务来测试一下能不能访问到我们刚才配置的这些网页能不能访问到
验证成功
我们自己做的时候也可以做成php文件,也可以正常解析
httpd的用户认证
用户认证用来对某些网页进行访问控制,当用户访问这些页面的时候需要输入用户名和密码进行认证才能进行访问。现在只针对特定用户网页使用,一般使用较少
<Directory /data/wwwroot/testdomain.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "testdomain.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
现在我们只针对wyc.com这个网站来做,将其他的网站注释掉
[root@localhost local]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
然后在这个网站上增加需要的配置段
现在我们创建密码文件,指定用户与密码
[root@localhost extra]# /usr/local/apache2.4/bin/htpasswd -cm /usr/local/apache2.4/docs/.htpasswd wyc
-c:创建一个用户
-m:为用户加密的形式为MD5
/usr/local/apache2.4/docs/.htpasswd wyc为密码文件
测试配置是否正确
[root@localhost extra]# curl -xlocalhost:80 -u wyc:123 wyc.com -I
// -u 输入用户名和密码
现在我们通过网页进行访问,先修改本机的hosts文件
文件位置C:\Windows\System32\drivers\etc
在文件中加入192.168.100.11 wyc.com www.wyc.com
输入用户名和密码访问成功
域名跳转
修改配置文件
[root@localhost extra]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<IfModule mod_rewrite.c> //-需要mod_ _rewrite模块支持
RewriteEngine on // 打开rewrite功能
RewriteCond %{HTTP_HOST} !^wyc.com$ //定义rewrite的条件,当主机名不是wyc.com时满足条件
RewriteRule ^/(.*)$ http://wyc.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条才会执行
</IfModule>
如果我访问的网址站不是以wyc开头网址,这些网址一律会跳转到wyc.com上面来
[R=301,L] //表示返回的状态码为301
加载rewrite模块
[root@localhost extra]# vi /usr/local/apache2.4/conf/httpd.conf
删除rewrite这行前面的注释,激活模块
重新加载
[root@localhost www.wyc.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@localhost www.wyc.com]# /usr/local/apache2.4/bin/apachectl graceful
然后查看下是否有rewrite模块
[root@localhost extra]# /usr/local/apache2.4/bin/apachectl -M | grep rewrite
加载成功
现在我们来测试跳转是否成功
[root@localhost extra]# curl -xlocalhost:80 123wyc.com -I
成功跳转到http://wyc.com/,返回的状态码为301
配置apache的访问日志
# /usr/local/apache2.4/logs这个目录是默认的存放日志文件的目录
在Apache的主配置为文件查看日志的两种类型及显示格式
[root@localhost logs]# vi /usr/local/apache2.4/conf/httpd.conf
Common 格式
%h //host访问的来源ip地址
%l //表示登录用户 login
%u //表示用户
%t //表示登录时间
\"%r\" //表示行为
%>s //表示状态码
%b //表示发送字节数
Combined 格式
\"%{Referer}i\" //表示用户访问网页的方式比如使用curl访问和用浏览器打开
\"%{User-Agent}i\"" //表示浏览器上一层访问的地址
我们可以直接修改配置文件
[root@localhost conf]# vi extra/httpd-vhosts.conf
将common改为combined
重新加载配置文件再进行访问
[root@localhost logs]# /usr/local/apache2.4/bin/apachectl -t
[root@localhost logs]# /usr/local/apache2.4/bin/apachectl graceful
然后查看日志就可以发现成功更改了日志的格式
[root@localhost apache2.4]# cat logs/wyc.com-access_log
访问日志不记录指定类型的文件
网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录
修改配置文件
[root@localhost ~]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
将以下内容添加到虚拟主机配置文件中
SetEnvIf Request_URI ".*\.gif$" img
SetEnvIf Request_URI ".*\.jpg$" img
SetEnvIf Request_URI ".*\.png$" img
SetEnvIf Request_URI ".*\.bmp$" img
SetEnvIf Request_URI ".*\.swf$" img
SetEnvIf Request_URI ".*\.js$" img
并且添加env=!img //表示不记录img变量的文件
测试:
我们可以先将这部分内容注释掉
然后我们在/usr/local/apache2.4/docs/www.wyc.com/下创建一个images文件夹加并上传一张图片
重新加载配置文件
[root@localhost images]# /usr/local/apache2.4/bin/apachectl -t
[root@localhost images]# /usr/local/apache2.4/bin/apachectl graceful
然后使用curl命令访问一下,使用curl命令访问和使用浏览器访问效果是一样的
[root@localhost images]# curl -xlocalhost:80 www.wyc.com/images/linux.png -I
这个时候是可以正常访问的
然后我们查看一下日志,发现了访问记录
我们也可以在网页上试一下是否可以访问成功
这个时候我们可以发现日志已经跳转出来了
接下来我们修改配置文件,去掉注释重新加载配置,继续访问一遍
然后查看日志发现并没有更新
访问日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除旧的日志文件
修改主机配置文件
[root@localhost ~]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
如图进行修改
“-l” //改参数表示以当前系统时间切割
Y%m%d //定义了日志的切割命名,以时间格式命名
86400 //表示了一天24小时的秒数
修改完之后重新加载配置文件
然后我们在使用curl命令访问一下www.wyc.com
[root@localhost images]# curl -xlocalhost:80 www.wyc.com -I
然后切换到存放日志的目录下可以看到生产以日期生成的日志文件
静态元素过期时间
浏览器访问网站的图片是会把静态的文件缓存在本地电脑里,这样下次再访问就不用去远程下载了
首先使用浏览器访问之前添加的图片
显示状态码为304,表示这张图片上次访问过并且加入到缓存里
我们来到图片目录/usr/local/apache2.4/docs/www.wyc.com/images下修改一下图片名字
[root@localhost images]# mv linux.png linux2.png
重新使用浏览器访问,状态码为200,表示是第一次访问并且重新下载该图片
修改主机配置文件
[root@localhost images]# vi /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模块
[root@localhost logs]# vi /usr/local/apache2.4/conf/httpd.conf
找到这一行,删除注释
重新加载一下配置文件
然后使用curl访问一下图片
发现多了两行参数
Cache-Control: max-age=86400 //表示缓存过期86400秒,是我们之前设置的一天
Expires: Fri, 07 Aug 2020 10:20:00 GMT //表示什么时候过期,之后会被删掉
配置防盗链
通过限制referer来实现防盗链的功能
修改主机配置文件
[root@localhost images]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
配置文件增加如下内容
<Directory /usr/local/apache2.4/docs/www.wyc.com>
SetEnvIfNoCase Referer "http://www.wyc.com" local_ref
SetEnvIfNoCase Referer "http://wyc.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
</Directory>
重新加载配置文件
然后我们使用curl命令测试一下
[root@localhost images]# curl -e "www.baidu.com" -xlocalhost:80 www.wyc.com/images/limux2.png -I
-e //
用来设置 HTTP 的标头Referer
,表示请求的来源
我们把Referer的值设置为www.baidu.com(这个值是白名单之外的)
发现状态码为403,表示对请求资源的访问被服务器拒绝
这次我们使用白名单内的Referer来访问
[root@localhost images]# curl -e "http://www.wyc.com" -xlocalhost:80 www.wyc.com/images/linux2.png -I
状态码是200,表示访问成功
设置访问控制白名单IP
1.访问控制 - Directory
修改主机配置文件
[root@localhost images]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
添加配置文件
<Directory /usr/local/apache2.4/docs/www.wyc.com>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
重新加载配置文件
首先我们用192.168.100.11访问
[root@localhost images]# curl -x192.168.100.11:80 www.wyc.com/images/linux2.png -I
状态码为403拒绝访问
然后使用配置的127.0.0.1进行访问
[root@localhost images]# curl -x127.0.0.1:80 www.wyc.com/images/linux2.png -I
访问成功
2.访问控制 - FilesMatch
[root@localhost images]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
添加配置文件
<Directory /usr/local/apache2.4/docs/www.wyc.com >
<FilesMatch wyc.php(.*)>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
首先用192.168.100.11进行访问
状态码为403拒绝访问
现在我们使用127.0.0.1进行访问
访问成功
因为我们配置文件里写了FilesMatch wyc.php(.*)
所以在访问的文件后加入任何符号或字母都是可以访问的
控制访问 — 禁止php解析
修改主机配置文件
[root@localhost images]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
修改配置文件内容
<Directory /usr/local/apache2.4/docs/www.wyc.com >
php_admin_flag engine off
</Directory>
重新加载配置文件
然后使用curl命令进行访问
[root@localhost www.wyc.com]# curl -x192.168.100.11:80 www.wyc.com/wyc.php
直接显示源码,表示没有解析php代码
访问控制 — user_agent
user_agent可以理解为浏览器标识
修改主机配置文件
[root@localhost images]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
配置文件内容
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.*[NC]
RewriteRule .* - [F]
</IfModule>
<IfModule mod_rewrite.c> //使用rewrite模块(之前在域名跳转使用过)
RewriteEngine on //开启rewrite模块
.*curl.* //以curl命令形式访问
.*baidu.com.* //以浏览器的形式访问
[NC,OR] //[NC]:不区分大小写 [OR]:两条件都成立
RewriteRule .* -[F] //对上面两个条件做出的限制 [F]表示Forbidden
重新加载配置文件
使用curl命令访问一下
状态码403,被拒绝访问
然后我们通过浏览器访问,发现是可以访问
我们现在反过来测试一下
将配置文件中的curl改成Mozilla(Mozilla代表浏览器的意思)
重新加载配置文件
我们使用curl命令进行访问发现是可以访问的
使用浏览器访问是拒绝访问的
我们现在将配置文件再改回去
重新加载配置文件
使用curl加-A 参数,自定义一个user_agent,就可以正常访问
[root@localhost www.wyc.com]# curl -A "111" -x127.0.0.1:80 www.wyc.com/wyc.php