1. 配置啓動腳本
(本文永久地址:http://woymk.blog.51cto.com/10000269/1921173)javascript
若是是源碼編譯安裝,需手動配置啓動腳本,
官方源碼包中已經提供了這個腳本: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動態加載的模塊。