Apache的经常使用配置

1. 配置启动脚本
(本文永久地址:http://woymk.blog.51cto.com/10000269/1921173javascript

若是是源码编译安装,需手动配置启动脚本,
官方源码包中已经提供了这个脚本:build/rpm/httpd.initphp

cp /usr/local/src/httpd-2.4.25/build/rpm/httpd.init /etc/init.d/httpd
注意文件中有三处主要的地方须要修改下的:
httpd=${HTTPD-/usr/local/apache2/bin/httpd}
pidfile=${PIDFILE-/usr/local/apache2/logs/${prog}.pid}
CONFFILE=/usr/local/apache2/conf/httpd.conf
请根据本身的实际状况更改相应的路径!css


而后运行以下命令加入启动列表:
chmod +x /etc/init.d/httpd
chkconfig --add httpd
chkconfig httpd onhtml

vi /usr/local/apache2/conf/httpd.conf
找到
#ServerName www.example.com:80
改为
ServerName localhost:80java

检查配置文件语法
/usr/local/apache2/bin/apachectl -tapache

用脚本启动apache
/etc/init.d/httpd start缓存

[root@wwww ~]# /etc/init.d/httpd start
正在启动 httpd:                                           [肯定]服务器


2. 配置虚拟主机
vi /usr/local/apache2/conf/httpd.confapp

找到
#Include conf/extra/httpd-vhosts.conf
删除前面的#号dom


Apache2.2版和2.4配置语法稍有不一样,接下来需根据相应版本修改

Apache2.2版:

找到
<Directory />
    Order deny,allow
    Deny from all
</Directory>
改为
<Directory />
    Order deny,allow
    Allow from all
</Directory>


Apache2.4版:

找到
<Directory />
    AllowOverride none
    Require all denied
</Directory>
改为
<Directory />
    AllowOverride none
    Require all granted
</Directory>


改完保存文件退出

vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
加入以下配置:
<VirtualHost *:80>
    DocumentRoot "/data/www"
    ServerName www.test.com
    ServerAlias www.a.com
</VirtualHost>


3. 为虚拟主机配置用户认证
例如对网站admin目录设置用户认证,在相应的虚拟主机配置文件段中加入:
    <Directory "/data/www/admin">
        AllowOverride AuthConfig
        AuthName "test"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
    </Directory>

保存后,建立验证用户
/usr/local/apache2/bin/htpasswd -cm /data/.htpasswd  test
参数说明:
-c:建立一个新文件。增长第二个用户时需去掉-c,不然会覆盖以前生成的文件。
-m: 使用MD5加密,2.4版能够省略这个参数,默认就是这个。
-d: 使用CRYPT加密,2.2版的默认加密方式。


4. 配置域名跳转
<IfModule mod_rewrite> 
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.a.com$
    RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
</IfModule>


若是是多个域名,能够这样设置:    
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.domain.com [OR]
    RewriteCond %{HTTP_HOST} ^www.domain1.com$
    RewriteRule ^/(.*)$ http://www.domain2.com/$1 [R=301,L]
或者:   
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www.domain2.com$
    RewriteRule ^/(.*)$ http://www.domain2.com/$1 [R=301,L]
    

防止rewrite出现死循环
例如:
    RewriteRule ^(.*) /abc/$1 [R,L]
原本访问的是www.abc.com结果变成了www.abc.com/abc/abc/abc/.....
加上一个条件便可:
    RewriteCond   %{REQUEST_URI} !^/abc
    RewriteRule ^(.*) /abc/$1 [R,L]
这样就再也不循环了。


5. 配置apache的访问日志
    ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-error_%Y%m%d.log 86400"
    #不记录指定文件类型的日志
    SetEnvIf Request_URI ".*\.gif$" p_w_picpath-request
    SetEnvIf Request_URI ".*\.jpg$" p_w_picpath-request
    SetEnvIf Request_URI ".*\.png$" p_w_picpath-request
    SetEnvIf Request_URI ".*\.bmp$" p_w_picpath-request
    SetEnvIf Request_URI ".*\.swf$" p_w_picpath-request
    SetEnvIf Request_URI ".*\.js$" p_w_picpath-request
    SetEnvIf Request_URI ".*\.css$" p_w_picpath-request
    CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d.log 86400" combined env=!p_w_picpath-request


6. 配置静态文件缓存
<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType p_w_picpath/gif  "access plus 1 days"
    ExpiresByType p_w_picpath/jpeg "access plus 24 hours"
    ExpiresByType p_w_picpath/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>


或者使用mod_headers模块实现
<IfModule mod_headers.c> 
    # htm,html,txt类的文件缓存一个小时 
    <filesmatch "\.(html|htm|txt)$"> 
        header set cache-control "max-age=3600" 
    </filesmatch> 
 
    # css,js,swf类的文件缓存一个星期 
    <filesmatch "\.(css|js|swf)$"> 
        header set cache-control "max-age=604800" 
    </filesmatch> 


    # jpg,gif,jpeg,png,ico,flv,pdf等文件缓存一年
    <filesmatch “\.(ico|gif|jpg|jpeg|png|flv|pdf)$”>
        header set cache-control “max-age=29030400″
    </filesmatch>
</IfModule> 


7. 配置防盗链
    SetEnvIfNoCase Referer "^http://www.test.com" local_ref
    SetEnvIfNoCase Referer "www.a.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>


8. 访问控制

1) 容许或限制ip访问

<Directory /data/www/admin>
      Order deny,allow
      Deny from all
      Allow from 192.168.0.1
</Directory>


关于Order Allow,Deny的几个例子:

Order Deny,Allow
Deny from All
先拒绝,再容许,默认为容许,当拒绝与容许冲突时,容许优先,结果为拒绝全部


Order Allow,Deny
Deny from All
交换Allow,Deny顺序,这也是拒绝全部


Order Allow,Deny
Allow from All
先容许,再拒绝,默认为拒绝,当拒绝与容许冲突时,拒绝优先,结果为容许全部


Order Deny,Allow
Allow from All
交换Allow,Deny顺序,这也是容许全部


Order Allow,Deny
allow from 192.168.0.1
Deny from all
拒绝全部


Order deny,allow
deny from 192.168.0.1
allow from all
容许全部


Order Deny,Allow
Deny from all
allow from 192.168.0.1
只容许192.168.0.1


Order allow,deny
allow from all
deny from 192.168.0.1
容许全部,只有192.168.0.1被拒绝


2) 禁止访问admin.php
<Directory /data/www>
    <Filesmatch  "^admin.php(.*)$">
        Order deny,allow
        Deny from all
    </Filesmatch>
</Directory>


3) 禁止解析php
<Directory /data/www>
    php_admin_flag engine off
    <filesmatch "(.*)php">
        Order deny,allow
        Deny from all
    </filesmatch>
</Directory>




几点说明:

1. 配置文件修改完毕后先用/usr/local/apache2/bin/apachectl -t检查配置文件有无语法错误,而后再使用/usr/local/apache2/bin/apachectl graceful从新加载配置文件。


2. 若是是share方式编译,使用相应模块时需在httpd.conf中打开。

例如启用rewrite模块:
vi /usr/local/apache2/conf/httpd.conf
去掉下面这句前的#号:
#LoadModule rewrite_module modules/mod_rewrite.so


3. 可使用/usr/local/apache2/bin/httpd查看模块加载状况:httpd -l 输出一个静态编译在服务器中的模块的列表。它不会列出使用LoadModule指令动态加载的模块。httpd -M 输出一个已经启用的模块列表,包括静态编译在服务器中的模块和做为DSO动态加载的模块。

相关文章
相关标签/搜索