Apache是世界使用排名第一的Web服務器軟件。它能夠運行在幾乎全部普遍使用的計算機平臺上,因爲其跨平臺和安全性被普遍使用,是最流行的Web服務器端軟件之一。javascript
下面介紹幾個經常使用的apache命令:php
/usr/local/apache2/bin/apachectl -M 查看常見的模塊(包括動態和靜態)css
/usr/local/apache2/bin/apachectl -l 查看加載的靜態模塊html
/usr/local/apache2/bin/apachectl -t 檢查配置文件有無語法錯誤java
/usr/local/apache2/bin/apachectl graceful 加載配置文件,但不重啓web
/usr/local/apache2/bin/apachectl start/restart/stop 啓動/重啓/中止apache服務chrome
下列的配置在apache2.2.31版本實測。apache
1、用戶認證
vim
有些時候訪問網站下的一些頁面時,須要用戶認證。
瀏覽器
編輯虛擬主機的配置文件:
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 加載配置
2、默認虛擬主機
有些時候,爲了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下。
3、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
4、日誌切割與管理
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$" p_w_picpath-request #對gif文件作一個標記 p_w_picpath-request,也能夠寫成abc
SetEnvIf Request_URI ".*\.jpg$" p_w_picpath-request #setenvif要和customlog寫在一塊兒
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 #不記錄作過標記的文件
注意:SetEnvIf要和customlog寫在一塊兒,中間不要有分隔。
5、配置靜態緩存
對於圖片,html,css,javascripts等,讓客戶端緩存,讓訪問時不須要去服務器上訪問,提升用戶體驗,須要提早確認是否支持mod_expires.c模塊
<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 hours"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
6、配置防盜鏈
防止其餘的網站大量使用本身網站裏的一些圖片,流量跑的是本身的網站,形成帶寬的浪費。防止圖片被盜用。
在虛擬主機的配置文件里加上:
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>
7、訪問控制
咱們能夠針對某些目錄進行訪問控制,禁止一些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訪問限制
8、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的幾種經常使用設置就整理到這,但願可以幫到運維的同仁們!