nginx-php-mysql

更改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可以使用的總緩沖區大小的最大值(204800
300/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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容

  • 序言 除了編譯器使用yum安裝,其他全部手動編譯。 看似就Nginx、PHP、MySql三個東東,但是它們太尼瑪依...
    kaibiao123閱讀 512評論 0 3
  • 我的博客:https://blog.thuol.com 說明 親測原稿。以 D:\wnmp 目錄為例(實際目錄...
    00天火00閱讀 1,126評論 1 7
  • 青鳥出現在我面前的時候,我正在一棵樹下的陰涼處看一本書看地快要睡著了。盛夏驕陽鍍了一層暖色在土地上,攪著蟬鳴粘滯在...
    夏帛閱讀 320評論 0 0
  • 文/査建樹 “誒,吃飯了,待會兒飯涼了。” “真難看,誰給你搭配的啊,明明臉黑,還穿這種顏色,無語死。” “你是不...
    查建樹閱讀 424評論 0 1
  • 寶寶拍周歲照的日子如約而至,八點半就有金色童年的工作人員打電話催了,好在人已經到了樓下。選了三套衣服,看上去不起眼...
    朦朧雨煙閱讀 400評論 1 1