更改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