Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
下面介绍几个常用的apache命令:
/usr/local/apache2/bin/apachectl -M 查看常见的模块(包括动态和静态)
/usr/local/apache2/bin/apachectl -l 查看加载的静态模块
/usr/local/apache2/bin/apachectl -t 检查配置文件有无语法错误
/usr/local/apache2/bin/apachectl graceful 加载配置文件,但不重启
/usr/local/apache2/bin/apachectl start/restart/stop 启动/重启/停止apache服务
下列的配置在apache2.2.31版本实测。
一、用户认证
有些时候访问网站下的一些页面时,需要用户认证。
编辑虚拟主机的配置文件:
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
写入:
<Directory /data/www/abc> #/data/www/abc为将要访问的页面的目录
AllowOverride AuthConfig
AuthName "cct"
AuthType Basic
AuthUserFile /data/.htpasswd #指定存放用户名和密码的文件
require valid-user
</Directory>
保存退出,生成密码文件
htpasswd -c /data/.htpasswd cct #指定用户名为cct,输入自己设定的密码
/usr/local/apache2/bin/apachectl graceful 加载配置
二、默认虚拟主机
有些时候,为了web服务安全性,我们需要设置默认的虚拟主机。
编辑虚拟主机的配置文件:
<VirtualHost *:80>
DocumentRoot "/tmp/111" #该目录可以不存在
ServerName 111.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName
ServerAlias
</VirtualHost>
将这段设定放在虚拟主机配置的最上面。除了已作过设置的域名(aaa、test)外,其余访问的域名均跳转到/tmp/111下。
三、rewrite规则
下列代码均写在<IfModule mod_rewrite.c>模块下
1.域名301跳转
web服务可能会用到多个域名,域名有主有次,输入次域名会自动跳转到主域名进行访问。设定为301永久跳转,302是暂时跳转。
编辑虚拟主机的配置文件:
写入:
<IfModule mod_rewrite.c>
RewriteEngine on #打开rewrite功能
RewriteCond %{HTTP_HOST} ^$ [OR]
RewriteCond %{HTTP_HOST} ^$
RewriteRule ^/(.*)$ $1 [R=301,L]
</IfModule>
调用了rewrite模块,RewriteCond是跳转条件,RewriteRule是跳转规则。
2.禁止指定user_agent
RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR] #禁止curl和chrome浏览器访问
RewriteCond %{HTTP_USER_AGENT} ^.*chrome.* [NC] #NC是不区分大小写的意思
RewriteRule .* - [F] #为禁止的意思
3.通过rewrite限制某个目录
RewriteCond %{REQUEST_URI} ^.*/tmp/.* [NC] #禁止访问tmp目录
RewriteRule .* - [F]
4.rewrite规则
1) [R=301](force redirect) 强制外部重定向
2) [F]禁用URL,返回403HTTP状态码。
3)[NC](no case) 不区分大小写
4) [OR] 或者
变量:
%{HTTP_USER_AGENT} 表示:访问的user_agent
%{HTTP_HOST} 表示:当前访问的网址,只是指前缀部分,格式是不包括“”和“/”
%{REQUEST_URI} 表示:表示访问的相对地址,就是相对根目录的地址,就是域名/后面的成分,格式上包括最前面的“/”,
/xiang/1.html 黑字表示HOST,绿色部分表示URI
四、日志切割与管理
web服务器出现大量的访问日志和错误日志,所以我们要对日志进行切割,方便管理人员的查询。一些并不重要的记录,我们可以规定日志中不显示这些。
首先我们先将虚拟主机配置文件里的日志记录打开,日志的路径在/usr/local/apache2/logs下
ErrorLog "logs/test.com-error_log" #错误日志
CustomLog "logs/test.com-access_log" common #common是日志类型
在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
%u 访问的user
%t时间
%r 动作
有些时候一些用户使用代理服务器,这里的%h会显示代理ip,在%h后面加上%{X-FORWARDED-FOR}i 即显示真实ip。
1.日志切割
修改虚拟主机的access log的定义: