nginx-php-mysql
dlcpk 2022-1-19

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

作者:Xwei_

链接:https://www.jianshu.com/p/fcb9cb3f7db0

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


最新回复 (0)
返回