阿裡雲我問過很多站長都說非常的不錯了,不管是網速還是從性能都比其它主機要好,但阿裡雲就是貴那麼一點了,下面小編來給各位介紹阿裡雲服務器配置與性能優化
更換阿裡雲服務器有一陣了,相對於我以前的虛擬主機不是一個檔次。就比如說我在虛擬主機上被人放了後門文件,我把虛擬主機上的文件傳到雲服務器的時侯雲服務器立馬就報警存在漏洞,最主要的還是可控性。
一些相當配置記錄下:
一、配置Nginx處理日志
1、設置nginx日志格式(data/server/nginx/conf/nginx.conf)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
2、配置Nginx日志按天截斷
2.1、日志logrotate
/data/log/nginx/access/*.log {
daily
#dateext
rotate 1
missingok
ifempty
nocompress
olddir /data/log/nginx/access/days
sharedscripts
postrotate
[ ! -f /data/server/nginx/logs/nginx.pid ] || kill -USR1 `cat /data/server/nginx/logs/nginx.pid`
endscript
}
取文件名為nginx,存放在/etc/logrotate.d目錄下。logrotate方式比mv有很多優勢,自行google.不多說。
2.2、編寫日志處理腳本
#!/bin/bash
/usr/sbin/logrotate -vf /etc/logrotate.d/nginx
time=$(date -d "yesterday" +"%Y-%m-%d")
cd /data/log/nginx/access/days
for i in $(ls ./ | grep "^(.*).[[:digit:]]$")
do
mv ${i} ./$(echo ${i}|sed -n 's/^(.*).([[:digit:]])$/1/p')-$(echo $time)
done
for i in $(ls ./ | grep "^(.*)-([[:digit:]-]+)$")
do
tar zcvf ${i}.tar.gz ./${i}
/bin/rm -rf ./${i}
done
find /data/log/nginx/access/* -name "*.tar.gz" -mtime 30 -type f -exec /bin/rm -rf {} ;
簡單說明:執行Logrotate,把日志存放到/var/log/nginx/days目錄,文件名末尾加上昨天的日期,打包成tar.gz格式,超過30天的文件自動刪除
2.3、向crontab中添加定時任務
crontab -e
1 0 * * * /data/shs/nginxlogcut.sh > /dev/null 2>&1
二、日志分析
1、AWStats安裝
如果YUM裡已經添加了rpmforge的源就比較簡單了,直接yum install即可,如果沒有:
yum install perl-libwww-perl.noarch
wget http://prdownloads.sourceforge.net/awstats/awstats-7.0-1.noarch.rpm
rpm -ivh awstats-7.0-1.noarch.rpm
cd /usr/local/awstats/tools/
./awstats_configure.p
2、Awstats配置
因為往往要分析多個站點的日志,為了簡化操作
cp awstats.model.conf common.conf
修改其中幾個選項:
#vi common.conf
DNSLookup=0 #關閉DNSLookup可以提升99%的效率
DirData="/data/awstats/data" #指定統計數據存放的目錄
SkipFiles="REGEX[^*.gif] REGEX[^*.jpg] REGEX[^*.css] REGEX[^*.js]" #不分析圖片/樣式表和js文件
NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" #非頁面文件
LoadPlugin="tooltips" #顯示每個統計項目的提示
LoadPlugin="decodeutfkeys" #UTF8編碼問題
LoadPlugin="qqhostinfo" #加裝的利用純真IP庫判斷方可歸屬地
修改LIMITFLUSH加快處理速度,有效提高統計的速度(減少磁盤IO),並避免按月匯總數據導致的統計文件過大
#vi /usr/local/awstats/wwwroot/cgi-bin/awstats.pl
$LIMITFLUSH =
50000; # Nb of records in data arrays after how we need to flush data on disk
3、我的統計實例
#vi /etc/awstats/awstats.www.geekso.com.conf
Include "common.conf"
LogFormat=1 #指定日志格式,×nix為1,iis為2
LogFile="zcat /data/log/nginx/access/days/geekso.log-%YYYY-24-%MM-24-%DD-24.tar.gz |"
#LogFile="/var/log/iislogs/v/ex%YY-24%MM-24%DD-24.log"
#LogFile="/var/log/nginx/crsay.geekso.log-%YYYY-24-%MM-24-%DD-24"
SiteDomain="www.geekso.com"
HostAliases="geekso.com"
DefaultFile="index.html"
DirData="/data/www/awstats/data"
AllowAccessFromWebToAuthenticatedUsersOnly=1
AllowAccessFromWebToFollowingAuthenticatedUsers="geekso"
3、編寫日志分析腳本
#!/bin/bash
ilog=/data/www/awstats/logcron/awstats_cron.log
awscripts=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
awpages=/usr/local/awstats/tools/awstats_buildstaticpages.pl
echo "">>$ilog
echo Starting Awstats on: $(date) >>$ilog
perl $awpages -update -config=www.geekso.com -lang=cn -dir=/data/www/awstats/geekso -awstatsprog=$awscripts
#perl $awscripts -update -config=site2
#perl $awscripts -update -config=site2 -databasebreak=day
#perl $awscripts -update -config=site3
#perl $awscripts -update -config=site3 -databasebreak=day
echo Ending Awstats on: $(date) >>$ilog
echo "------------------------------" >>$ilog
4、向crontab中添加定時任務
#crontab -e
1 1 * * * /data/shs/awstats.sh > /dev/null 2>&1
附:
AWStats統計指標說明:
參觀者:按來訪者不重復的IP統計,一個IP代表一個參觀者;
參觀次數:一個參觀者可能1天之內參觀多次(比如:上午一次,下午一次),所以按一定時間內(比如:1個小時),不重復的IP數統計,參觀者 的訪問次數;
網頁數:不包括圖片,CSS, JavaScript文件等的純頁面訪問總數,但如果一個頁面使用了多個幀,每個幀都算一個頁面請求;
文件數:來自浏覽器客戶端的文件請求總數,包括圖片,CSS,JavaScript等,用戶請求一個頁面是,如果頁面中包含圖片等,所以對服 務器會發出多次文件請求,文件數一般遠遠大於文件數;
字節:傳給客戶端的數據總流量;
來自REFERER中的數據:日志中的參考(REFERER)字段,記錄了訪問相應網頁之前地址,因此如果用戶是通過搜索引擎的搜索結果點擊 進入網站的,日志中就會有用戶在相應搜索引擎的查詢地址,這個地址中就可以通過解析將用戶查詢使用的關鍵詞提取出來。
三、防止跨目錄訪問
你的服務器www目錄下有多個網站,當某一個網站被人攻進去後,如果你沒有做跨目錄訪問,那麼他都能看到www目錄下的所有文件,甚至服務器上的系統目錄文件。
做法是在nginx下的conf目錄下為每個站點的conf設置open_basedir訪問的目錄
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/data/www/geekso/";
四、禁用危險的函數
php.ini建議禁止的函數如下:
disable_functions = pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_exec, pcntl_getpriority, pcntl_setpriority, eval, popen, passthru, exec, system, shell_exec, proc_open, proc_get_status, chroot, chgrp, chown, ini_alter, ini_restore, dl, pfsockopen, openlog, syslog, readlink, symlink, popepassthru, stream_socket_server, fsocket, chdir
五、PHP Zend Opcache 安裝
opcache包下載地址:http://pecl.php.net/package/ZendOpcache
1、wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
tar zxvf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
2、修改PHP.INI配置文件,在配置文件末尾添加:
[opcache]
zend_extension= "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626