Apache的常用配置

1. 配置啓動腳本
(本文永久地址:http://woymk.blog.51cto.com/10000269/1921173

如果是源碼編譯安裝,需手動配置啓動腳本,
官方源碼包中已經提供了這個腳本:build/rpm/httpd.init

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
請根據自己的實際情況更改相應的路徑!


然後運行如下命令加入啓動列表:
chmod +x /etc/init.d/httpd
chkconfig --add httpd
chkconfig httpd on

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

檢查配置文件語法
/usr/local/apache2/bin/apachectl -t

用腳本啓動apache
/etc/init.d/httpd start

[root@wwww ~]# /etc/init.d/httpd start
正在啓動 httpd:                                           [確定]


2. 配置虛擬主機
vi /usr/local/apache2/conf/httpd.conf

找到
#Include conf/extra/httpd-vhosts.conf
刪除前面的#號


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動態加載的模塊。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章