配置静态元素过期时间
那到底能缓存多久呢?如果服务器上的某个图片更改了,那么应该访问新的图片才对。这就涉及一个静态文件缓存时长的问题,也叫作“缓存过期时间”。在httpd的配置文件中,我们是可以控制这个时间的
配置httpd-vhosts.conf
<VirtualHost *:80>osts.conf
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/www.111.com"
ServerName www.111.com
ServerAlias 111.com
<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>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
//这里gif,jpeg, png格式的文件过期时长为1天,css. js. flash格式的文件过期时长为2小时
配置完成以后使用
使用# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
使用# /usr/local/apache2.4/bin/apachectl graceful 重新读取
检查httpd是否加载expirex模块
#/usr/local/apache2.4/bin/apachectl -M |grep -i expires
没有输出则说明当前httpd并不支持expires模块,所以需要修改配置文件
#vim /usr/local/apache2.4/conf/httpd.conf
搜索关键词expires,找到这一行
LoadModule expires_ module modules/mod_ expires .so
//把前面#删掉
完成以后 -t 、graceful重新加载服务再次使用usr/local/apache2.4/bin/apachectl -M |grep -i expires 查看是否加载模块
有这行输出就说明正确加载expire模块 下面进行测试 上传linux文件
使用curl -xlocalhost:80 www.111.com/image/linux.jpeg -I
如图所示 max-age=86400说明将缓存86400秒,max-age=0说明没有该类型缓存文件
配置防盗链
防盗链,通俗讲,就是不让别人盗用你网站上的资源。这个资源,通常指的是图片、视频、歌曲、文档等。
配置防盗链先编辑主机配置文件:
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/www.111.com"
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com>
SetEnvIfNoCase Referer "http://www.111.com" local_ref
SetEnvIfNoCase Referer "http://111.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
/首先定义允许访问链接的referer,其中^$为空referer,
//当直接在浏览器里输入图片地址去访问它时,它的referer就为空
配置完成以后使用 /usr/local/apache2.4/bin/apachectl -t /graceful 重新读取配置内容
curl -e "http://www.douxue.com/123.php" -xlocalhost:80 www.111.com/image/linux.jpg -I
状态码为403,其中-e参数表示请求的来源
curl -e "http://www.111.com/123.php" -xlocalhost:80 www.111.com/image/linux.jpg -I
白名单网页访问,状态码为200
curl -xlocalhost:80 www.111.com/image/linux.jpg -I
空referer为白名单网页访问,状态码为200
验证成功
访问控制-Diretory\FileMatch
访问控制限制白名单IP,针对文件和目录
先来看看怎么限制IP访问,编辑配置文件:
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/www.111.com"
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com/admin>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
Directory是用来指定限制访问的目录,order定义控制顺序
配置完成以后使用绝对路径创建目录
mkdir /usr/local/apache2.4/docs/www.111.com/admin/
创建admin目录,模拟网站后台
# vi /usr/local/apache2.4/docs/www.111.com/admin/123.php
<?php
echo "Hello World!";
?>
使用-t、graceful重新读取 使用curl命令验证
# curl -x127.0.0.1:80 www.111.com/admin/123.php -I
状态码为200,可正常访问
# curl -x192.168.150.144:80 www.111.com/admin/123.php -I
状态码为403,拒绝访问
针对文件配置
编辑配置文件
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/www.111.com"
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com/>
<FilesMatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
使用绝对路径在www.111.com下创建admin.php文件
# vim admin.php
<?php
echo "This is admin.php";
?>
创建完成以后使用 -t、graceful验证及重新读取配置文件
使用curl验证配置
# curl -x192.168.63.130:80 www.111.com/admin.php -I
状态码403被拒绝
# curl -x127.0.0.1:80 www.111.com/admin.php -I
状态码200访问正常
验证成功
访问控制-禁止解析php
对于使用PHP语言编写的网站,有一些目录是有需求上传文件的。如果网站代码有漏洞,让黑客上传了一个用PHP写的木马,由于网站可以执行PHP程序,最终会让黑客拿到服务器权限。为了避免这种情况发生,我们需要把能上传文件的目录直接禁止解析PHP代码
编辑配置文件 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/www.111.com"
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com/upload>
php_admin_flag engine off
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
配置完成以后使用-t、graceful命令验证查看是否有报错信息并重新读取配置文件
创建upload目录 编辑upload/123.php文件
vim upload/123.php
<?php
echo "www.111.com/123.php";
?>
完成配置以后使用curl命令验证
curl -x127.0.0.1:80 www.111.com/upload/123.php
允许访问
不允许访问
继续编辑配置文件
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/www.111.com"
ServerName www.111.com
ServerAlias 111.com
<Directory /usr/local/apache2.4/docs/www.111.com/upload>
php_admin_flag engine off
<FilesMatch (.*)\.php(.*)>
Order allow,deny
Deny from all
</FilesMatch>
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined
</VirtualHost>
使用-t、graceful命令 重新读取配置文件
使用curl命令验证 curl -x127.0.0.1:80 www.111.com/upload/123.php
访问控制-user_agent
user_agent是指用户浏览器端的信息。比如你是用IE的还是Firefox浏览器的。有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开PC常规页面。
编辑配置文件 #vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2.4/docs/www.111.com"
ServerName www.111.com
ServerAlias 111.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/www.111.com-access_log" combined
</VirtualHost>
%{HTTP_USER_AGENT}为user_agent的内置变量,NC代表“不区分大小写”,F代表Forbidden,OR表示“或者”,[F]代表forbidden。
配置完成以后使用-t、graceful验证
验证完成以后使用curl命令查看
curl -x127.0.0.1:80 www.111.com/upload/123.php
打开浏览器访问www.111.com/upload/123.php
反向测试
修改配置文件
RewriteCond%{HTTP_USER_AGENT}.*curl.*[NC,OR]
将curl改为Mozilla(浏览器客户端)
RewriteCond%{HTTP_USER_AGENT}.*Mozilla.*[NC,OR]
修改完成以后使用/usr/local/apache2.4/bin/apachectl-t
SyntaxOK
/usr/local/apache2.4/bin/apachectlgraceful重新读取配置文件
使用curl命令验证
curl-x127.0.0.1:80www.111.com/upload/123.php
这是我们使用浏览器访问时
指定客户端
修改配置文件 将Mozlla该为curl
使用curl -A Mozllia -x127.0.0.1:80 www.111.com/upload/123.php测试
这里的 -A 参数指定客户端的用户代理标头,即User-Agent