更改ip和dns
Vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/resolv.conf
關(guān)閉不需要的端口和進(jìn)程昼浦,并確定重啟之后弧腥,不啟動這些端口和進(jìn)程虏两。
chkconfig postfix off
chkconfig avahi-daemon off
3.利用CentOS Linux系統(tǒng)自帶的yum命令安裝畔规、升級所需的程序庫:
yum -y install gcc gcc-c++ automake autoconf make 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 pcre pcre-devel libevent libevent-devel cmake cmake-gui bison
下載程序源碼包 :
http://nginx.org/en/download.html
http://php.net/downloads.php#v5
http://dev.mysql.com/downloads/mysql/5.1.html#downloads
yum -y install wget
cd /usr/local/src
wget -c http://nginx.org/download/nginx-1.0.11.tar.gz
wget -c http://cn.php.net/distributions/php-5.3.9.tar.gz
wget -c http://mysql.ntu.edu.tw/Downloads/MySQL-5.5/mysql-5.5.20.tar.gz
http://mirror.cogentco.com/pub/mysql/MySQL-5.7/
wget -c http://mysql.ntu.edu.tw/Downloads/MySQL-5.1/mysql-5.1.61.tar.gz
wget -c http://soft.vpser.net/web/libiconv/libiconv-1.13.tar.gz
wget -c http://soft.vpser.net/web/libmcrypt/libmcrypt-2.5.8.tar.gz
wget -c http://soft.vpser.net/web/mhash/mhash-0.9.9.9.tar.gz
wget -c http://soft.vpser.net/web/mcrypt/mcrypt-2.6.8.tar.gz
wget -c http://pecl.php.net/get/memcache-3.0.5.tgz
wget -c http://nchc.dl.sourceforge.net/project/eaccelerator/eaccelerator/eAccelerator%200.9.6.1/eaccelerator-0.9.6.1.tar.bz2
wget -c ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.7.2-10.tar.gz //地址失效
wget -c http://pecl.php.net/get/imagick-3.0.1.tgz
wget http://www.imagemagick.org/download/legacy/ImageMagick-6.7.2-10.tar.gz
wget http://pecl.php.net/get/imagick-3.0.1.tgz
源碼編譯方式安裝MySQL5.1
創(chuàng)建用戶和用戶組
useradd mysql -s /sbin/nologin -M
解壓mysql包判族,并編譯安裝闲坎。
mkdir /usr/local/webserver/mysql -p
tar zxvf mysql-5.5.20.tar.gz
cd mysql-5.5.20
----------------------------------------------mysql5.1安裝-------------------------------------------
./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase,myisammrg
make && make install
-------------------------------------------mysql5.5的安裝---------------------------------
首先安裝CMAKE(Mysql5.5.11已經(jīng)采用CMAKE編譯)
yum -y install cmake
tar zxvf mysql-5.5.20.tar.gz
cd mysql-5.5.20
CMake 和 configure參數(shù)對照:http://forge.mysql.com/wiki/Autotools_to_CMake_Transition_Guide
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/
-DMYSQL_DATADIR=/data0/mysql/3306/data
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_MYISAM_STORAGE_ENGINE=1
-DENABLED_LOCAL_INFILE=1
-DMYSQL_TCP_PORT=3306
-DWITH_EXTRA_CHARSETS:STRING=utf8,gbk
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_DEBUG=0
-DWITH_READLINE=1
-DWITH_SSL=yes
-DSYSCONFDIR=/data0/mysql
make && make install
ln -sf /usr/local/webserver/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18
ldconfig
修改mysql目錄權(quán)限及所有者
chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql
如果不裝mysql,下面就不用做
創(chuàng)建MySQL數(shù)據(jù)庫存放目錄以及建立數(shù)據(jù)表
mkdir -p /data0/mysql/3306/data/
mkdir -p /data0/mysql/3306/binlog/
mkdir -p /data0/mysql/3306/relaylog/
chown -R mysql:mysql /data0/mysql/
Mysql5.1
/usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data0/mysql/3306/data --user=mysql
Mysql5.5
/usr/local/webserver/mysql/scripts/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data0/mysql/3306/data --user=mysql
編輯配置文件--上述文件會建立/etc/my.cnf配置文件
vi /etc/my.cnf
[client]
default-character-set=utf8
port = 3306
socket = /tmp/mysql.sock
[mysqld]
---------base------------#
character-set-server = utf8
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /data0/mysql/3306/data
pid-file = /data0/mysql/3306/mysql.pid
----------log-----------#
log-output=file
expire_logs_days = 30
log-error = /data0/mysql/3306/mysql_error.log
general_log = 1
general_log_file=/data0/mysql/3306/mysql.log
log-slow-queries = /data0/mysql/3306/slow.log
long_query_time = 10
binlog_cache_size = 4M
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 1G
log-bin = /data0/mysql/3306/binlog/binlog
log-bin-index=/data0/mysql/3306/binlog/binlog
relay-log = /data0/mysql/3306/relaylog/relaylog
relay-log-index = /data0/mysql/3306/relaylog/relaylog
relay-log-info-file = /data0/mysql/3306/relaylog/relaylog
----------網(wǎng)絡(luò)傳輸-----------#
back_log = 600
max_connections = 5000
max_connect_errors = 6000
max_allowed_packet = 32M
interactive_timeout = 120
wait_timeout = 120
skip-name-resolve
----------查詢優(yōu)化-----------#
open_files_limit = 10240
table_cache = 614
external-locking = FALSE
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 300
thread_concurrency = 8
query_cache_size = 512M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 246M
max_heap_table_size = 246M
-----------storage-engine---------#
default-storage-engine = MyISAM
-----------myisam-engine---------#
key_buffer_size = 512M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
-----------innodb-engine---------#
innodb_data_file_path = ibdata1:256M:autoextend
innodb_additional_mem_pool_size = 16M
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
設(shè)置啟動和停止方式
默認(rèn)方式:
cd /usr/local/webserver/mysql/bin
./mysqld_safe 啟動
/usr/local/webserver/mysql/bin/mysqladmin -u root -p 111111 -S /tmp/mysql.sock shutdown 停止
或者使用下列的方式
5.1
cp /usr/local/webserver/mysql/share/mysql/mysql.server /etc/init.d/mysqld
Mysql5.5
cp /usr/local/webserver/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --level 345 mysqld on
service mysqld start
service mysqld stop
修改root密碼
/usr/local/webserver/mysql/bin/mysqladmin -u root password toplfx007
或者
mysql>;use mysql ;
mysql>; update user set password=PASSWORD("123456") where user='root' AND host="localhost";
mysql>; FLUSH PRIVILEGES;
不要退出exit肋联;
新開一個ssh。使用修改后的帳號密碼登入刁俭。如果能夠登入正常橄仍。
update user set password=PASSWORD("123456") where user='root' AND host="127.0.0.1";
允許外部鏈接
./mysql -u root -p
允許用戶root從ip為任何主機(jī)連接到mysql服務(wù)器,并使用toplfx007作為密碼
mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'%'IDENTIFIED BY 'toplfx007' WITH GRANT OPTION ;
允許用戶root 從ip為192.168.0.28的主機(jī)連接到mysql服務(wù)器牍戚,并使用toplfx007作為密碼
mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'192.168.1.2' IDENTIFIED BY 'toplfx007' WITH GRANT OPTION;
mysql> flush privileges;
mysql 新設(shè)置用戶或更改密碼后需用flush privileges刷新MySQL的系統(tǒng)權(quán)限相關(guān)表侮繁,否則會出現(xiàn)拒絕訪問,還有一種方法如孝,就是重新啟動mysql服務(wù)器宪哩,來使新設(shè)置生效。
修改防火墻
vi /etc/sysconfig/iptables
Firewall configuration written by system-config-firewall
Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
service iptables restart
源碼編譯php使用php-fpm
1第晰、編譯安裝PHP 5.3所需的支持庫:
libiconv(加強(qiáng)系統(tǒng)對支持字符編碼轉(zhuǎn)換的功能)
tar zxvf libiconv-1.13.tar.gz
cd libiconv-1.13/
./configure --prefix=/usr/local --enable-static
make && make install
cd ..
libmcrypt(加密算法庫锁孟,PHP擴(kuò)展mcrypt功能對此庫有依耐關(guān)系,要使用mcrypt必須先安裝此庫)
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 ../../
建立libmcrypt相關(guān)庫的軟連接茁瘦,為編譯mcrypt作準(zhǔn)備品抽。因?yàn)閙crypt依賴libmcrypt。
ln -sf /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -sf /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -sf /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -sf /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -sf /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
ln -sf /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
ldconfig
mhash(hash加密算法庫)
tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make && make install
cd ..
建立libmhash相關(guān)庫的軟連接甜熔,為編譯mcrypt作準(zhǔn)備圆恤。mcrypt也依賴libmhash。
ln -sf /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -sf /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -sf /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -sf /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -sf /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
ldconfig
編譯安裝mcrypt庫
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure
make && make install
cd ..
./configure時可能會報(bào)這個錯:/bin/rm: cannot remove `libtoolT’: No such file or directory腔稀。
解決方法:修改configure文件盆昙,刪除$RM “$cfgfile”這一行(在19744行)。重新再運(yùn)行./configure就可以了烧颖。其實(shí)可以忽略這個錯弱左。configure文件中cfgfile=”${ofile}T”定義的這里變量值是不存在的(${ofile}T的值為libtoolT),最后所以報(bào)錯了。
編譯安裝php
PHP 5.3.3開始就已經(jīng)集成了PHP-FPM
tar zxvf php-5.3.9.tar.gz
cd php-5.3.9
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/webserver/mysql --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --enable-ftp
php-5.6.30
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-fpm-user=www --with-fpm-group=www --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-gettext --enable-opcache --with-xmlrpc --enable-zip --enable-soap --enable-ftp --with-xsl --without-pear --disable-phar
php5.5以上取消 --enable-safe-mode, --with-curlwrappers
configure: error: Cannot find ldap libraries in /usr/lib 解決辦法
cp -frp /usr/lib64/libldap* /usr/lib/
64位
5.3中已經(jīng)沒有下面三項(xiàng)配置
--enable-discard-path
--enable-fastcgi
--enable-force-cgi-redirect
make ZEND_EXTRA_LIBS='-liconv'
make install
0
./configure后
編輯MakeFile
找到 開頭是 'EXTRA_LIBS' 這一行 在結(jié)尾加上 '-llber' 然后執(zhí)行 make && make install
make ZEND_EXTRA_LIBS='-liconv' 炕淮,可能會提示:PEAR package PHP_Archive not installed: generated phar will require PHP’s phar extension be enabled.這說明沒有安裝PEAR拆火。更多可參考:Pecl和Pear的區(qū)別和聯(lián)系?
解決方法:
1涂圆、加入–without-pear參數(shù)们镜,不安裝PEAR。
2润歉、安裝PHP后模狭,再通過PHAR安裝PEAR。
wget http://pear.php.net/go-pear.phar
/usr/local/webserver/php/bin/php go-pear.phar
或者不用管它踩衩。嚼鹉。直接make install 他會自動安裝pear
復(fù)制配置文件
cp -f php.ini-production /usr/local/webserver/php/etc/php.ini
cd ..
4.編譯安裝PHP5擴(kuò)展模塊
Memcache擴(kuò)展
Memcache是danga.com的一個開源項(xiàng)目贩汉,它是一個高性能的分布式的內(nèi)存對象緩存系統(tǒng),通過在內(nèi)存里維護(hù)一個統(tǒng)一的巨大的Hash表锚赤,能夠用來存儲各種格式的數(shù)據(jù)匹舞。可以類比于MySQL這樣的服務(wù)线脚,而PHP擴(kuò)展的Memcache實(shí)際上是連接Memcache的方式赐稽。
tar -zxvf memcache-3.0.5.tgz
cd memcache-3.0.5
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
ImageMagick
ImageMagick是一套穩(wěn)定的工具集和開發(fā)包,可以用來讀浑侥、寫和處理超過89種基本格式的圖片文件姊舵,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。
注意寓落。括丁。Wget獲取的是最后的版本。不一定是6.7.2-10
http://git.imagemagick.org/repos/ImageMagick
影響范圍:ImageMagick <= 6.9.3-9
tar zxvf ImageMagick-7.0.1.tar.gz
cd ImageMagick-7.0.1/
./configure --prefix=/usr/local/imagemagick
make
make install
Imagick
Imagick(PHP的原生函數(shù)庫)是一個功能強(qiáng)大的圖像處理庫零如,Imagick是PHP下針對ImageMagick這個強(qiáng)大軟件包的API接口躏将。Imagick依賴于ImageMagick。
tar zxvf imagick-3.0.1.tgz
cd imagick-3.0.1/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-imagick=/usr/local/imagemagick
make
make install
cd ..
修改php.ini文件
手工修改:>>>>>
vi /usr/local/webserver/php/etc/php.ini
查找extension_dir = "./"
修改為extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/"
并在此行后增加以下幾行考蕾,然后保存:
extension = "memcache.so"
#extension = "pdo_mysql.so" 默認(rèn)自帶了
extension = "imagick.so"
再查找output_buffering = Off ?
修改為output_buffering = On
再查找; cgi.fix_pathinfo=1
修改為cgi.fix_pathinfo=0,防止Nginx文件類型錯誤解析漏洞会宪。
eaccelerator加速器
eaccelerator是一個自由開放源碼PHP加速器肖卧,優(yōu)化和動態(tài)內(nèi)容緩存,提高了性能php腳本的緩存性能掸鹅,使得PHP腳本在編譯的狀態(tài)下塞帐,對服務(wù)器的開銷幾乎完全消除。 它還有對腳本起優(yōu)化作用巍沙,以加快其執(zhí)行效率葵姥。使您的PHP程序代碼執(zhí)效率能提高1-10倍;
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ..
安裝phpredis模塊
https://github.com/owlient/phpredis
下載phpredis
cd phpredis
/usr/local/webserver/php/bin/phpize
./configure --with-php-config= /usr/local/webserver/php/bin/php-config
make install
接下來在php.ini中添加extension=”redis.so” 先要看看有沒有extension_dir=/…….
重啟apache或者nginx
mkdir -p /usr/local/webserver/eaccelerator_cache
修改php配置文件
vi /usr/local/webserver/php/etc/php.ini
按shift+g鍵跳到配置文件的最末尾句携,加上以下配置信息:
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/usr/local/webserver/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"
創(chuàng)建www用戶和組榔幸,
useradd www -s /sbin/nologin -M
創(chuàng)建php-fpm配置文件
cp /usr/local/webserver/php/etc/php-fpm.conf.default /usr/local/webserver/php/etc/php-fpm.conf
vi /usr/local/webserver/php/etc/php-fpm.conf
pid------------------默認(rèn)是在/usr/local/webserver/php/var下
[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 5s
daemonize = yes
rlimit_files = 65535
rlimit_core = 0
[www]
;prefix = /path/to/pools/$pool
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
;listen.owner = nobody
;listen.group = nobody
listen.mode = 0666
user = www
group = www
pm = static
pm.max_children = 128
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 1024
;pm.status_path = /status
;ping.path = /ping
;ping.response = pong
;access.log = log/$pool.access.log
;access.format = %R - %u %t "%m %r%Q%q" %s %f %{mili}d %{kilo}M %C%%
request_terminate_timeout = 0
request_slowlog_timeout = 0s
slowlog = logs/slow.log
rlimit_files = 65535
rlimit_core = 0
;chroot =
;chdir =
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
php_flag[display_errors] = off
;php_admin_value[error_log] = /var/log/fpm-php.www.log
;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M
7.測試配置文件
/usr/local/webserver/php/sbin/php-fpm -t
如果出現(xiàn)下面的錯誤(這個錯誤是我在安裝過程中發(fā)現(xiàn)的,是內(nèi)在不足導(dǎo)致的矮嫉,在文章的結(jié)尾優(yōu)化后削咆,就不會有這樣的問題了,在這里做個記錄蠢笋,方便大家學(xué)習(xí))
Starting php_fpm eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0
failed
說明
php.ini中設(shè)置的eAccelerator拨齐,eaccelerator.shm_size="64",解釋:eaccelerator可使用的共享內(nèi)存大小(單位為MB)昨寞,即64M
在Linux下瞻惋,單個進(jìn)程的最大內(nèi)存使用量受/proc/sys/kernel/shmmax中設(shè)置的數(shù)字限制(單位為字節(jié)) /proc/sys/kernel/shmmax = 33554432 (32M)
臨時更改該值:
echo 128000000 > /proc/sys/kernel/shmmax
或者
vi /etc/sysctl.conf
kernel.shmmax = 128000000
sysctl -p
啟動與關(guān)閉
/usr/local/webserver/php/sbin/php-fpm 啟動
php-fpm 關(guān)閉:
kill -INT cat /usr/local/webserver/php/var/run/php-fpm.pid
php-fpm 重啟:
kill -USR2 cat /usr/local/webserver/php/var/run/php-fpm.pid
或者
cp -f /usr/local/src/php-5.3.9/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
chkconfig php-fpm on
master進(jìn)程可以理解以下信號
INT, TERM 立刻終止
QUIT 平滑終止
USR1 重新打開日志文件
USR2 平滑重載所有worker進(jìn)程并重新載入配置和二進(jìn)制模塊
php-readline
'./configure' '--prefix=/usr/local/webserver/php' '--with-config-file-path=/usr/local/webserver/php/etc' '--with-mysql=/usr/local/webserver/mysql' '--with-mysqli=/usr/local/webserver/mysql/bin/mysql_config' '--with-pd
o-mysql=/usr/local/webserver/mysql' '--with-iconv-dir=/usr/local' '--with-freetype-dir' '--with-jpeg-dir' '--with-png-dir' '--with-zlib' '--with-libxml-dir=/usr' '--enable-xml' '--disable-rpath' '--with-readline' '--enable-bcmath' '--ena
ble-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--with-curl' '--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--with-mcrypt' '--with-gd' '--enable-gd-native-ttf' '--with-openssl' '--with-mhash' '--enable-pcntl' '--ena
ble-sockets' '--with-ldap' '--with-ldap-sasl' '--with-xmlrpc' '--enable-zip' '--enable-soap' '--enable-ftp' '--with-iconv-dir=/usr/local/lib' '--with-iconv'
EXTRA_LIBS = -lcrypt -lz -lcrypt -lreadline -lncurses -lrt -lmysqlclient -lmcrypt -lltdl -lldap -lpng -lz -ljpeg -lcurl -lz -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lssl -lcrypto -lcurl -lxml2 -lz -lm -lssl -lcrypto -lfreetype -lmysqlcli
ent -lz -lm -lrt -lssl -lcrypto -ldl -lmysqlclient -lz -lm -lrt -lssl -lcrypto -ldl -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -liconv
安裝Nginx 1.0.0
.安裝Nginx
tar -zxvf nginx-1.0.11.tar.gz
cd nginx-1.0.11
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ..
如果安裝 nginx_concat_module 模塊:
yum -y install subversion
svn co http://code.taobao.org/svn/nginx_concat_module/trunk nginx_concat_module
會提示輸入root密碼厦滤。。并回答yes
tar -zxvf nginx-1.0.11.tar.gz
cd nginx-1.0.11
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/local/src/nginx_concat_module
make && make install
cd ..
創(chuàng)建Nginx日志目錄
mkdir -p /data1/logs/bak
chmod +w /data1/logs
chown -R www:www /data1/logs
修改Nginx配置文件
vi /usr/local/webserver/nginx/conf/nginx.conf
user www www;
worker_processes 8;
error_log /data1/logs/nginx_error.log crit;
pid /usr/local/webserver/nginx/nginx.pid;
Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
limit_zone crawler $binary_remote_addr 10m;
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /data0/htdocs;
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /data1/logs/access.log access;
}
server
{
listen 8080;
server_name 192.168.1.10;
location / {
stub_status on;
access_log off;
}
}
}
啟動Nginx
檢查Nginx配置是否正確歼狼,出現(xiàn)以下類似信息表示配置正確馁害。
/usr/local/webserver/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful
設(shè)置可打開文件數(shù)并啟動Nginx
ulimit -SHn 65535
/usr/local/webserver/nginx/sbin/nginx
5.創(chuàng)建web目錄
mkdir -p /data0/htdocs
chmod +w /data0/htdocs
chown -R www:www /data0/htdocs
6.iptables添加80端口
vi /etc/sysconfig/iptables 添加80端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables restart
開機(jī)啟動nginx
vi /etc/rc.local
ulimit -SHn 65535 //調(diào)高linux內(nèi)核打開文件數(shù)量 這個重啟沒有效果
/usr/local/webserver/nginx/sbin/nginx
vi /etc/security/limits.conf
添加
- soft nofile 51200
- hard nofile 51200
Linux / Unix 設(shè)置了軟硬文件句柄和打開文件的數(shù)目,你可以使用'ulimit'命令來查看這些限制
ulimit -Hn
ulimit -Sn
重啟
/usr/local/webserver/nginx/sbin/nginx -s reload 8.0以上
kill -HUP cat /usr/local/webserver/nginx/nginx.pid
1蹂匹、TERM,INT 快速關(guān)閉
2锋叨、QUIT 從容關(guān)閉
3、HUP 平滑重啟公般,重新加載配置文件
4砰琢、USR1 重新打開日志文件,在切割日志時用處比較大
5履植、USR2 平滑升級可執(zhí)行程序
6计雌、WINCH 從容關(guān)閉工作進(jìn)程
優(yōu)化Linux內(nèi)核參數(shù)
vi /etc/sysctl.conf
Add
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.ip_conntrack_max = 10000
使配置立即生效:
/sbin/sysctl -p
各內(nèi)核參數(shù)含義
net.ipv4.tcp_max_syn_backlog
記錄的那些尚未收到客戶端確認(rèn)信息的連接請求的最大值。對于超過128M內(nèi)存的系統(tǒng)而言玫霎,缺省值是1024凿滤,低于128M小內(nèi)存的系統(tǒng)則是128。
SYN Flood攻擊利用TCP協(xié)議散布握手的缺陷庶近,偽造虛假源IP地址發(fā)送大量TCP-SYN半打開連接到目標(biāo)系統(tǒng)翁脆,最終導(dǎo)致目標(biāo)系統(tǒng)Socket隊(duì)列資源耗盡而無法接受新的連接。為了應(yīng)付這種攻擊鼻种,現(xiàn)代Unix系統(tǒng)中普遍采用多連接隊(duì)列處理的方式來緩沖(而不是解決)這種攻擊反番,是用一個基本隊(duì)列處理正常的完全連接應(yīng)用(Connect()和Accept() ),是用另一個隊(duì)列單獨(dú)存放半打開連接叉钥。
這種雙隊(duì)列處理方式和其他一些系統(tǒng)內(nèi)核措施(例如Syn-Cookies/Caches)聯(lián)合應(yīng)用時罢缸,能夠比較有效的緩解小規(guī)模的SYN Flood攻擊(事實(shí)證明<1000p/s)加大SYN隊(duì)列長度可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù),一般遭受SYN Flood攻擊的網(wǎng)站投队,都存在大量SYN_RECV狀態(tài)枫疆,所以調(diào)大tcp_max_syn_backlog值能增加抵抗syn攻擊的能力。
net.core.netdev_max_backlog
每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時敷鸦,允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目息楔。
net.core.somaxconn
調(diào)整系統(tǒng)同時發(fā)起并發(fā)TCP連接數(shù),可能需要提高連接儲備值轧膘,以應(yīng)對大量突發(fā)入局連接請求的情況钞螟。 如果同時接收到大量連接請求,使用較大的值會提高受支持的暫掛連接的數(shù)量谎碍,從而可減少連接失敗的數(shù)量鳞滨。大的偵聽隊(duì)列對防止DDoS攻擊也會有所幫助。掛起請求的最大數(shù)量默認(rèn)是128蟆淀。
net.core.wmem_default
該參數(shù)指定了發(fā)送套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位)
net.core.rmem_default
該參數(shù)指定了接收套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位)
net.core.rmem_max
該參數(shù)指定了接收套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)
net.core.wmem_max
該參數(shù)指定了發(fā)送套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)
net.ipv4.tcp_timestamps
Timestamps可以防范那些偽造的sequence號碼拯啦。一條1G的寬帶線路或許會重遇到帶out-of-line數(shù)值的舊sequence號碼(假如它是由于上次產(chǎn)生的)澡匪。時間戳能夠讓內(nèi)核接受這種“異常”的數(shù)據(jù)包褒链。這里需要將其關(guān)掉,以提高性能唁情。
net.ipv4.tcp_synack_retries
對于遠(yuǎn)端的連接請求SYN,內(nèi)核會發(fā)送SYN+ACK數(shù)據(jù)報(bào)甫匹,以確認(rèn)收到上一個SYN連接請求包甸鸟。這是所謂的三次握手(threeway handshake)機(jī)制的第二個步驟。這里決定內(nèi)核在放棄連接之前所送出的SYN+ACK數(shù)目兵迅。不應(yīng)該大于255抢韭,默認(rèn)值是5,對應(yīng)于180秒左右時間恍箭。(可以根據(jù)tcp_syn_retries來決定這個值)
net.ipv4.tcp_syn_retries
對于一個新建連接刻恭,內(nèi)核要發(fā)送多少個SYN連接請求才決定放棄。不應(yīng)該大于255扯夭,默認(rèn)值是5鳍贾,對應(yīng)于180秒左右時間。(對于大負(fù)載而物理通信良好的網(wǎng)絡(luò)而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連接,對進(jìn)來的連接,是由tcp_retries1 決定的)
net.ipv4.tcp_tw_recycle
表示開啟TCP連接中TIME-WAIT Sockets的快速回收交洗,默認(rèn)為0骑科,表示關(guān)閉。
net.ipv4.tcp_tw_reuse
表示開啟重用藕筋,允許將TIME-WAIT Sockets重新用于新的TCP連接纵散,默認(rèn)為0,表示關(guān)閉隐圾。這個對快速重啟動某些服務(wù),而啟動后提示端口已經(jīng)被使用的情形非常有幫助。
net.ipv4.tcp_mem
tcp_mem有3個INTEGER變量:low, pressure, high
low:當(dāng)TCP使用了低于該值的內(nèi)存頁面數(shù)時掰茶,TCP沒有內(nèi)存壓力暇藏,TCP不會考慮釋放內(nèi)存。(理想情況下濒蒋,這個值應(yīng)與指定給tcp_wmem的第2個值相匹配盐碱。這第2個值表明,最大頁面大小乘以最大并發(fā)請求數(shù)除以頁大小 (131072300/4096)
pressure:當(dāng)TCP使用了超過該值的內(nèi)存頁面數(shù)量時沪伙,TCP試圖穩(wěn)定其內(nèi)存使用瓮顽,進(jìn)入pressure模式,當(dāng)內(nèi)存消耗低于low值時則退出pressure狀態(tài)围橡。(理想情況下這個值應(yīng)該是TCP可以使用的總緩沖區(qū)大小的最大值(204800300/4096)
high:允許所有TCP Sockets用于排隊(duì)緩沖數(shù)據(jù)報(bào)的頁面量暖混。如果超過這個值,TCP連接將被拒絕翁授,這就是為什么不要令其過于保守(512000*300/4096)的原因了拣播。在這種情況下晾咪,提供的價值很大,它能處理很多連接贮配,是所預(yù)期的2.5倍谍倦;或者使現(xiàn)有連接能夠傳輸2.5倍的數(shù)據(jù)。
一般情況下這些值是在系統(tǒng)啟動時根據(jù)系統(tǒng)內(nèi)存數(shù)量計(jì)算得到的泪勒。
net.ipv4.tcp_max_orphans
系統(tǒng)所能處理不屬于任何進(jìn)程的TCP sockets最大數(shù)量昼蛀。假如超過這個數(shù)量﹐那么不屬于任何進(jìn)程的連接會被立即reset,并同時顯示警告信息圆存。之所以要設(shè)定這個限制﹐純粹為了抵御那些簡單的DoS攻擊﹐千萬不要依賴這個或是人為的降低這個限制
net.ipv4.ip_local_port_range
將系統(tǒng)對本地端口范圍限制設(shè)置為1024~65000之間
net.ipv4.ip_conntrack_max = 10000
設(shè)置系統(tǒng)對最大跟蹤的TCP連接數(shù)的限制(CentOS 5.6無此參數(shù))
Add
修改系統(tǒng)默認(rèn)的TIMEOUT時間;表示如果套接字由本端要求關(guān)閉叼旋,這個參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時間。
net.ipv4.tcp_fin_timeout = 30
表示當(dāng)keepalive起用的時候辽剧,TCP發(fā)送keepalive消息的頻度送淆。缺省是2小時,改為20分鐘怕轿。
net.ipv4.tcp_keepalive_time = 1200
設(shè)置內(nèi)存單位,進(jìn)入內(nèi)存壓力階段(低于;在此值下;高于此值)
net.ipv4.tcp_mem = 94500000 915000000 927000000
Timestamps可以防范那些偽造的sequence號碼偷崩。一條1G的寬帶線路或許會重遇到帶out-of-line數(shù)值的舊sequence號碼(假如它是由于上次產(chǎn)生的)。時間戳能夠讓內(nèi)核接受這種“異匙灿穑”的數(shù)據(jù)包阐斜。這
里需要將其關(guān)掉,以提高性能。
net.ipv4.tcp_timestamps = 0
對于遠(yuǎn)端的連接請求SYN诀紊,內(nèi)核會發(fā)送SYN+ACK數(shù)據(jù)報(bào)谒出,以確認(rèn)收到上一個SYN連接請求包。這是所謂的三次握手(threeway handshake)機(jī)制的第二個步驟邻奠。這里決定內(nèi)核在放棄連接之前所送出的SYN
+ACK數(shù)目笤喳。不應(yīng)該大于255,
默認(rèn)值是5碌宴,對應(yīng)于180秒左右時間杀狡。(可以根據(jù)tcp_syn_retries來決定這個值)
net.ipv4.tcp_synack_retries = 1
對于一個新建連接,內(nèi)核要發(fā)送多少個SYN連接請求才決定放棄贰镣。不應(yīng)該大于255呜象,默認(rèn)值是5,對應(yīng)于180秒左右時間碑隆。(對于大負(fù)載而物理通信良好的網(wǎng)絡(luò)而言,這個值偏高,可修改為2.這個值僅僅是
針對對外的連接,對進(jìn)來的連
接,是由tcp_retries1 決定的)
net.ipv4.tcp_syn_retries = 1
表示開啟TCP連接中TIME-WAIT Sockets的快速回收恭陡,默認(rèn)為0,表示關(guān)閉上煤。
net.ipv4.tcp_tw_recycle = 1
表示開啟重用休玩,允許將TIME-WAIT Sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉哥捕。這個對快速重啟動某些服務(wù),而啟動后提示端口已經(jīng)被使用的情形非常有幫助牧抽。
net.ipv4.tcp_tw_reuse = 1
表示發(fā)送套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位)。
net.core.wmem_default = 8388608
表示接受套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位)
net.core.rmem_default = 8388608
表示接收套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)
net.core.rmem_max = 16777216
表示發(fā)送套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)遥赚。
net.core.wmem_max = 16777216
調(diào)大tcp_max_syn_backlog值能增加抵抗syn攻擊的能力
net.ipv4.tcp_max_syn_backlog = 262144
每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時扬舒,允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目。
net.core.netdev_max_backlog = 262144
調(diào)整系統(tǒng)同時發(fā)起并發(fā)TCP連接數(shù)凫佛,可能需要提高連接儲備值讲坎,以應(yīng)對大量突發(fā)入局連接請求的情況。 如果同時接收到大量連接請求愧薛,使用較大的值會提高受支持的暫掛連接的數(shù)量晨炕,從而可減少連接
失敗的數(shù)量。大的偵聽隊(duì)列
對防止DDoS攻擊也會有所幫助毫炉。掛起請求的最大數(shù)量默認(rèn)是128瓮栗。
net.core.somaxconn = 262144
系統(tǒng)所能處理不屬于任何進(jìn)程的TCP sockets最大數(shù)量。假如超過這個數(shù)量﹐那么不屬于任何進(jìn)程的連接會被立即reset瞄勾,并同時顯示警告信息费奸。之所以要設(shè)定這個限制﹐純粹為了抵御那些簡單的DoS
攻擊﹐千萬不要依賴這個或>是人為的降低這個限制
net.ipv4.tcp_max_orphans = 3276800
調(diào)整TCP/IP網(wǎng)絡(luò)參數(shù),可以增強(qiáng)抗SYN Flood的能力进陡,
net.ipv4.tcp_syncookies = 1
end add
http://blog.sina.com.cn/s/blog_98a0937f0100yns7.html
用Webbench進(jìn)行簡單的壓力測試
Webbench是有名的網(wǎng)站壓力測試工具愿阐。Webbench支持多平臺,F(xiàn)reeBSD趾疚、Linux缨历、Windows都可以使用。Webbench最多可以模擬3萬個并發(fā)連接去測試網(wǎng)站的負(fù)載能力糙麦。
1辛孵、Webbench安裝
wget -c http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
在編譯webbench的時候可能會出現(xiàn)下面類似的錯誤:
ctags *.c
/bin/sh: ctags: command not found
make: [tags] Error 127 (ignored)
解決方法:由于是缺少ctags組件,安裝后即可赡磅。
yum -y install ctags
使用:
webbench -c 500 -t 30 http://192.168.1.10/phpinfo.php
Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://192.168.1.106/phpinfo.php
500 clients, running 30 sec.
Speed=39824 pages/min, 37963652 bytes/sec.
Requests: 19912 susceed, 0 failed.
編寫每天定時切割Nginx日志的腳本
1觉吭、創(chuàng)建腳本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh
vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
!/bin/bash
nginx_app=/usr/local/webserver/nginx/sbin/nginx #設(shè)置nginx的目錄
logs_dir=/data1/logs/ #log目錄
bak_dir=/data1/logs/bak/ #log備份目錄
先把現(xiàn)有的log文件挪到備份目錄臨時存放
cd $logs_dir
echo “moving logs”
/bin/mv *.log $bak_dir
sleep 3
重建nginx log
echo “rebuild logs”
echo “$nginx_app -s reopen”
$nginx_app -s reopen
按天打包log文件
echo “begining of tar”
cd $bak_dir
/bin/tar czf date +%Y%m%d
.tgz *.log
刪除備份目錄的臨時文件
echo “rm logs”
rm -f *.log
echo “done”
設(shè)置crontab,每天凌晨00:00切割nginx訪問日志
crontab -e
00 00 * * * /bin/bash /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
參考
http://www.newasp.net/tech/server/25319.html
http://blog.s135.com/nginx_php_v6/24/1/
http://hi.baidu.com/wastorode/blog/item/20563adf6829317dd1164ef5.html
Php添加擴(kuò)展
cd php-5.3.8/ext/ftp/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --enable-ftp
make && make install
vi /usr/local/webserver/php/etc/php.ini
/extension_dir
extension = "ftp.so"
/etc/init.d/php-fpm restart