Apache配置與應用
apache優化
1、更改apache的預設使用者
通過更改apache的預設使用者,可以提升apache的安全性。這樣,即使apache服務被攻破,黑客拿到apache普通使用者也不會對系統和其他應用造成破壞。這裡建立的apache使用者,將用於對子程序和執行緒的控制。
useradd -M -s /sbin/nologin apache 建立apache使用者
編輯apache配置檔案,修改預設的使用者。
vim /usr/local/apache/conf/httpd.conf
User apache #更改預設的daemon使用者為apache使用者
Group apache #更改預設的daemon使用者為apache使用者
2、Apache連線保持(keepalive)
在Apache的httpd.conf中,KeepAlive指的是保持連線活躍,類似於Mysql的永久連線。換一句話說,如果將KeepAlive設定為On,那麼來自同一客戶端的請求就不需要再一次連線,避免每次請求都要新建一個連線而加重伺服器的負擔。
KeepAlive的連線活躍時間當然是受KeepAliveTimeOut限制的。如果第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次連線就會中斷,再新建第二個連線。
所以,一般情況下,圖片較多的網站應該把KeepAlive設為On。但是KeepAliveTimeOut應該設定為多少秒就是一個值得討論的問題了。
如果KeepAliveTimeOut設定的時間過短,例如設定為1秒,那麼APACHE就會頻繁的建立新連線,當然會耗費不少的資源;反過來,如果KeepAliveTimeOut設定的時間過長,例如設定為300秒,那麼APACHE中肯定有很多無用的連線會佔用伺服器的資源,也不是一件好事。
所以,到底要把KeepAliveTimeOut設定為多少,要看網站的流量、伺服器的配置而定。
如何去設定開啟關閉連線保持?操作如下:
vi /usr/local/httpd/conf/extra/httpd-default.conf
KeepAlive On //開啟連線保持功能
MaxKeepAliveRequests 100 //一次連線最多請求100個檔案
KeepAliveTimeout 5 //單位是秒
3、配置訪問控制
vi /usr/local/httpd/conf/httpd.conf //對htdocs目錄設定控制,直接新增兩行。
找到/usr/local/httpd/htdocs
Order deny,allow //黑名單,先拒絕後允許
Deny from 192.168.80.0/24
拒絕192.168.80.1,允許其它所有
Require all granted 允許所有來源訪問
Require all deny 拒絕所有來源訪問
Require local 僅本機訪問
基於IP地址的訪問控制
Require ip 10 172.20 192.168.2
允許特定IP或IP段,多個IP或IP段間使用空格分隔
基於主機名的訪問控制
Require host example.org
Require host .net example.edu
4、配置認證訪問:
vi conf.d/vdir.conf
AuthName "kgc.cn"
AuthType Basic
AuthUserFile /usr/local/httpd/user
require valid-user
________________________________________________
注:
AuthName:定義提示資訊,使用者訪問時提示資訊會出現在認證的對話方塊中
AuthType:定義認證型別,basic 基本認證
AuthUserFile:定義包含使用者名稱和密碼的文字檔案,每行一對
AuthGroupFile:定義包含使用者組和組成員的文字檔案。組成員之間用空格分開,如:group1:user1 user2
require命令:定義哪些使用者或組才能被授權訪問
require user user1 user2 (只有使用者user1和user2可以訪問)
requires groups group1 (只有group1中的成員可以訪問)
require valid-user (在AuthUserFile指定的檔案中的所有使用者都可以訪問
________________________________________________
apachectl -t
htpasswd -c /usr/local/httpd/user test
//新建資料檔案/usr/local/httpd/user,其中包含一個名為test的使用者資訊
第一次新增使用者時member.txt檔案不在,需要用-c選項建立檔案
htpasswd /usr/local/httpd/.user jack
//向/usr/local/httpd/user資料檔案中新增一個新使用者jack
cat /usr/local/httpd/.user //確認使用者資料檔案
service httpd restart
此時,訪問需要使用者名稱和密碼了,輸入我們設定的使用者和密碼即可進入
5、配置日誌分割
編輯Apache的主配置檔案httpd.conf,更改內容如下:
註釋掉如下兩行
ErrorLog logs/error_log
CustomLog logs/access_log common
然後新增如下兩行
ErrorLog "|/usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/errorlog.%Y-%m-%d-%H_%M_%S.log 86400"
CustomLog "|/usr/local/httpd/bin/rotatelogs -l logs/accesslog.%Y-%m-%d-%H_%M_%S.log 86400" common
//通過管道把日誌交給rotatelogs工具 -l指使用本地時間 86400表示日誌分隔的間隔為1天,單位是秒。
或者:
ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/errorlog.%Y-%m-%d-%H_%M_%S 2M +480"
CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/accesslog.%Y-%m-%d-%H:%M:%S 2M +480" common
儲存退出
[[email protected] logs]# apachectl -t
注:
errorlog.%Y-%m-%d-%H_%M_%S為生成日誌的格式,類似於這樣:errorlog.2018-10-11-17_00_00 ,以年月日時分秒為單位的
2M 為日誌的大小,即為日誌達到多大後生成新的日誌檔案,支援的單位為K,M,G,本處為2M。
+480 為時差,檔案的時間為英國時間,中國的時差要比英國多8個小時也就是480分鐘,所以要加上480分鐘。
rotatelogs語法說明:
rotatelogs [-l] 日誌檔名(絕對路徑) 日誌偏移量(時間) 或者 大小
-l:使用本地時間代替GMT時間作為時間基準
GMT時間就是格林威治時間(世界時),是指格林尼治所在地的標準時間,英國倫敦
例子:
每天生成一個錯誤日誌檔案
ErrorLog "|bin/rotatelogs -l logs/error-%Y-%m-%d.log 86400"
CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
此配置會建立檔案"/var/logs/logfile.nnnn",其中的nnnn是名義上的日誌啟動時的系統時間(此時間總是滾動時間的倍數,可以用於cron指令碼的同步)。在滾動時間到達時(在此例中是24小時以後),會產生一個新的日誌。
CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
此配置會在日誌檔案大小增長到5兆位元組時滾動該日誌。
ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
此配置會在錯誤日誌大小增長到5兆位元組時滾動該日誌,日誌檔名字尾會按照如下格式建立:errorlog.YYYY-mm-dd-HH_MM_SS 。
-----以下使用cronolog進行日誌分隔--------
tar xzvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure && make && make install
which cronolog
LogFormat "%h %l %u %t \"%r\" %>s %b" common //定義日誌的格式
-----------只要把工具的路徑替換就行了----------------
ErrorLog "|/usr/local/sbin/cronolog -l logs/www.bc.com-error_%Y%m%d.log 86400"
CustomLog "|/usr/local/sbin/cronolog -l logs/www.bc.com_access_%Y%m%d.log 86400" common
apachectl -t
例子:
按天輪詢(生產環境常見用法,推薦使用):
CustomLog "|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log" combined
按小時輪詢(生產環境較常見用法):
CustomLog "|/usr/local/sbin/cronolog /app/logs /access_www_ %Y%m%d%H.log" combined
6、AWstats日誌分析系統
apachectl -D DUMP_MODULES | grep cgi //確認是否載入了cgi模組
ls /usr/local/httpd/modules/ | grep cgi ////確認是否編譯過cgi模組
vi /usr/local/httpd/conf/httpd.conf
LoadModule cgid_module modules/mod_cgid.so
LoadModule cgi_module modules/mod_cgi.so
tar xzvf awstats-7.6.tar.gz -C /opt/
mv /opt/awstats-7.6 /usr/local/awstats
-------AWstats可以同時分析多個站點的資料---
vi /etc/hosts
192.168.80.100 www.aa.com
vi /etc/httpd.conf
ServerName www.aa.com //定義主機名
cd /usr/local/awstats/tools/
./awstats_configure.pl
http://localhost/awstats/awstats.pl?config=www.helo.com
----訪問日誌的網址-----
http://IP/awstats/awstats.pl?config=www.aa.com //先記錄下來,可以通過IP訪問
service httpd restart //重啟讓日誌格式生效
vi /etc/awstats/awstats.www.aa.com.conf //修改程式的主配置檔案
LogFile="/usr/local/httpd/logs/access_log" //修改日誌檔案位置,第50行
DirData="/var/lib/awstats" //220行 手動建立每次抓取的資料存放位置
mkdir /var/lib/awstats
----如果之前修改過日誌格式需要清空一下------
cd /usr/local/httpd/logs/
rm -f *log
service httpd restart //重新生成日誌檔案
cd /usr/local/awstats/tools/
chmod +x awstats_updateall.pl
./awstats_updateall.pl now //手動採集一次資料
crontab -e
*/5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now
crontab -l
service crond status
systemctl enable crond
systemctl list-unit-files | grep crond
------注意---需要檢查以下虛擬目錄授權----
vi /etc/httpd.conf
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "kgc.cn"
AuthType Basic
AuthUserFile /usr/local/httpd/user
require valid-user
#Require all granted
</Directory>
service httpd restart
http://192.168.80.100/awstats/awstats.pl?config=www.aa.com //訪問測試日誌系統工作情況
通過配置頁面自動跳轉優化統計頁面訪問
cd /usr/local/httpd/htdocs/
vi index.html
<html>
<head>
<meta http-equiv=refresh content="0;url=http://192.168.80.130/awstats/awstats.pl?co
nfig=www.lq.com"> //跳轉,當訪問192.168.80.130時,跳轉到分析系統中
</head>
<body></body>
</html>
注意:如果伺服器沒有做DNS服務的話,需在測試客戶端上設定hosts檔案才可使用域名訪問 vi /etc/hosts檔案