歡迎您光臨本站 註冊首頁

Linux哲學思想:組合小軟體完成大任務

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0
說明:本實驗均採用最基本的軟體,但是依然能實現在線服務,可以結合這些軟體實現一個web伺服器的正常在線服務,其中vsftp是用來為後台程序員提供程序的改動,並方便上傳和和修改的,這裡為了保證系統的安全,使用vsftpd的虛擬用戶,而web伺服器依然採用最穩定的apache,結合php,整合memcached,為資料庫提供緩存,同事結合squid來提供緩存伺服器,當然你可以選擇nginx和varnish這些輕量級的軟體來完成這些功能;為了提高查詢的速度,使用sphinx來建立索引,同時在保證web頁面的備份,使用rsync來實現鏡像的備份,本實驗是自己結合廢棄的dell2950來實現的這些功能,好了,廢話不多說配置細的安裝和配置過程本實例中雖然使用的是一台伺服器做的,但是裡面的架構還是很明顯的,如下圖所示,我就把他逐個分解開,方便理解! 硬體環境:
# dmidecode -s system-product-name 硬體製造商
PowerEdge 2950 # lsb_release -a 系統版本
LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics -4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 5.7 (Final)
Release: 5.7
Codename: Final # ethtool -i eth0 網卡的驅動版本
driver: bnx2
version: 2.0.21
firmware-version: bc 2.9.1
bus-info: 0000:05:00.0 # free -m |grep "Mem" | awk '{print $2}' 內存大小
3947 # cat /proc/cpuinfo |grep -c processor cpu的個數
4 LAMP vsftpd memcached sphinx rsync 規劃及配置:
(一)所用到的用戶名和密碼:
1.系統的用戶名和密碼:
root centos123
user redhat 2.mysql的用戶名和密碼:


root redhat 3.vftpd的虛擬用戶名和密碼:
admin 123456 讀 寫 刪除
ftpuser 123456 讀 寫
ooopic 123456 讀 (下載)
(二)所有的軟體包安裝在/usr/local/下對應的軟體的名字
1.http--->/user/local/apache/
對應的文件:
配置文件目錄:/etc/httpd/
數據文件目錄:/usr/local/apache/htdocs
虛擬主機目錄(整合到ftp上,方便程序員更新):/home/ftp/
2.mysql--->/user/local/mysql/
對應的文件:
配置文件:/etc/my.cnf
數據文件:/mydata/data
3.php--->/usr/local/php
4.vsftp使用rpm包安裝的
對應的文件:
配置文件:/etc/vsftpd/vsftpd.conf
網頁存放的目錄:/var/ftp/webpages
5.memcache--->/usr/local/memcached/
6.sphin--->/usr/local/sphin
對應的文件:
配置文件目錄:/usr/local/sphinx/etc/sphinx.conf
索引產生的數據文件:/usr/local/sphinx/var/data
7.squid---/usr/local/squid2.6
對應的文件
配置文件:/usr/local/squid2.6/etc/squid.conf
緩存數據目錄:/var/spool/squid/
8.rsync---/usr/local/rsync
對應的文件
配置文件:/usr/local/rsync/etc/rsyncd.conf

(三)安裝和實施的過程:
rpm -qa|grep httpd
rpm -e httpd
rpm -qa|grep mysql
rpm -e mysql
rpm -qa|grep php
rpm -e php yum -y remove httpd #編譯環境的初始化
yum -y install yum-fastestmirror
yum -y update
yum -y install patch make gcc gcc-c gcc-g77 flex bison file
yum -y install libtool libtool-libs autoconf kernel-devel
yum -y install libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel
yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel
yum -y install glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel


