更改ip和dns
Vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/resolv.conf
關閉不需要的端口和進程,并確定重啟之后,不啟動這些端口和進程。
chkconfig postfix off
chkconfig avahi-daemon off
3.利用CentOS Linux系統自帶的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
創建用戶和用戶組
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已經采用CMAKE編譯)
yum -y install cmake
tar zxvf mysql-5.5.20.tar.gz
cd mysql-5.5.20
CMake 和 configure參數對照: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目錄權限及所有者
chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql
如果不裝mysql,下面就不用做
創建MySQL數據庫存放目錄以及建立數據表
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
----------網絡傳輸-----------#
back_log = 600
max_connections = 5000
max_connect_errors = 6000
max_allowed_packet = 32M
interactive_timeout = 120
wait_timeout = 120
skip-name-resolve
----------查詢優化-----------#
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
設置啟動和停止方式
默認方式:
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為任何主機連接到mysql服務器,并使用toplfx007作為密碼
mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'%'IDENTIFIED BY 'toplfx007' WITH GRANT OPTION ;
允許用戶root 從ip為192.168.0.28的主機連接到mysql服務器,并使用toplfx007作為密碼
mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'192.168.1.2' IDENTIFIED BY 'toplfx007' WITH GRANT OPTION;
mysql> flush privileges;
mysql 新設置用戶或更改密碼后需用flush privileges刷新MySQL的系統權限相關表,否則會出現拒絕訪問,還有一種方法,就是重新啟動mysql服務器,來使新設置生效。
修改防火墻
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(加強系統對支持字符編碼轉換的功能)
tar zxvf libiconv-1.13.tar.gz
cd libiconv-1.13/
./configure --prefix=/usr/local --enable-static
make && make install
cd ..
libmcrypt(加密算法庫,PHP擴展mcrypt功能對此庫有依耐關系,要使用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相關庫的軟連接,為編譯mcrypt作準備。因為mcrypt依賴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相關庫的軟連接,為編譯mcrypt作準備。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時可能會報這個錯:/bin/rm: cannot remove `libtoolT’: No such file or directory。
解決方法:修改configure文件,刪除$RM “$cfgfile”這一行(在19744行)。重新再運行./configure就可以了。其實可以忽略這個錯。configure文件中cfgfile=”${ofile}T”定義的這里變量值是不存在的(${ofile}T的值為libtoolT),最后所以報錯了。
編譯安裝php
PHP 5.3.3開始就已經集成了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中已經沒有下面三項配置
--enable-discard-path
--enable-fastcgi
--enable-force-cgi-redirect
make ZEND_EXTRA_LIBS='-liconv'
make install
0
./configure后
編輯MakeFile
找到 開頭是 'EXTRA_LIBS' 這一行 在結尾加上 '-llber' 然后執行 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的區別和聯系?
解決方法:
1、加入–without-pear參數,不安裝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
復制配置文件
cp -f php.ini-production /usr/local/webserver/php/etc/php.ini
cd ..
4.編譯安裝PHP5擴展模塊
Memcache擴展
Memcache是danga.com的一個開源項目,它是一個高性能的分布式的內存對象緩存系統,通過在內存里維護一個統一的巨大的Hash表,能夠用來存儲各種格式的數據。可以類比于MySQL這樣的服務,而PHP擴展的Memcache實際上是連接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是一套穩定的工具集和開發包,可以用來讀、寫和處理超過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的原生函數庫)是一個功能強大的圖像處理庫,Imagick是PHP下針對ImageMagick這個強大軟件包的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" 默認自帶了
extension = "imagick.so"
再查找output_buffering = Off ?
修改為output_buffering = On
再查找; cgi.fix_pathinfo=1
修改為cgi.fix_pathinfo=0,防止Nginx文件類型錯誤解析漏洞。
eaccelerator加速器
eaccelerator是一個自由開放源碼PHP加速器,優化和動態內容緩存,提高了性能php腳本的緩存性能,使得PHP腳本在編譯的狀態下,對服務器的開銷幾乎完全消除。 它還有對腳本起優化作用,以加快其執行效率。使您的PHP程序代碼執效率能提高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"
創建www用戶和組,
useradd www -s /sbin/nologin -M
創建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------------------默認是在/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
如果出現下面的錯誤(這個錯誤是我在安裝過程中發現的,是內在不足導致的,在文章的結尾優化后,就不會有這樣的問題了,在這里做個記錄,方便大家學習)
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中設置的eAccelerator,eaccelerator.shm_size="64",解釋:eaccelerator可使用的共享內存大小(單位為MB),即64M
在Linux下,單個進程的最大內存使用量受/proc/sys/kernel/shmmax中設置的數字限制(單位為字節) /proc/sys/kernel/shmmax = 33554432 (32M)
臨時更改該值:
echo 128000000 > /proc/sys/kernel/shmmax
或者
vi /etc/sysctl.conf
kernel.shmmax = 128000000
sysctl -p
啟動與關閉
/usr/local/webserver/php/sbin/php-fpm 啟動
php-fpm 關閉:
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進程可以理解以下信號
INT, TERM 立刻終止
QUIT 平滑終止
USR1 重新打開日志文件
USR2 平滑重載所有worker進程并重新載入配置和二進制模塊
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 ..
創建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配置是否正確,出現以下類似信息表示配置正確。
/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
設置可打開文件數并啟動Nginx
ulimit -SHn 65535
/usr/local/webserver/nginx/sbin/nginx
5.創建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
開機啟動nginx
vi /etc/rc.local
ulimit -SHn 65535 //調高linux內核打開文件數量 這個重啟沒有效果
/usr/local/webserver/nginx/sbin/nginx
vi /etc/security/limits.conf
添加
- soft nofile 51200
- hard nofile 51200
Linux / Unix 設置了軟硬文件句柄和打開文件的數目,你可以使用'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 快速關閉
2、QUIT 從容關閉
3、HUP 平滑重啟,重新加載配置文件
4、USR1 重新打開日志文件,在切割日志時用處比較大
5、USR2 平滑升級可執行程序
6、WINCH 從容關閉工作進程
優化Linux內核參數
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
各內核參數含義
net.ipv4.tcp_max_syn_backlog
記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對于超過128M內存的系統而言,缺省值是1024,低于128M小內存的系統則是128。
SYN Flood攻擊利用TCP協議散布握手的缺陷,偽造虛假源IP地址發送大量TCP-SYN半打開連接到目標系統,最終導致目標系統Socket隊列資源耗盡而無法接受新的連接。為了應付這種攻擊,現代Unix系統中普遍采用多連接隊列處理的方式來緩沖(而不是解決)這種攻擊,是用一個基本隊列處理正常的完全連接應用(Connect()和Accept() ),是用另一個隊列單獨存放半打開連接。
這種雙隊列處理方式和其他一些系統內核措施(例如Syn-Cookies/Caches)聯合應用時,能夠比較有效的緩解小規模的SYN Flood攻擊(事實證明<1000p/s)加大SYN隊列長度可以容納更多等待連接的網絡連接數,一般遭受SYN Flood攻擊的網站,都存在大量SYN_RECV狀態,所以調大tcp_max_syn_backlog值能增加抵抗syn攻擊的能力。
net.core.netdev_max_backlog
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.core.somaxconn
調整系統同時發起并發TCP連接數,可能需要提高連接儲備值,以應對大量突發入局連接請求的情況。 如果同時接收到大量連接請求,使用較大的值會提高受支持的暫掛連接的數量,從而可減少連接失敗的數量。大的偵聽隊列對防止DDoS攻擊也會有所幫助。掛起請求的最大數量默認是128。
net.core.wmem_default
該參數指定了發送套接字緩沖區大小的缺省值(以字節為單位)
net.core.rmem_default
該參數指定了接收套接字緩沖區大小的缺省值(以字節為單位)
net.core.rmem_max
該參數指定了接收套接字緩沖區大小的最大值(以字節為單位)
net.core.wmem_max
該參數指定了發送套接字緩沖區大小的最大值(以字節為單位)
net.ipv4.tcp_timestamps
Timestamps可以防范那些偽造的sequence號碼。一條1G的寬帶線路或許會重遇到帶out-of-line數值的舊sequence號碼(假如它是由于上次產生的)。時間戳能夠讓內核接受這種“異常”的數據包。這里需要將其關掉,以提高性能。
net.ipv4.tcp_synack_retries
對于遠端的連接請求SYN,內核會發送SYN+ACK數據報,以確認收到上一個SYN連接請求包。這是所謂的三次握手(threeway handshake)機制的第二個步驟。這里決定內核在放棄連接之前所送出的SYN+ACK數目。不應該大于255,默認值是5,對應于180秒左右時間。(可以根據tcp_syn_retries來決定這個值)
net.ipv4.tcp_syn_retries
對于一個新建連接,內核要發送多少個SYN連接請求才決定放棄。不應該大于255,默認值是5,對應于180秒左右時間。(對于大負載而物理通信良好的網絡而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連接,對進來的連接,是由tcp_retries1 決定的)
net.ipv4.tcp_tw_recycle
表示開啟TCP連接中TIME-WAIT Sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_tw_reuse
表示開啟重用,允許將TIME-WAIT Sockets重新用于新的TCP連接,默認為0,表示關閉。這個對快速重啟動某些服務,而啟動后提示端口已經被使用的情形非常有幫助。
net.ipv4.tcp_mem
tcp_mem有3個INTEGER變量:low, pressure, high
low:當TCP使用了低于該值的內存頁面數時,TCP沒有內存壓力,TCP不會考慮釋放內存。(理想情況下,這個值應與指定給tcp_wmem的第2個值相匹配。這第2個值表明,最大頁面大小乘以最大并發請求數除以頁大小 (131072300/4096)
pressure:當TCP使用了超過該值的內存頁面數量時,TCP試圖穩定其內存使用,進入pressure模式,當內存消耗低于low值時則退出pressure狀態。(理想情況下這個值應該是TCP可以使用的總緩沖區大小的最大值(204800300/4096)
high:允許所有TCP Sockets用于排隊緩沖數據報的頁面量。如果超過這個值,TCP連接將被拒絕,這就是為什么不要令其過于保守(512000*300/4096)的原因了。在這種情況下,提供的價值很大,它能處理很多連接,是所預期的2.5倍;或者使現有連接能夠傳輸2.5倍的數據。
一般情況下這些值是在系統啟動時根據系統內存數量計算得到的。
net.ipv4.tcp_max_orphans
系統所能處理不屬于任何進程的TCP sockets最大數量。假如超過這個數量﹐那么不屬于任何進程的連接會被立即reset,并同時顯示警告信息。之所以要設定這個限制﹐純粹為了抵御那些簡單的DoS攻擊﹐千萬不要依賴這個或是人為的降低這個限制
net.ipv4.ip_local_port_range
將系統對本地端口范圍限制設置為1024~65000之間
net.ipv4.ip_conntrack_max = 10000
設置系統對最大跟蹤的TCP連接數的限制(CentOS 5.6無此參數)
Add
修改系統默認的TIMEOUT時間;表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_fin_timeout = 30
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改為20分鐘。
net.ipv4.tcp_keepalive_time = 1200
設置內存單位,進入內存壓力階段(低于;在此值下;高于此值)
net.ipv4.tcp_mem = 94500000 915000000 927000000
Timestamps可以防范那些偽造的sequence號碼。一條1G的寬帶線路或許會重遇到帶out-of-line數值的舊sequence號碼(假如它是由于上次產生的)。時間戳能夠讓內核接受這種“異常”的數據包。這
里需要將其關掉,以提高性能。
net.ipv4.tcp_timestamps = 0
對于遠端的連接請求SYN,內核會發送SYN+ACK數據報,以確認收到上一個SYN連接請求包。這是所謂的三次握手(threeway handshake)機制的第二個步驟。這里決定內核在放棄連接之前所送出的SYN
+ACK數目。不應該大于255,
默認值是5,對應于180秒左右時間。(可以根據tcp_syn_retries來決定這個值)
net.ipv4.tcp_synack_retries = 1
對于一個新建連接,內核要發送多少個SYN連接請求才決定放棄。不應該大于255,默認值是5,對應于180秒左右時間。(對于大負載而物理通信良好的網絡而言,這個值偏高,可修改為2.這個值僅僅是
針對對外的連接,對進來的連
接,是由tcp_retries1 決定的)
net.ipv4.tcp_syn_retries = 1
表示開啟TCP連接中TIME-WAIT Sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_tw_recycle = 1
表示開啟重用,允許將TIME-WAIT Sockets重新用于新的TCP連接,默認為0,表示關閉。這個對快速重啟動某些服務,而啟動后提示端口已經被使用的情形非常有幫助。
net.ipv4.tcp_tw_reuse = 1
表示發送套接字緩沖區大小的缺省值(以字節為單位)。
net.core.wmem_default = 8388608
表示接受套接字緩沖區大小的缺省值(以字節為單位)
net.core.rmem_default = 8388608
表示接收套接字緩沖區大小的最大值(以字節為單位)
net.core.rmem_max = 16777216
表示發送套接字緩沖區大小的最大值(以字節為單位)。
net.core.wmem_max = 16777216
調大tcp_max_syn_backlog值能增加抵抗syn攻擊的能力
net.ipv4.tcp_max_syn_backlog = 262144
每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.core.netdev_max_backlog = 262144
調整系統同時發起并發TCP連接數,可能需要提高連接儲備值,以應對大量突發入局連接請求的情況。 如果同時接收到大量連接請求,使用較大的值會提高受支持的暫掛連接的數量,從而可減少連接
失敗的數量。大的偵聽隊列
對防止DDoS攻擊也會有所幫助。掛起請求的最大數量默認是128。
net.core.somaxconn = 262144
系統所能處理不屬于任何進程的TCP sockets最大數量。假如超過這個數量﹐那么不屬于任何進程的連接會被立即reset,并同時顯示警告信息。之所以要設定這個限制﹐純粹為了抵御那些簡單的DoS
攻擊﹐千萬不要依賴這個或>是人為的降低這個限制
net.ipv4.tcp_max_orphans = 3276800
調整TCP/IP網絡參數,可以增強抗SYN Flood的能力,
net.ipv4.tcp_syncookies = 1
end add
http://blog.sina.com.cn/s/blog_98a0937f0100yns7.html
用Webbench進行簡單的壓力測試
Webbench是有名的網站壓力測試工具。Webbench支持多平臺,FreeBSD、Linux、Windows都可以使用。Webbench最多可以模擬3萬個并發連接去測試網站的負載能力。
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的時候可能會出現下面類似的錯誤:
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、創建腳本/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 #設置nginx的目錄
logs_dir=/data1/logs/ #log目錄
bak_dir=/data1/logs/bak/ #log備份目錄
先把現有的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”
設置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添加擴展
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