任务 2 Apache 配置
- 默认虚拟主机
(1)虚拟主机
虚拟主机(共享主机,又称虚拟服务器)是一种在单一主机或主机群上,实
现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,
并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而
来,其硬件系统可以是基于服务器群,或者单个服务器。
(2)修改httpd.conf配置文件
vi/usr/local/apache2.4/conf/httpd.conf
搜索httpd-vhost,去掉#
(3)先备份vhosts.conf配置文件
cp httpd-vhosts.conf httpd-vhosts.conf-bak
(4)修改vhosts.conf配置文件
vi/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
根据自己需要创建网站
· ServerAdmin:用户地址
· DocumentRoot:网站的根目录
· ServerName:域名
· ServerAlias:网站的别名
· ErrorLog:日志
· CustomLog:日志
(5)创建docs目录
用刚创建网站的名字创建两个目录
编辑这两个文件内容
vim qjq.com/index.html vim qjq2.com/index.html
(6) 重启一下apache服务来测试一下能不能访问到我们刚 才配置的这些网页
/usr/local/apache2.4/bin/apachectl graceful
(7) 验证成功
(8)也可以做成PHP文件,也可以正常解析
2.用户认证
(1)用户认证用来对某些网页进行访问控制,当用户访问这些页面的时候需要输入用户名和密码进行认证才能进行访问。现在只针对特定用户网页使用,一般使用较少.
(2)修改配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf
现在我们只针对qjq.com这个网站来做,将其他的网站注释掉
增加一些代码
· <Directory /data/wwwroot/testdomain.com> //指定认证的目录
· AllowOverride AuthConfig //这个相当于打开认证的开关
· AuthName "testdomain.com user auth" //自定义认证的名字,作用不大
· AuthType Basic //认证的类型,一般为Basic
· AuthUserFile /data/.htpasswd //指定密码文件所在位置
· require valid-user //指定需要认证的用户为全部可用用户
· </Directory>
(3)配置完成检查配置有没有出错
/usr/local/apachec2.5/bin/apachectl -t
没有出错
(4)创建密码文件,指定用户名密码;
[root@mysql extra]# /usr/local/apache2.4/bin/htpasswd -cm /usr/local/apache2.4/docs/.htpasswd ytl
(5)测试配置是否正确
curl -xlocalhost:80 -u qjq:123 qjq.com -I
//-u 表示用户名和密码
(6)通过网页进行访问,修改本机的host文件
文件位置:C:\Windows\System32\drivers\etc
输入用户名和密码就访问成功了
3.域名跳转
(1)修改配置文件
[root@mysql extra]# vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
· <IfModule mod_rewrite.c> //-需要mod_ _rewrite模块支持
· RewriteEngine on // 打开rewrite功能
· RewriteCond %{HTTP_HOST} !^qjq.com$ //定义rewrite的条件,当主机名不是wyc.com时满足条件
· RewriteRule ^/(.*)$ http://qjq.com/$1 [R=301,L] //定义rewrite规则当满足上面的条件时,这条才会执行
· </IfModule>
(2)测试一下配置文件有没有问题
/usr/local/apache2.4/bin/apachectl -t
(3)查看rewirte模块有没有启动
没有启动,所以我们要把它加入进来
进入配置文件
vi /usr/local/apache2.4/conf/httpd.conf
将rewrite这行前面的注释删掉,激活模块。
(4)重新查看rewrite模块是否加载
/usr/local/apache2.4/bin/apachectl -M |grep rewrite
已经加载成功
(5)重新加载apache
(6)测试跳转是否成功
随便测试一个网站,都跳转到http://qjq.com网站上来,返回状态码301。
4.访问日志
(1)修改配置文件
/usr/local/apache2.4/logs这个目录是默认的存放日志文件的目录
在Apache的主配置为文件查看日志的两种类型及显示格式
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\"" //表示浏览器上一层访问的地址
将common改为combined
(2)重新加载配置文件在进行访问
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
(3)然后查看日志就可以发现成功更改了日志的格式
[root@mysql apache2.4]# cat logs/qjq.com-access_log
5.访问日志不记录静态文件
(1)网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录
(2)修改配置文件
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
SetEnvIf Request_URI ".*\.css$" img
Customlog "logs/testdomain1.com-access_log" combined env=!img
(3)测试一下。将刚添加的部分内容注释掉
在/usr/local/apache2.4/docs/qjq.com/下创建images文件并加上一张图片
(4)重新加载配置文件
(5)测试一下
curl -xlocalhost:80 qjq.com/images/linux.jpg -I
可以正常访问
(6)查看一下日志
[root@mysql logs]# tailf qjq.com-access_log
记录了刚才操作的日志
(7)去网页查看一下
发现这个访问日志已经跳转出来了,
(8)接下来我们修改配置文件,去掉注释重新加载配置,继续访问一遍
重新加载配置
在访问一下那个图片,查看一下日志,发现没有访问记录。
6.访问日志切割
(1)日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除旧的日志文件
(2)修改配置文件
vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
修改代码成图中的样子
//“-l” //改参数表示以当前系统时间切割
//Y%m%d //定义了日志的切割命名,以时间格式命名
//86400 //表示了一天24小时的秒数
(3)重新加载配置文件
(4)访问一下qjq.com
(5)去存放日子文件的目录查看一下,
生成了以日期形式的日志文件
7.静态元素过期时间
(1)浏览器访问网站的图片是会把静态的文件缓存在本地电脑里,这样下次再访问就不用去远程下载了
(2)首先用浏览器访问之前的那张图片
可以看到图片的状态码是304表示这张图片上次访问过并且加入到缓存里
(3)修改一下图片的名字,重新访问
[root@mysql images]# mv linux.jpg linux2.jpg
发现状态码变成200了,说明是第一次访问
(4)修改配置文件
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>
(5)重新加载配置文件
(6)这个功能需要激活expires模块
vi /usr/local/apache2.4/conf/httpd.conf
找到这一行,删除注释LoadModule expires_module modules/mod_expires.s
(7)使用curl访问图片
多了两行参数
Cache-Control: max-age=86400 //表示缓存过期86400秒,是我们之前设置的一天
Expires: Wed, 19 Aug 2020 12:16:15 GMT //表示什么时候过期,之后会被删掉
8.配置防盗链
(1)通过限制referer来实现防盗链的功能
(2)修改配置文件
vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
添加以下代码
· <Directory /usr/local/apache2.4/docs/qjq.com>
· SetEnvIfNoCase Referer "http://qjq.com" local_ref
· SetEnvIfNoCase Referer "http://qjq.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>
(3)重新加载配置文件
(4)用curl命令访问
[root@mysql images]# curl -e "http://www.douxue.com/index.php" -xlocalhost:80 qjq.com/imagex/linux2.gpg -I
我们把Referer的值设置为www.douxue.com(这个值是白名单之外的)
-e //用来设置 HTTP 的标头Referer,表示请求的来源
发现状态码为403,表示对请求资源的访问被服务器拒绝
这次我们使用白名单内的Referer来访问
[root@mysql images]# curl -e "http://qjq.com" -xlocalhost:80 qjq.com/images/linux2.jpg -I
状态码是200,表示访问成功!
9.设置访问控制白名单IP
(1)访问控制 - Directory
(2)修改配置文件
vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
增加以下代码
· <Directory /usr/local/apache2.4/docs/qjq.com>
· Order deny,allow
· Deny from all
· Allow from 127.0.0.1
· </Directory>
(3)重新加载配置文件
(4)先用本机IP访问一下
curl -x192.168.200.10:80 qjq.com/images/linux2.jpg -I
状态码为403,不可以访问。
(5)用设置的127.0.0.1访问
curl -x127.0.0.1:80 qjq.com/images/linux2.jpg -I
状态码200,访问成功。
(6)访问控制-FilesMatch
修改配置文件
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>
(7)重新加载配置文件
(8)在qjq.com/images目录下创建一个qjq.php目录
先用本机IP访问
[root@mysql qjq.com]# curl -x192.168.200.10:80 qjq.com/images/qjq.php -I
状态码为403,拒绝访问
再用127.0.0.1访问
因为我们配置文件里写了FilesMatch qqq.php(.*)
所以在访问的文件后加入任何符号或字母都是可以访问的
10.控制访问 — 禁止php解析
(1)修改配置文件
vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
修改配置文件内容
· <Directory /usr/local/apache2.4/docs/qjq.com >
· php_admin_flag engine off
· </Directory>
(2)重新加载配置文件
(3)使用curl命令用本机IP进行访问
curl -x192.168.200.10:80 qjq.com/qqq.php
直接显示的源代码,没有解析PHP
11.访问控制-用户代理
(1)user_agent可以理解为浏览器标识
(2)修改配置文件
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
(3)重新加载配置文件
(4)curl命令用本机IP访问一下
[root@mysql qjq.com]# curl -x192.168.200.10:80 qjq.com/qqq.php
状态码403,拒绝访问
用浏览器进行访问,发现可以访问
(5)现在反过来测试一下
将配置文件中的curl改成Mozilla(Mozilla代表浏览器的意思)
重新加载文件,发现可以访问
这时使用浏览器访问,是不可以访问的
(6)将配置文件改为curl
重新加载配置文件
使用curl加-A 参数,自定义一个user_agent,就可以正常访问
curl -A "qq" -x192.168.200.10:80 qqq.com/qqq.php