二. Apache配置
Posted wft9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二. Apache配置相关的知识,希望对你有一定的参考价值。
2.1默认虚拟主机
2.1.1介绍
是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。虚拟主机之间完全独立,并可由用户自行管理,虚拟并非指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统可以是基于服务器群,或者单个服务器。
2.1.2配置
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
//编辑虚拟主机配置文件
<VirtualHost *:80>
ServerAdmin admin@wang.com
DocumentRoot "/data/wwwroot/test0920.com"
ServerName test0920.com
ServerAlias www.testdomain.com
ErrorLog "logs/aming.com-error_log"
CustomLog "logs/aming.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
</VirtualHost>
//ServerAdmin指定管理员邮箱,
//DocumentRoot为该虚拟主机站点的根目录,
//ServaerName为网站的域名
//ServerAlias为网站的第二域名
//ErrorLog为站点的错误日志
//CustomLog为站点的访问日志
#mkdir -p /data/wwwroot/test0920.com /data/wwwroot/testdomain.com
#echo “www.test0920.com” > /data/wwwroot/test0920.com/index.html
//网站默认的主页就是index.html
#echo “www.testdomain.com” > /data/wwwroot/testdomain.com/index.html
#/usr/local/apache2.4/bin/apachectl -t
#/usr/local/apache2.4/bin/apachectl graceful
2.1.3配置验证
#curl -x127.0.0.1:80 www.test0920.com
//访问www.test0920.com/index.html www.test0920.com
#curl -x127.0.0.1:80 www.testdomain.com
www.testdomain.com
#curl -x127.0.0.1:80 www.abc.com
www.test0920.com
2.1.4验证成功
2.2用户认证
2.2.1介绍
用户认证用来对某些目录中的网页进行访问控制,
当用户访问这些页面的时候需要输入用户名密码进行认证
2.2.2配置
#vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
<Directory /data/wwwroot/testdomain.com>
// 指定认证的目录
AllowOverride AuthConfig
// 这个相当于打开认证的开关
AuthName "testdomain.com user auth"
//自定义认证的名字,作用不大
AuthType Basic
//认证的类型,一般为Basic
AuthUserFile /data/.htpasswd
//指定密码文件所在位置
require valid-user
// 指定需要认证的用户为全部可用用户
</Directory>
</VirtualHost>
#/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd test
//htpasswd为创建用户的工具,-c为creat
//-m为指定密码加密的方式为MD5
//data/.htpasswd为密码文件,
//test为创建的用户。第一次执行需加-c
//第二次不用加,否则密码文件会重置
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK //验证配置文件是否有问题
#/usr/local/apache2.4/bin/apachectl graceful
2.2.3配置验证
配置完可在windows上访问www.testdomain.com
文件在C:WindowsSystem32driversetchosts
打开在最后一行输入
#你的IP www.testdomain.com
然后去浏览器访问会有弹窗
2.3域名跳转
2.3.1介绍
当我们变更网站域名,或者申多个域名指向一个网站的时候,这个时候我们就会
用到域名跳转
2.3.2配置
把123.com域名跳转www.123.com
配置如下:
<VirtualHost * :80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
<IfModule mod_rewrite.c> //- 需要mod_ _rewrite模块 支持
RewriteEngine on
// 打开rewrite功能
RewriteCond %{HTTP_ HOST} !^www.testdomain.com$
//定义rewrite的条件,当主机名不是www.testdomain.com时满足条件
RewriteRule ^/(. *)$ http://www.testdomain.com/$1 [R=301,L]
//定义rewrite规则,RewriteRule后面分为三个部分,第一部分为当前网址
//第二部分为要跳转的网址,第三部分是选项,需要括号括起来。
</IfModule>
</VirtualHost>
要实现跳转,需要rewrite模块的支持,所以查看是否安装该模块
如果没有则还需要一些配置:
#/usr/lkocal/apache2.4/bin/apachectl -M |grep -i rewrite
//如果没有输出则需要继续编辑
#vim /usr/local/apache2.4/conf/httpd.conf
//搜索rewrite,把前面#去掉
#/usr/local/apache2.4/bin/apachectl graceful
2.3.3配置验证
#/usr/local/apache2.4/bin/apachectl -M |grep -i rewrite
Rewrite_module(share)
//有这行输出,说明正常加载rewrite模块
#curl -x127.0.0.1:80 -I testdomain.com
//可以看见状态码301,跳转的网址是www.testdomain.com
2.4访问日志
2.4.1介绍
访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问
2.4.2配置
# vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
//把123.com虚拟主机改写如下
<VirtualHost *: 80>
DocumentRoot " /data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
<IfModule mod rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_ HOST} !^www. domain. com$
RewriteRule ^/(.*)$ http://www.testdomain.com/$1 [R=301,L]
</IfModule>
Customlog "1ogs/testdomain. com-access_ log" combined
</VirtualHost>
保存配置文件 后,测试语法并重新加载配置:
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
2.4.3配置验证
#curl -x127.0.0.1:80 -I testdomain.com
#tail /usr/local/apache2.4/logs/testdomain-access_log
127.0.0.1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.5访问日记不记录静态文件
2.5.1配置
# vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
<IfModule mod rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.testdomain.com$
RewriteRule ^/(.*)$ http://www.testdomain.com/$1 [R=301,L]
</IfModule>
SetEnvIf Request_URI ".*.gif$" image-request
SetEnvIf Request_URI ".*.jpg$" image-request
SetEnvIf Request_URI ".*.png$" image-request
SetEnvIf Request_URI ".*.bmp$" image-request
SetEnvIf Request_URI ".*.swf$" image-request
SetEnvIf Request_URI ".*.js$" image- request
SetEnvIf Request_URI ".*.css$" image- request
Customlog "logs/testdomain1.com-access_log" combined
</VirtualHost>
//先定义了一个image-request环境变量,把gif,jpg,png, bmp,swf,js,css等格式文件全归类到此
保存配置后,测试配置文件是否正确,没有错误重新加载服务
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
2.5.2配置验证
#curl -x127.0.0.1:80 -I testdomain.com
#ls /usr/local/apache2.4/logs/
123.com-access_2~~~~~~~~~~~~~~~~~~~~~~~~
2.6访问日记切割
2.6.1配置
# vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
<IfModule mod rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.testdomain.com$
RewriteRule ^/(.*)$ http://www.testdomain.com/$1 [R=301,L]
</IfModule>
SetEnvIf Request_URI ".*.gif$" image-request
SetEnvIf Request_URI ".*.jpg$" image-request
SetEnvIf Request_URI ".*.png$" image-request
SetEnvIf Request_URI ".*.bmp$" image-request
SetEnvIf Request_URI ".*.swf$" image-request
SetEnvIf Request_URI ".*.js$" image-request
SetEnvIf Request_URI ".*.css$" image-request
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined env=!image-request
</VirtualHost>
保存配置后,测试配置文件是否正确,没有错误重新加载服务
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
2.6.2配置验证
#touch /data/wwwroot/testdomain.com/aming.jpg
#touch /data/wwwroot/testdomain.com/aming.txt
#curl -x127.0.0.1:80 www.testdomain.com/aming.jpg
#curl -x127.0.0.1:80 www.testdomain.com/aming.txt
#cat /usr/local/apache2.4/logs/123.com-accesss_20~
127.0.0.1——~~~~
可以看到123.com-access~~日志中只有aming.txt的请求日志,但没有aming.jpg的
2.7静态元素过期时间
2.7.1介绍
那到底能缓存多久呢?如果服务器上的某个图片更改了,那么应该访问新的图片才对。这就涉及一个静态文件缓存时长的问题,也叫作“缓存过期时间”。在httpd的配置文件中,我们是可以控制这
2.7.2配置
在httpd上我们可以控制文件过期时间,配置如下:
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
<IfModule mod rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.testdomain.com$
RewriteRule ^/(.*)$ http://www.testdomain.com/$1 [R=301,L]
</IfModule>
SetEnvIf Request_URI ".*.gif$" image-request
SetEnvIf Request_URI ".*.jpg$" image-request
SetEnvIf Request_URI ".*.png$" image-request
SetEnvIf Request_URI ".*.bmp$" image-request
SetEnvIf Request_URI ".*.swf$" image-request
SetEnvIf Request_URI ".*.js$" image- request
SetEnvIf Request_URI ".*.css$" image- request
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined env=!image-request
<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>
</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
2.7.3配置验证
检查httpd是否加载expires模块:
#/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
//把前面#删掉
#/usr/local/apache2.4/bin/apachectl graceful
//重新加载服务
#/usr/local/apache2.4/bin/apachectl -M|grep -i expires
expires_module(share)
//有这行输出说明正确加载expires模块
下面进行测试:
#curl -x127.0.0.1:80 -I www.testdomain.com/aming.txt
#curl -x127.0.0.1:80 -I www.testdomain.com/aming.jpg
//max-age=86400说明将缓存86400秒,max-age=0说明没有该类型缓存文件
2.8配置防盗链
2.8.1介绍
防盗链,通俗讲,就是不让别人盗用你网站上的资源。这个资源,通常指的是图片、视频、歌曲、文档等。
2.8.2配置
配置防盗链先编辑主机配置文件:
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og86400"combined env=!image-request
<Directory /data/wwwroot/testdomain.com>
SetEnvIfNoCase Referer "http://www.testdomain.com" local_ref
SetEnvIfNoCase Referer "http://testdomain.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>
</VirtualHost>
//首先定义允许访问链接的referer,其中^$为空referer,
//当直接在浏览器里输入图片地址去访问它时,它的referer就为空。
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful
2.8.3配置验证
#curl -x127.0.0.1:80 -I -e “http://www.testdomain.com/testdomain.txt” http://testdomain.com/aming.jpg
状态码200
#curl -x127.0.0.1:80 -I -e “http://www.1234.com/1.txt” http://testdomain.com/aming.jpg
状态码403
#curl -x127.0.0.1:80 -I -e “http://www.testdomain.com/123.txt” http://www.123.com/index.html
状态码200
2.9访问控制IP
2.9.1介绍
这样做的目的是防止别有用心的人拿到后台权限,并获得内部数据。
2.9.2配置
先来看看怎么限制IP访问,编辑配置文件
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined
<Directory /data/wwwroot/testdomain.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
</VirtualHost>
//Directory是用来指定限制访问的目录,order定义控制顺序
验证过程:
#mkdir /data/wwwroot/testdomain.com/admin
//创建admin目录,模拟网站后台
# echo “admin" > /data/wwwroot/testdomain.com/admin/index.html
# > /usr/local/apache2. 4/1ogs/123.com-access_20170319.1og /
2.9.3配置验证
# curl -x192.168. 188.128:80 -I testdomain.com/admin/index.html
状态码403
# curl -x127.0.0.1:80 -I testdomain.com/admin/index.html
状态码200
# cat /usr/local/apache2.4/logs/123.com-access_ 20~~~
192.168.~~~
127.0.0.1~~~
2.10访问控制DiretoryFileMatch
2.10.1简述
访问控制也可以针对文件进行操作
2.10.2配置
编辑配置文件
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined
<Directory /data/wwwroot/testdomain.com/admin/>
<Filesmatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Filesmatch>
</Directory>
</VirtualHost>
验证过程如下:
# /usr/local/apache2. 4/bin/apachectl -t
Syntax OK
# /usr/local/apache2 .4/bin/ apachectl graceful
# touch /data/wwwroot/testdomain.com/admin/admin.php
2.10.3配置验证
# curl -x127.0.0.1:80 www. 123. com/upload/1.php
状态码 200
#curl -x192.168.247.139:80 www.testdomain.com/admin/admin.php -I
状态码 403
2.11限制某个目录禁止解析PHP
2.11.1简述
把能上传文件的目录直接禁止PHP解析
2.11.2配置
配置如下:
#vim /usr/local/apache2 .4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined
<Directory /data/wwwroot/testdomain.com/upload>
php_admin_flag engine off
</Directory>
</VirtualHost>
# /usr/local/apache2 .4/bin/apachectl -t
Syntax OK
# /usr/local/apache2 .4/bin/apachectl graceful
# cp /usr/local/apache2 .4/htdocs/1. php /at/wwwroot/testdomain.com/upload/
2.11.3配置验证
# curl -x127.0.0.1:80 testdomain.com/upload/1.php
<?php .
echo "php解析正常";
?>
2.12限制user_agent
2.12.1介绍
user_agent是指用户浏览器端的信息,比如你是用IE的,还是firefox的.有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开pc常规页面.
2.12.2配置
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/testdomain.com"
ServerName www.testdomain.com
ServerAlias testdomain.com
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/123.com-access_%Y%m%d.1og 86400"combined
<IfModule mod_ rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.*[NC]
RewriteRule .* - [F]
</IfModule>
</VirtualHost>
//%{HTTP_USER_AGENT}为user_agent的内置变量,NC代表”不区分大小写”,F代表Forbidden,OR表示”或者”
验证过程:
# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
# /usr/local/apache2.4/bin/apachectl graceful
2.12.3配置验证
#curl -I -x127.0.0.1:80 testdomain.com/upload/1.php
状态码403
#curl -A “123123” -I -x127.0.0.1:80 testdomain.com/upload/1.php
状态码200
以上是关于二. Apache配置的主要内容,如果未能解决你的问题,请参考以下文章