yum -y install ncurses ncurses-devel curl curl-devel e2fsprogs
yum -y install e2fsprogs-devel krb5 krb5-devel libidn libidn-devel
yum -y install openssl openssl-devel vim-minimal nano sendmail
yum -y install fonts-chinese gettext gettext-devel
yum -y install ncurses-devel
yum -y install gmp-devel pspell-devel
yum -y install unzip yum -y install autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers #安裝libmcrypt
wget -c http://soft.vpser.net/web/libmcrypt/libmcrypt-2.5.8.tar.gz
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make && make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make && make install
cd http://www.cnblogs.com/ #安裝mhash
wget -c http://soft.vpser.net/web/mhash/mhash-0.9.9.9.tar.gz
tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make && make install
cd ../ #安裝libiconv
wget -c http://soft.vpser.net/web/libiconv/libiconv-1.13.tar.gz
tar zxvf libiconv-1.13.tar.gz
cd libiconv-1.13/
./configure --prefix=/usr/local
make && make install
cd ../ #添加鏈接
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so


ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 #安裝mcrypt
wget -c http://soft.vpser.net/web/mcrypt/mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
./configure
make && make install
cd ../ #mysql的安裝和配置
添加用戶和組
#groupadd -g 3306 mysql
#useradd -u 3306 -g mysql -M -s /sbin/nologin mysql
#chown -R mysql:mysql /mydata/ //把當前的文件的屬主和屬組改成mysql
#tar xvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local //解壓到/usr/local目錄下
#ln -sv /usr/local/mysql-5.5.15-linux2.6-i686 /usr/local/mysql //做一個鏈接
#cd /usr/local/mysql
#chown -R root:mysql . //設置當前的文件的屬主為root屬組為mysql
#scripts/mysql_install_db --user=mysql --datadir=/mydata/data //安裝mysql,並且指定用戶和數 據存放的位置.
#cp support-files/mysql.server /etc/init.d/mysqld
#chkconfig --add mysqld //啟動
這個時候就可以啟動mysql服務了,但是這個時候會報錯,以為沒有mysql的配置文件.
#cp support-files/my-large.cnf /etc/my.cnf //拷貝樣例修改成
#vim /etc/my.cnf
添加一行: datadir=/mydata/data 來指定數據的存放位置
這個時候就可以啟動服務了
#service mysqld start
但是這個時候運行mysql的時候會出現沒有這樣的命令,這是由於執行此命令的二進位文件 在/usr/local/mysql/bin下,而系統的PATH不包含這個路徑,所以這個時候需要修改環境變數
export PATH=$PATH:/usr/local/mysql/bin 這只是暫時的,如果想要長久有效可以修改/etc/profile 文 件,在其中加入
PATH=$PATH:/usr/local/mysql/bin ,然後source /etc/profile 重新讀取一下文件就行了.


