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 www.test.com
ServerAlias www.aaa.com
</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} ^www.aaa.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.bbb.com$
RewriteRule ^/(.*)$ http://www.test.com/$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} 表示:当前访问的网址,只是指前缀部分,格式是www.xxx.com不包括“http://”和“/”
%{REQUEST_URI} 表示:表示访问的相对地址,就是相对根目录的地址,就是域名/后面的成分,格式上包括最前面的“/”,
www.123.com/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的定义:
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combined #%Y%m%d规定年月日; 86400秒即为一天切割。
2.不记录指定文件类型的日志
ErrorLog "logs/test.com-error_log"
SetEnvIf Request_URI ".*\.gif$" image-request #对gif文件做一个标记 image-request,也可以写成abc
SetEnvIf Request_URI ".*\.jpg$" image-request #setenvif要和customlog写在一起
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/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combined env=!image-request #不记录做过标记的文件
注意:SetEnvIf要和customlog写在一起,中间不要有分隔。
五、配置静态缓存
对于图片,html,css,javascripts等,让客户端缓存,让访问时不需要去服务器上访问,提高用户体验,需要提前确认是否支持mod_expires.c模块
<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 hours"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
六、配置防盗链
防止其他的网站大量使用自己网站里的一些图片,流量跑的是自己的网站,造成带宽的浪费。防止图片被盗用。
在虚拟主机的配置文件里加上:
SetEnvIfNoCase Referer "^http://.*\.test\.com" local_ref #给网址做标注
<filesmatch "\.(txt|png|gif|doc|mp3|zip|rar|jpg|css|js)"> #规定一下哪些类型的文件
Order Allow,Deny #禁止引用
Allow from env=local_ref #允许local_ref引用
</filesmatch>
七、访问控制
我们可以针对某些目录进行访问控制,禁止一些IP地址的访问
<Directory "/data/www">
AllowOverride None
Options None
Order allow,deny
Allow from all
deny from 192.168.206.1 #该IP地址为禁止访问的ip地址
</Directory>
还有一种以URI做限制访问
<filesmatch "(.*)admin(.*)">
Order allow,deny
Allow from all
Deny from 192.168.206.1
</filesmatch>
所有uri中包括admin的都进行ip访问限制
八、apache禁止解析php
多用在在网络安全方面,比如:某些目录上传文件,避免上传的有木马,针对某些路径禁止解析php。
编辑虚拟主机的配置文件,加入:
<Directory /data/www/data> #对data目录进行php解析限制。
php_admin_flag engine off
#将php解析引擎关闭
<filesmatch "(.*)php"> #匹配
Order deny,allow
Deny from all
#禁止解析所有,若不加filesmatch,只是将engine off,在浏览器访问该文件时, 会将php文件下载下来,这样不好
</filesmatch>
</Directory>
Apache的几种常用设置就整理到这,希望能够帮到运维的同仁们!