這個時候在你還會發現mysql的lib庫不是正常的路徑,如果不進行特意指定,會在以後的運行中出現 錯誤,所有要指定一下lib的位置,這個可以通過編輯/etc/ld.so.conf.d/*.conf文件進行配置,
#vim /etc/ld.so.conf.d/mysql.conf
添加/usr/local/mysql/lib 保存退出
# ldconfig //這個命令很關鍵,就是同步一下庫文件的,如果不使用這個命令,即使做了修改也不 會同步信息的.
當然還有頭文件,這個需要做一個連接如下:
#ln -sv /usr/local/mysql/include /usr/include/mysql
我們還會考慮到幫助文件,而幫助文件的修改在/etc/man.conf中進行
#echo "MANPATH /usr/local/mysql/man" >> /etc/man.conf
這樣一個完整的mysql的配置就算完成了. mysqladmin -u root password redhat
創建資料庫ro和表test,並且插入數據,如下所示:
mysql> CREATE DATABASE ro;
mysql> USE ro;
mysql> CREATE TABLE test (ID bigint (20) NOT NULL AUTO_INCREMENT UNIQUE,Name varchar(30) NOT NULL ,Age INT(10),Gender enum('F','M') DEFAULT 'M');
mysql> INSERT INTO test (Name) VALUE ('luowei');
mysql> INSERT INTO test (Name) VALUE ('test2');
mysql> INSERT INTO test (Name) VALUE ('test3');
mysql> INSERT INTO test (Name) VALUE ('test4');
mysql> INSERT INTO test (Name) VALUE ('test5'); #編譯安裝apache
#tar xf httpd-2.2.19.tar.bz2
#./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable- modules=most --enable-mods-shared=most
#make
#make install
這樣簡單的編譯安裝算是結束,接下來就是配置了,從其他機器上拷貝一個/etc/init.d/httpd的腳 本,然後進行修改,把裡面的
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/httpd} //對應到apache路徑


然後把httpd放到/etc/init.d/目錄下.
附上apache的啟動腳本:
#vim /etc/init.d/httpd
#!/bin/bash
#
# httpd Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid # Source function library.
. /etc/rc.d/init.d/functions if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi # Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"} INITLOG_ARGS="" apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10} start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
} stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=$?
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
fi
echo
} case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd


RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl [email protected]
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac exit $RETVAL 配置apache文件:
vim /usr/loal/apache/conf/httpd.conf
註釋掉DocumentRoot "/usr/local/apache/htdocs"
取消Include conf/extra/httpd-vhosts.conf 前面的註釋
添加如下內容:
User vuser
Group vuser //這個是為後面網頁位於ftp上,是使用的用戶
DirectoryIndex index.php index.html
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
到/usr/local/apache/conf/extra修改httpd-vhosts.conf文件
如下所示:
NameVirtualHost 192.168.0.114:80
<VirtualHost 192.168.0.114:80>
DocumentRoot "/home/ftp/"
ServerName web.test.com
ErrorLog "/var/log/webpages/web.test.com.error_log"
CustomLog "/var/log/webpages/web.test.com.access_log" common
<Directory "/home/ftp/">
Order Deny,Allow
allow from ALL
</Directory>
</VirtualHost>
配置偽靜態
,打開 Apache 的配置文件 httpd.conf ,確保LoadModule rewrite_module modules/mod_rewrite 是開啟的;
然後啟動.htaccess 把AllowOverride None 修改為: AllowOverride All
最後在 httpd.conf中添加mod_rewrite 規則修正符:
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9] \.html
RewriteRule ^(.*?(?:index|dispbbs))-([-0-9] )\.html$ $1.php? __is_apache_rewrite=1&__rewrite_arg=$2
</IfModule> # 安裝php


php的安裝包使用的是php-5.3.6.tar.bz2,這是目前最新的穩定的版本.
編譯安裝:
#tar xf php-5.3.6.tar.bz2
#cd php-5.3.6
# ./configure --prefix=/usr/local/php5 --sysconfdir=/etc/php --enable-mbstring --with- apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql
#make //編譯
#make install //安裝
#cp php.ini-production /usr/local/php5/lib/php.ini
這是php基本上最後的一個配置文件,這個時候要想讓apache識別php結尾的網頁,還要 想/etc/httpd/httpd.conf文件中添加如下信息
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
LoadModule php5_module modules/libphp5.so
同時還要修改DirectoryIndex index.php index.html cp /usr/lib64/httpd/modules/libphp5.so /usr/local/apache/modules/ //如果編譯未發現php的模塊的時 候,可以通過這個方法來解決載入php類庫的模塊的問題 # vim /usr/local/php5/lib/php.ini的文件,當然你可以簡單的使用下面的命令進行修改
# php extensions
sed -i 's#output_buffering = Off#output_buffering = On#' /usr/local/php5/lib/php.ini
sed -i 's/post_max_size = 8M/post_max_size = 50M/g' /usr/local/php5/lib/php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/g' /usr/local/php5/lib/php.ini
sed -i 's/;date.timezone =/date.timezone = PRC/g' /usr/local/php5/lib/php.ini # 安裝zend
wget http://soft.vpser.net/web/zend/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
mkdir -p /usr/local/zend/
cp ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/local/zend/ cat >>/usr/local/php/etc/php.ini<<EOF
[Zend Optimizer]
zend_optimizer.optimization_level=1
zend_extension="/usr/local/zend/ZendOptimizer.so"


EOF # 安裝PHP加速緩存插件eAccelerator
wget http://soft.vpser.net/web/eaccelerator/eaccelerator-0.9.5.3.tar.bz2
tar jxvf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3/
/usr/local/php5/bin/phpize
顯示結果:
[[email protected] eaccelerator-0.9.5.3]# /usr/local/php5/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519 ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php5/bin/php-config
make
make install
cd ../ mkdir -p /usr/local/eaccelerator_cache
cat >>/usr/local/php/etc/php.ini<<EOF
[eaccelerator]
zend_extension="/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/usr/local/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys = "disk_only"
eaccelerator.sessions = "disk_only"
eaccelerator.content = "disk_only"
EOF ####################
# 啟動apache
service httpd start # 重啟apache
service httpd restart

# 啟動mysql
/etc/init.d/mysql start
# 開機自動啟動
vi /etc/rc.local
# 然後添加如下內容
ulimit -SHn 51200
/etc/init.d/mysql start
/etc/init.d/httpd start (四)虛擬用戶配置
需求 建立三個用戶使用相同根目錄
每個用戶許可權不同
admin 讀 寫 刪除
ftpuser 讀 寫
haifeng 讀 (下載)

1. 創建虛擬用戶的口令庫文件,即用戶的賬戶密碼



vi /etc/vsftpd/user.txt

admin
123456
ftpuser
123456
ooopic
123456

格式為奇數行是賬號名,偶數行是對應的密碼.
2. 生成vsftpd的認證庫文件(以 .db 結尾的資料庫文件)
db_load -T -t hash -f /etc/vsftpd/user.txt /etc/vsftpd/rz.db
chmod 600 rz.db

註:如果沒有db_load命令,可以使用 yum –y install db4 db4-utils安裝
3. 建立虛擬用戶所需要的pam配置文件 =》調用上面的認證文件

vi /etc/pam.d/vsftpd.vu(新建)

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/rz
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/rz

4. 建立虛擬用戶要訪問的目錄並設置相應的許可權

useradd -d /home/ftp/ vuser
chmod 700 /home/ftp

5. 在主配置文件vsftpd.conf中添加如下設置

guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.vu


6. 針對不同虛擬用戶設置不同許可權

① .創建目錄
. mkdir /etc/vsftpd/vuser_conf

② . 在主配置文件vsftpd.conf中添加如下設

user_config_dir=/etc/vsftpd/vuser_conf

③ .在目錄中設置個用戶的許可權

Vi /etc/vsftpd/vuser_conf/admin

## 讀寫下載
write_enable=YES
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
download_enable=Yes
Vi /etc/vsftpd/vuser_conf/ftpuser

## 讀寫

write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
download_enable=NO


Vi /etc/vsftpd/vuser_conf/ooopic

##只能下載

write_enable=NO
anon_world_readable_only=NO


anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_umask=022
download_enable=yes

7. 重啟vsftpd服務

Service vsftpd restart
(五)squid的安裝和配置
#squid編譯安裝
1,設置「文件描述符」,並設置用戶同時打開文件數量
# vi /usr/include/bits/typesizes.h
# vi /usr/include/linux/posix_types.h
把裡邊的 #define __FD_SETSIZE 1024 改成 65536
2,設置當前環境
# ulimit -Hs 65536
# ulimit -n 65536
H參數是硬性限制,s是堆棧上限,n是文件描述符上限
也可以永久修改這些限制,開機自動生效,配置如下:
vi /etc/security/limits.conf,添加以下內容
* soft nofile 65536
* hard nofile 65536
3,下載編譯squid
可以到官方網站下載自己需要的版本,這裡選用2.6版本
http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE23.tar.gz
tar xf squid-2.6.STABLE23.tar.gz
cd squid-2.6.STABLE23 ./configure --prefix=/usr/local/squid2.6 \
--enable-gnuregex \
--enable-icmp \
--enable-linux-netfilter \
--enable-default-err-language="Simplify_Chinese" \
--enable-follow-x-forwarded-for \
--enable-storeio=aufs,ufs \
--enable-kill-parent-hack \
--enable-cache-digests \
--with-maxfd=65536 \
--with-pthreads \
--enable-dlmalloc \
--enable-poll \
--enable-stacktraces \
--enable-removal-policies=heap,lru \
--enable-delay-pools
make
makeinstall
安裝完畢后,可以到/usr/local/squid2.6目錄去查看相關生成的文件,一般編譯不出錯,不會有啥問題 .
4,配置squid.conf配置文件
squid.conf 配置詳細參數:
http_port 3128 #一般squid僅對80埠的HTTP服務加速.使用http_port指令讓squid偵聽在該埠: http_port 80 假如想讓squid既作cache代理,又作加速器,那麼列出這2個埠,但是所有指定的埠都必須在一條 命令行上: http_port 80 http_port 3128 logfile_rotate 3 #周期性的滾動日誌文件,以阻止它們變得太大.為了合理控制磁碟空間消耗,在cron里使用如下命 令: %squid -k rotate 例如,如下任務介面在每天的早上4點滾動日誌: 0 4 * * * /usr/local/squid/sbin/squid -k rotate 工作過程:該命令做兩件事.,它關閉當前打開的日誌文件.然後,通過在文件名后加數字擴展 名,它重命名cache.log,store.log,和access.log.例如,cache.log變成cache.log.0,cache.log.0變成 cache.log.1,如此繼續,滾動到logfile_rotate選項指定的值. cache_mem 1024 MB 指定squid可以使用的內存理想值,建議設為內存的1/3. #此參數並非指定進程的最大值,它只是設定一個squid能夠用於多少額外的內存來緩存對象的限制值 ,squid在其他方面也需要使用內存. read-only


read-only選項指示Squid繼續從cache_dir讀取文件,但不往裡面寫新目標.他在squid.conf文件里看起 來如下:
cache_dir ufs /cache0 7000 16 256 read-only
如果你想把cache文件從一個磁碟遷移到另一個磁碟,那麼可使用該選項.如果你簡單的增加一個 cache_dir,並且刪除另一個,squid的命中率會顯著下降.在舊目錄是read-only時,你仍能從那裡獲 取cache命中.在一段時間后,就能從設置文件里刪除read-only緩存目錄.
max-size
使用該選項,你能指定存儲在cache目錄里的最大目標大小.例如:
cache_dir ufs /cache0 7000 16 256 max-size=1048576
注意值是以位元組為單位的.在大多數情況下,你不必增加該選項.如果你做了,請儘力將所有 cache_dir行以max-size大小順序來存放(從小到大). #cache_swap_low和cache_swap_high指令控制了存儲在磁碟上的對象的置換.它們的值是最大cache 體積的百分比,這個最大cache體積來自於所有cache_dir大小的總和.例如: cache_swap_low 90 cache_swap_high 95 如果總共磁碟使用低於cache_swap_low,squid不會刪除cache目標.如果cache體積增加,squid會逐 漸刪除目標.在穩定狀態下,你發現磁碟使用總是相對接近cache_swap_low值.你可以通過請求 cache管理器的storedir頁面來查看當前磁碟使用狀況 請注意,改變cache_swap_high也許不會對squid的磁碟使用有太大效果.在squid的早期版本里,該參 數有重要作用;然而現在,它不是這樣了. 如果不想squid緩存任何文件,如某些空間有限的專有系統,可以使用null文件系統(這樣不需要哪些 緩存策略) cache_dir null /tmp cache_vary on (默認 on 表示可以緩存靜態文件) acl apache rep_header Server ^Apache broken_vary_encoding allow apache cache_replacement_policy heap GDSF memory_replacement_policy heap GDSF #cache的替換策略,對於小文件比較多的緩存伺服器,採用GDSF容易獲得比較好的命中


率,特別是內存命中率. minimum_object_size 0 KB maximum_object_size 6 MB 大於該值得對象將不被存儲.如果要提高訪問速度,就降低該值;如果想最大限度的節約帶寬,降低成 本,就增加該值. maximum_object_size_in_memory 1024 KB 設置較小的maximum_object_size_in_memory值有助於有效控制squid過度佔用內存 cache_dir aufs /opt/squid/cache 4000 16 32 cache_dir aufs /opt/squid/cachedir/cache01 4000 16 32 cache_log /opt/squid/var/logs/cache.log #cache_dir指令是squid.conf配置文件里最重要的指令之一.它告訴squid以何種方式存儲cache文件到 磁碟的什麼位置.cache_dir指令取如下參數: #緩存目錄的設置,可以設置多個緩存目錄,語法為:<cache_dir> <aufs|ufs> <目錄所在> <MBytes大小 > <dir1> <dir2> cache_dir aufs /opt/squid/cachedir/cache01 4000 16 32表示 其中4000該目錄下使用的緩衝值為4000MB 16是cache01下子目錄數量 32是cache01下子目錄的下一 級目錄的數量 strip_query_terms off #該指令是另一個隱私保護功能.在記錄請求前,Squid刪除了查詢條件.假如日誌文件不幸落入壞人 之手,他們不會找到任何用戶名和密碼.當該指令激活時,在問號(?)之後的所有位元組被刪除.例如, 某個URl如下: http://auto.search.msn.com/response.asp?MT=www.kimo.com.yw&srch=3&prov=&utf8 會被記錄為: http://auto.search.msn.com/response.asp? acl nolog urlpath_regex -i \.dll emulate_httpd_log on logformat combined %&gt;a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}&gt;h" %Ss:%Sh !nolog #所有日誌格式按照apache 標準格式輸出,並且不記錄nolog定義的訪問日誌 eg:192.168.19.212 - - [23/Oct/2008:00:00:24 0800] "GET http://images.zhaopin.com/new4/images/nub/1.gif HTTP/1.0" 304 0 "http://www.zhaopin.com/beijing/? DYWE=1224581170741.435762.1224638441.1224644873.3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)" TCP_IMS_HIT:NONE 要記錄源IP地址: logformat combined %{X-Forwarded-For1}&gt;h %&gt;a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}&gt;h" %Ss:%Sh 日誌即為:82.145.157.175 192.168.10.114 - - [14/Dec/2009:09... 同理: acl nolog urlpath_regex -i \.css \.js \.swf cache_access_log /opt/squid/var/logs/access.log combined !nolog access_log /opt/squid/var/logs/newaccess.log !nolog 上面記錄的日誌中就不包含 \.css \.js \.swf類型的訪問日誌 註:apache格式串變數的含義: %...a: 遠程IP地址


%...A: 本地IP地址
%...B: 已發送的位元組數,不包含HTTP頭
%...b: CLF格式的已發送位元組數量,不包含HTTP頭.例如當沒有發送數據時,寫入『-』而不是0.
%...{FOOBAR}e: 環境變數FOOBAR的內容
%...f: 文件名字
%...h: 遠程主機
%...H 請求的協議
%...{Foobar}i: Foobar的內容,發送給伺服器的請求的標頭行.
%...l: 遠程登錄名字(來自identd,如提供的話)
%...m 請求的方法
%...{Foobar}n: 來自另外一個模塊的註解「Foobar」的內容
%...{Foobar}o: Foobar的內容,應答的標頭行
%...p: 伺服器響應請求時使用的埠
%...P: 響應請求的子進程ID.
%...q 查詢字元串(如果存在查詢字元串,則包含「?」後面的部分;否則,它是一個空字元串.)
%...r: 請求的第一行
%...s: 狀態.對於進行內部重定向的請求,這是指*原來*請求 的狀態.如果用%...s,則是指後來的 請求.
%...t: 以公共日誌時間格式表示的時間(或稱為標準英文格式)
%...{format}t: 以指定格式format表示的時間
%...T: 為響應請求而耗費的時間,以秒計
%...u: 遠程用戶(來自auth;如果返回狀態(%s)是401則可能是偽造的)
%...U: 用戶所請求的URL路徑
%...v: 響應請求的伺服器的ServerName
%...V: 依照UseCanonicalName設置得到的伺服器名字 cache_store_log none #跟其他日誌文件一樣,Squid將最新的日誌條目寫到該文件的末尾.某個給定的URI可能出現在日誌 文件里多次.例如,它先被cache,然後刪除,接著又cache住.僅僅最近來的日誌條目才反映目標的 當前值. Log_fqdn:如Client有domain name的話,access.log便會把domain name完整的記錄下來.否則只記錄 IP地址,由於開啟之後,squid需要訪問DNS來解析客戶的域名,會加重伺服器負載,導致性能下降. ftp_user:假如需要使用 anonymous ftp來獲取檔案,會送出後面所接的字串當 password. Dns_children: Squid本身附有一個dnsserver程序來處理Client端domain name的需求,一般來說,當 proxy有較大的使用量時,dns children設定較多可以處理的domain name request較多也較快,但當設 定過多的dnsserver對系統的performance也會有相當的影響,可使用cache manger來觀看每個 dnsserver的使用量決定數量的多少.


reference_age:物件的LRU,若比值大的話便清除cache中的物件.例如設定一星期,如一星期內沒有 存取動作,就把物件從cache中移出,假如值為零的話,物件會存放於cache中直到cache swap上限. Read_time:當proxy與web連接后,經過read_time的時間接收不到web站傳送資料便斷線,有可能是 remote server或是網路連接突然性的中斷等因素. Shutdown_lifetime:當cache server收到SIGTERM或是SIGHUP時,squid會對使用端發出"shutdown pending"訊息,並關掉所有正在進行中的動作,直到squid重新啟動.
Err_html_text:使用者瀏覽網頁中,常常遇到不存在或連線中斷的網站,squid本身會回應一個error message至用戶端,squid管理者可使用這個參數來改變回應至用戶端的error message,來連接至管理 者的homepage. Deny_html_text:若遇到access control fail的情況,回應一個access fail message,squid本身提供一個 簡單的message,可利用此功能連接至homepage. ipcache_size 1024 # ip對應cache的大小為1024 ipcache_low 95 ipcache_high 95 fqdncache_size 1024 域名全稱cache的大小為1024(默認1024) #禁止緩存
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:\\ ?
acl QUERY urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi
acl denyssl urlpath_regex -i ^https:\\
no_cache deny QUERY
no_cache deny denyssl
#上面幾個就是說遇到URL中有包含cgi-bin和以https:\\開頭的都不要緩存,
#還有asp、cgi、php等動態腳本也不要緩存,
#這些腳本通常都是動態更新的,這樣數據不同步.
#還有https://開通的不緩存是一般我們進行電子商務交易,
#例如銀行付款等都是採用這個的,如果把信用卡號什麼緩存那不是很危險. 本機器的配置文件如下:
#vim /usr/local/squid2.6/etc/squid.conf


acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
visible_hostname squid.abcd.cn
http_access allow localhost
http_access allow all
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/log/squid/squid.pid
cache_effective_user nobody
cache_effective_group nobody
http_port 80 vhost vport
cache_peer 10.10.10.1 parent 80 0 no-query no-digest originserver name=mail
cache_peer_domain mail mail.abcd.cn
cache_peer_access mail allow all
hierarchy_stoplist cgi-bin ?
cache_vary on #cache the static pages
cache_mem 1024 MB # 1/3 of mem
cache_swap_low 90 #the min % swap cache of cache_dir
cache_swap_high 95 #the max % swap cache of cache_dir minimum_object_size 0 KB
#the minimum of the object size maximum_object_size 6 MB
#the max of the object size ,if bigger,it will not be cached
#if you want to improve the v,please let it bigger,else ,you can save the bandwith broken_vary_encoding allow apache
cache_replacement_policy heap GDSF
memory_replacement_policy heap GDSF


#the small file size ,the max cached when used GDSF maximum_object_size_in_memory 1024 KB
#small ,you can easy control the mem used ipcache_size 1024 #the ip cache,default is 1024
ipcache_low 90 #the min ip cache
ipcache_high 95 #the max ip cache
fqdncache_size 1024 # the fqdn cache size (default is 1024) cache_replacement_policy lru
memory_replacement_policy lru
cache_dir ufs /var/spool/squid 7000 16 256 max_size=1048576
acl QUERY urlpath_regex cgi-bin \? \.js
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
coredump_dir /var/spool/squid
############################ header_access Via deny all
header_access Server deny all
header_access X-Cache deny all
header_access X-Cache-Lookup deny all
httpd_suppress_version_string off #below the ,it doesn't cached include https,.php,.asp,.jsp,.cgi
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:\\ ?
acl QUERY urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi
acl denyssl urlpath_regex -i ^https:\\
no_cache deny QUERY
no_cache deny denyssl # mkdir /var/log/squid //建立日誌目錄
# chown nobody:nobody /var/log/squid //用戶nobody用戶和組來運行squid
# mkdir /var/spool/squid //建立squid緩存目錄
# chown nobody:nobody /var/spool/squid //同樣,給許可權
# PATH=$PATH:/usr/local/squid2.6/sbin/ //修改環境變數(臨時有效)
# vim /etc/profile //添加上面的語句也能實現(永久,但是重啟後生效)
# squid -z //建立緩存目錄
# ls /var/spool/squid //查看是否建立成功
5,開機自動運行squid
vi /etc/rc.d/rc.local
將以下內容添加最下邊


ulimit -Hs 65536
ulimit -n 65536
/usr/local/squid2.6/sbin/squid
如果你添加ulimit到/etc/security/limits.conf配置文件了,就不需要在這裡寫了.
更改配置文件后,重新載入:
/usr/local/squid2.6/sbin/squid -k reconfigure
停止squid程序:
/usr/local/squid2.6/sbin/squid -k shutdown
查看緩存信息:
squidclient -p 80 mgr:info
squidclient -p 80 mgr:mem
(六)memcached的安裝和配置
#memcached的編譯安裝
wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz tar xf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure --prefix=/usr/local/libevent
make && make install tar xf memcached-1.4.4.tar.gz
cd memcached-1.4.4
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make && make install /usr/local/memcached/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /tmp/memcached.pid
memcached的基本設置:
1.啟動Memcache的伺服器端:
# /usr/local/memcached/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /tmp/memcached.pid -d選項是啟動一個守護進程,
-m是分配給Memcache使用的內存數量,單位是MB,我這裡是10MB,
-u是運行Memcache的用戶,我這裡是root,
-l是監聽的伺服器IP地址,如果有多個地址的話,我這裡指定了伺服器的IP地址127.0.0.1,
-p是設置Memcache監聽的埠,我這裡設置了12000,最好是1024以上的埠,
-c選項是最大運行的併發連接數,默認是1024,我這裡設置了256,按照你伺服器的負載量來設定,
-P是設置保存Memcache的pid文件,我這裡是保存在 /tmp/memcached.pid, 2.如果要結束Memcache進程,執行: # kill `cat /tmp/memcached.pid` 也可以啟動多個守護進程,不過埠不能重複. 檢測:


[[email protected] memcached-1.4.4]# netstat -tunl | grep 12000
tcp 0 0 127.0.0.1:12000 0.0.0.0:* LISTEN
udp 0 0 127.0.0.1:12000 0.0.0.0:* (七)sphinx的安裝和配置過程
#sphinx的安裝和配置
wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz
yum install mysql-devel -y
tar xf sphinx-0.9.9
cd sphinx-0.9.9
  #cd /usr/local/sphinx
  #cp etc/sphinx.conf.dist etc/sphinx.conf
  #vim etc/sphinx.conf #修改配置文件
  
# Minimal Sphinx configuration sample (clean, simple, functional)
# source ooopic_src
{
type = mysql sql_host = 127.0.0.1
sql_user = root
sql_pass = redhat
sql_db = ro //我使用的是上面測試的時候使用的資料庫ro
sql_port = 3306 # optional, default is 3306 sql_query = SELECT * FROM test # sql_attr_uint = ID
#sql_attr_timestamp = created sql_query_info = SELECT ID FROM test WHERE id=$id
}
index ooopic_index
{
source = ooopic_src
path = /usr/local/sphinx/var/data/ooopic_index
docinfo = extern
charset_type = utf-8
}
indexer
{
mem_limit = 1024M
}
searchd
{
port = 9312
log = /usr/local/sphinx/var/log/searchd.log
query_log = /usr/local/sphinx/var/log/query.log
read_timeout = 5
max_children = 30
pid_file = /usr/local/sphinx/var/log/searchd.pid


max_matches = 1000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
}
4. 建立索引
#/usr/local/sphinx/bin/indexer --config sphinx.conf --all ooopic_index 5. 啟動sphinx後台服務
# /usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf -i ooopic_index &
(八)rsync的安裝和配置
tar xf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure --prefix=/usr/local/rsync
make && make install
#vim /etc/rsyncd.conf 修改配置文件如下所示:
uid = nobody
gid = nobody
use chroot = no
max connections = 5
pid file = /var/run/rsync.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log [apache]
path = </user/ooopic/apache>
ignore errors
read only = no
list = yes
auth users = rsync
secrets file = /etc/rsyncd.secrets 編輯/etc/rsyncd.secrets文件
#vim /etc/rsyncd.secrets 添加如下內容
jack:password
*註:一定要把rsyncd.secrets的許可權設為600,否則不能正常進行身份認證.
包括--password-file指向的密碼文件,也必須設成600許可權 修改/etc/xinetd.d/rsync的文件如下所示:
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure = USERID
} # echo "/usr/local/bin/rsync --daemon" >> /etc/rc.local //添加到開機自動啟動 實現本地目錄之間的同步:
# rsync -av --progress --temp-dir=/tmp /home/ftp/ /user/ooopic/apache/ //我這裡使用的 是一個伺服器上面做的,所以就只是做一個目錄之間的同步了,你可以實現不同主機之間的數據同步 ,這個可以結合網上資料,然後自己做改正,下面也有不同主機之間同步的命令. 實現遠程主機之間的同步:


a) rsync -avz --progress <src-dir> /">[email protected]::<dst-dir>/
b) rsync -avz --progress <src-dir> /">[email protected]::<dst-dir>/ --password- file=/home/jack/rsync.jack
c) rsync -avuz --progress --delete <src-dir> /">[email protected]::<dst-dir>/ --password- file=/home/jack/rsync.jack
d) rsync -avz --progress /[email protected]::<dst-dir>/<src-dir> <dst-dir> 開機自動添加到任務列表中進行指定時間內同步
vim /etc/rc.local 添加如下內容
echo "* * * * * /usr/bin/rsync -av --progress --temp-dir=/tmp /home/ftp/ /user/ooopic/apache/ >/dev/null" >/var/spool/cron/root
前面的功能都實現之後,我在原有的基礎之上編譯安裝nginx,當讓這個nginx是一個輕量級的軟體, 他不僅可以充當web伺服器,還可以實現反向代理,值得學習,我下面只是介紹一下這個軟體的編譯 安裝過程以及簡單的配置,想學習更多,可以到其官網http://www.nginx.com/上查詢更多知料. (九)nginx的安裝和配置
yum install gcc openssl-devel pcre-devel zlib-devel # groupadd nginx
# useradd -g nginx -s /bin/false -M nginx ./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--with-pcre make && make install


修改配置文件
vim /etc/nginx/nginx.conf
把埠號改為8080防止和apache衝突
修改的內容如下:
worker_processes 4; //我是用的是4個cpu所以就改為4
當然如果我想使用nginx來提供web服務的時候,我可以在下面做具體的設置,做緩存伺服器的時候, 需要使用正則了,比如緩存圖片格式的設置 作為緩存伺服器,如下所示(僅是例子)
http
{
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m
inactive=24h max_size=1g;
server {
location / {
proxy_pass http://192.168.0.114;
proxy_set_header Host $host;
proxy_cache STATIC;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
}
}
} 然後就是添加nginx的服務啟動腳本
vim /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx



make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}

start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
sleep 1
start
}

reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;


force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force- reload|configtest}"
exit 2
esac chmod x /etc/init.d/nginx //賦予執行的許可權 總結:
Linux的哲學思想之一:組合小程序完成大任務,一切都是使用最基本的軟體完成更多的功能,大家可 以在工作和學習中進行擴展,接下來我將列舉出Linux的哲學思想(個人意見,僅供參考):
1、一切皆文件
2、短小,且目的單一的程序組成
3、串聯多個小程序完成複雜任務
4、盡量避免捕獲用戶介面
5、通過文本文件保存軟體的配置信息
通過本個實驗,希望大家能對Linux有個全新的認識,同時對於初學者不要有任何恐懼的心裡,其實很easy!

本文出自 「IT夢-齊-分享」 博客,請務必保留此出處http://roqi410.blog.51cto.com/2186161/707932


[火星人 ] Linux哲學思想:組合小軟體完成大任務已經有612次圍觀

http://coctec.com/docs/linux/show-post-46540.html