CentOS 5.6(X64)下編譯安裝LNMP平臺(tái)(Nginx1.0.4+PHP5.3.6+Mys |
發(fā)布時(shí)間: 2012/6/23 17:39:03 |
系統(tǒng)環(huán)境:centos 5.6(x64)+Nginx 1.0.4+Mysql 5.5.12 + PHP 5.3.6 軟件包存放位置 /usr/local/src/websoft ###########本文另附配置文檔,配置文檔在附件里#################
Nginx(發(fā)音同 engine x)是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個(gè)BSD-like 協(xié)議下發(fā)行。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),最初供俄國(guó)大型的入口網(wǎng)站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁伺服器中表現(xiàn)較好.目前中國(guó)大陸使用nginx網(wǎng)站用戶有:新浪、網(wǎng)易、 騰訊,另外知名的微網(wǎng)志Plurk也使用nginx。
總體來說nginx的有以下八大優(yōu)點(diǎn): 1.高并發(fā)連接:官方測(cè)試能支撐5萬并發(fā)連接,在實(shí)際生產(chǎn)環(huán)境中跑到2,~3W并發(fā)連接。 2.內(nèi)存消耗少:在3W并發(fā)連接下,開啟的10個(gè)NGINX進(jìn)程才消耗150M內(nèi)存(15M*10=150M) 3.配置文件非常簡(jiǎn)單:風(fēng)格跟程序一樣通俗易懂。 4.成本低廉:Nginx作為開源軟件,可以免費(fèi)使用,而購(gòu)買F5 BIG-IP、NetScaler 等硬件負(fù)載均衡交換機(jī)則需要十多萬至幾十萬人民幣。 5.支持rewrite重寫規(guī)則:能夠根據(jù)域名、URL的不同,將HTTP請(qǐng)求分發(fā)到不同的后端服務(wù)器群組。 6.內(nèi)置的健康檢查功能:如果Nginx Proxy后端的后臺(tái)web服務(wù)器宕機(jī)了,不會(huì)音響前端訪問。 7.節(jié)省帶寬:支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭。 8.穩(wěn)定性高:用于反向代理,宕機(jī)的概率微乎其微。
當(dāng)客戶端在訪問動(dòng)態(tài)頁面時(shí),因?yàn)閍pache和nginx只能提供靜態(tài)解析,這是他們通過內(nèi)置的cgi接口去尋找php等腳本語言,當(dāng)需要用到數(shù)據(jù)部分時(shí)PHP會(huì)去調(diào)用后臺(tái)MYSQL數(shù)據(jù)庫中的數(shù)據(jù),之后通過解析生成靜態(tài)頁面在返回apache/nginx服務(wù)器,再由此交付給客戶端。那么nginx如何調(diào)用php提供動(dòng)態(tài)php格式的網(wǎng)頁,那么就通過FastCGI來實(shí)現(xiàn),后面安裝php的時(shí)候會(huì)講解
1、首先安裝編譯所需要的庫文件和編譯環(huán)境,這里我用的光盤的yum源 yum -y install gcc openssl-devel zlib-devel pcre-devel libjpeg-devel libpng-devel libtool-ltdl-devel yum groupinstall "Development Tools" "Development Libraries" -y
2、下載源碼包 #cd /usr/local/src/websoft #vim download.txt //拷貝下面的內(nèi)容到文件里 wget http://www.nginx.org/download/nginx-1.0.4.tar.gz wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.12.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz wget http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0 wget ttp://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0 wget http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0 wget wget http://cn.php.net/get/php-5.3.6.tar.gz/from/this/mirror wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2 wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
#wget -i download.txt //下載這些軟件包
3、Nginx 安裝 useradd -s /sbin/nologin -M nginx cd /usr/local/src/websoft tar zxvf nginx-1.0.4.tar.gz cd nginx-1.0.4/ ./configure --user=nginx --group=nginx \ --prefix=/usr/local/webserver/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --with-http_stub_status_module \ --with-http_ssl_module \ --without-http_rewrite_module \ --lock-path=/var/lock/nginx.lock \ --pid-path=/var/run/nginx/nginx.pid \ --with-pcre //這個(gè)一定要加,不加啟動(dòng)nginxd會(huì)報(bào)錯(cuò)
make && make install
vim /etc/init.d/nginxd/ //添加下面內(nèi)容,讓nginx 支持service 啟動(dòng)關(guān)閉 #!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid
# Source function library. . /etc/rc.d/init.d/functions
# Source networking configuration. . /etc/sysconfig/network
# Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx" prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() { # make required directories user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done }
start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval }
stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval }
restart() { configtest || return $? stop sleep 1 start }
reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo }
force_reload() { restart }
configtest() { $nginx -t -c $NGINX_CONF_FILE }
rh_status() { status $prog }
rh_status_q() { rh_status >/dev/null 2>&1 }
case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
chmod +x /etc/init.d/nginxd service nginxd start chkconfig --add nginxd chkconfig nginxd on chkconfig --list nginxd
通過瀏覽器訪問服務(wù)器,出現(xiàn)welcome to nginx!表示成功
4、編譯安裝mysql 編譯環(huán)境前提(mysql 5.5.x 不再用 configure,而用cmake) # yum -y install gcc gcc-c++ make ncurses-devel //安裝所需的軟件包 #cd /usr/local/src/websoft #tar xvf cmake-2.8.4.tar.gz # cd cmake-2.8.4 # ./configure && make && make install
cd /usr/local/src/websoft # tar zxvf mysql-5.5.12.tar.gz # cd mysql-5.5.12 # cmake -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql \ -DMYSQL_DATADIR=/data/mysql/ \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=all \ -DMYSQL_TCP_PORT=3306
# make # make install 參數(shù)說明: -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql //安裝目錄 -DMYSQL_DATADIR=/data/mysql //數(shù)據(jù)庫存放目錄 -DWITH_MYISAM_STORAGE_ENGINE=1 //安裝myisam存儲(chǔ)引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 //安裝innodb存儲(chǔ)引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 //安裝archive存儲(chǔ)引擎 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 //安裝blackhole存儲(chǔ)引擎 -DENABLED_LOCAL_INFILE=1 //允許從本地導(dǎo)入數(shù)據(jù) -DDEFAULT_CHARSET=utf8 //使用utf8字符 -DDEFAULT_COLLATION=utf8_general_ci //校驗(yàn)字符 -DEXTRA_CHARSETS=all //安裝所有擴(kuò)展字符集 -DMYSQL_TCP_PORT=3306 //MySQL監(jiān)聽端口
mysql 配置 # groupadd -g 3306 mysql # useradd -u 3306 -g mysql -M -s /sbin/nologin mysql # mkdir /data/mysql/data # mkdir /data/mysql/log # chown -R mysql:mysql /data/mysql # chmod -R 755 /data/mysql # cp support-files/my-medium.cnf /etc/my.cnf #/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/webserver/mysql --datadir=/data/mysql & //初始化數(shù)據(jù)庫
# /usr/local/webserver/mysql/bin/mysqld_safe --user=mysql & 以mysql //用戶啟動(dòng)服務(wù)
# cp support-files/mysql.server /etc/init.d/mysqld # chmod +x /etc/init.d/mysqld # chkconfig --add mysqld # chkconfig mysqld on
# service mysqld restart # netstat -tnlp |grep 3306 # cd /usr/local/bin //進(jìn)入用戶的默認(rèn)搜索路徑下建立mysql命令的軟連接,可以直接執(zhí)行mysql命令 # ln -s /usr/local/webserver/mysql/bin/mysql mysql # ln -s /usr/local/webserver/mysql/bin/mysqlduamp mysqldump # ln -s /usr/local/webserver/mysql/bin/mysqladmin mysqladmin # mysqladmin -u root -p password '123456' # mysql -u root -p # flush privileges;
vim /etc/my.cnf //Mysql 優(yōu)化,在[mysqld]配置參數(shù)下面添加下面幾行(大概37行下面) innodb_file_per_table log-bin-trust-function-creators=1 skip-name-resolv innodb_flush_log_at_trx_commit=1 sync-binlog=1 lower_case_table_names=1 max_connections = 1500 (默認(rèn)100)
修改配置文件里下面的參數(shù),去掉前面的# innodb_buffer_pool_size = 2048M (默認(rèn)16M,可以為系統(tǒng)內(nèi)存50%~70%) innodb_additional_mem_pool_size = 256M (默認(rèn)2M) innodb_log_file_size = 512M (默認(rèn)5M,innodb_buffer_pool_size的四分之一) max_allowed_packet = 500M
下面安裝幾個(gè)所需要的源碼包 ########libiconv 加強(qiáng)系統(tǒng)對(duì)支持字符編碼轉(zhuǎn)換的功能######## cd /usr/local/src/websoft tar xvf libiconv-1.13.1.tar.gz cd libiconv ./configure --prefix=/usr/local/webserver make make install
####mcrypt是加密算法庫,PHP擴(kuò)展mcrypt功能對(duì)此庫有依耐關(guān)系,要使用mcrypt必須先安裝此庫###### tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8 ./configure make make install /sbin/ldconfig
######加密算法庫######### tar zxvf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8/ /sbin/ldconfig ./configure make make install
###mhash是哈希函數(shù),用來計(jì)算消息的校驗(yàn)碼之類的### tar zxvf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9 ./configure make make install
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib //創(chuàng)建一個(gè)mysqlclient庫的軟連接,不創(chuàng)建在make 的時(shí)候會(huì)提示找不到這個(gè)文件
5、安裝PHP php在編譯安裝時(shí),nginx要想能夠調(diào)用php提供動(dòng)態(tài)php格式的網(wǎng)頁,必須用FastCGI來實(shí)現(xiàn),但FastCGI只是一個(gè)框架,實(shí)現(xiàn)FastCGI框架的有PHP-FPM,但對(duì)于5.2.x版本的php來說 默認(rèn)是不支持PHP-FPM的,需要打上php-fpm的補(bǔ)丁,對(duì)于5.3.2之前版本的也是需要打補(bǔ)丁的,而且打補(bǔ)丁的過程比較麻煩。好在5.3.3版本的PHP-FPM被直接做進(jìn)了源代碼包中,在編譯安裝時(shí)只需啟用PHP-FPM功能即可 加上 --enable-fpm 啟動(dòng)fpm
cd /usr/local/src/websoft tar xvf php-5.3.6.tar.gz cd php-5.3.6 ./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-iconv-dir=/usr/local/webserver --with-freetype-dir \ --with-jpeg-dir --with-png-dir --with-zlib \ --with-libxml-dir=/usr --enable-xml --disable-rpath \ --enable-safe-mode --enable-bcmath \ --enable-shmop --enable-sysvsem \ --enable-inline-optimization --with-curl \ --with-curlwrappers \ --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 \ --without-pear --enable-fpm
make ZEND_EXTRA_LIBS='-liconv' #因?yàn)?liconv的目錄不是在/usr/local下所以安裝時(shí)需要手動(dòng)指定 make install
cp /usr/local/websoft/php-5.3.6/php.ini-production /usr/local/webserver/php/etc/php.ini //拷貝php配置文件
6、eaccelerator加速器(這個(gè)不是必須的,可以不安裝) eaccelerator是一個(gè)自由開放源碼PHP加速器,優(yōu)化和動(dòng)態(tài)內(nèi)容緩存,提高了性能php腳本的緩存性能,使得PHP腳本在編譯的狀態(tài)下,對(duì)服務(wù)器的開銷幾乎完全消除。 它還有對(duì)腳本起優(yōu)化作用,以加快其執(zhí)行效率。使您的PHP程序代碼執(zhí)效率能提高1-10倍;
tar jxvf eaccelerator-0.9.6.1.tar.bz2 cd eaccelerator-0.9.6.1/ /usr/local/webserver/php/bin/phpize ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config make make install
修改php.ini 配置文件 vim /usrl/local/webserver/php/etc/php.ini //修改extension_dir extension_dir= /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/"
配置eAccelerator加速PHP: 創(chuàng)建緩存存放目錄 mkdir -p /usr/local/webserver/eaccelerator_cache chmod 777 /usr/local/eaccelerator_cache 建立存放日志的目錄 mkdir -p /usr/local/webserver/php/logs
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"
查看安裝是否成功:php -v PHP 5.3.6 (cli) (built: Jun 8 2011 23:10:20) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
全部安裝工作準(zhǔn)備已經(jīng)完成,剩下進(jìn)行一些配置. vim /usr/local/php/etc/php-fpm.conf ##首先修改下面來配置修改 該配置文件只用修改以下四點(diǎn),只需要把藍(lán)色部分前面的注釋去掉
; Note: Used when pm is set to either 'static' or 'dynamic' ; Note: This value is mandatory.
pm.max_children = 50
; The number of child processes created on startup. ; Note: Used only when pm is set to 'dynamic' ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 10
; The desired minimum number of idle server processes. ; Note: Used only when pm is set to 'dynamic' ; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 5
; The desired maximum number of idle server processes. ; Note: Used only when pm is set to 'dynamic' ; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 35
修改完成,試著啟動(dòng)
#/usr/local/webserver/php/sbin/php-fpm &
啟動(dòng)后用netstat -tnlp //查看如果有如圖所示端口 如果有表示正常啟動(dòng)
如需要開機(jī)自動(dòng)啟動(dòng) 則可以添加到/etc/rc.d/rc.local中
vim /etc/rc.d/rc.local
在空白行添加 /usr/local/webserver/php/sbin/php-fpm &
vim /etc/nginx/nginx.conf //下面就是最后修改nginx.conf配置文件
user nginx //修改ngin守護(hù)進(jìn)程的用戶 worker_processes 4; //工作進(jìn)程數(shù),一般與 CPU 核數(shù)等同,但實(shí)際的可以多一些 error_log logs/error.log; //錯(cuò)誤日志位置
events { worker_connections 2048;#每個(gè)工作進(jìn)程允許最大的同時(shí)連接數(shù),可以稍微大一些,1024的倍數(shù) }
gzip on; server { listen 80; server_name 192.168.175.208; //服務(wù)器地址
找到
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
把前面注釋全部去掉, root后面的路徑是你網(wǎng)頁文件所放置的路徑, 該目錄如果不存在的話還需要手動(dòng)創(chuàng)建。 找到
location / { root /html; index index.php index.html index.htm; }
修改為如上所示 主要是添加index 后面的index.php 修改完成后保存退出,重新啟動(dòng)nginx服務(wù)
service nginxd restart
vim /usr/local/webserver/nginx/html/index.php //編輯測(cè)試文件在其中添加
<?php phpinfo(); ?>
保存退出
之后用web瀏覽器訪問 如果出現(xiàn)php信息頁面 表示服務(wù)成功,
下面是測(cè)試msql 的連接 把剛才/usr/local/webserver/nginx/html/index.php中的內(nèi)容修改成
<?php $link=mysql_connect("localhost","root","123456"); if(!$link) echo "FAILD!"; else echo "OK!"; ?>
然后刷新web頁面,如果出現(xiàn)OK!字樣 測(cè)表示正常連接
優(yōu)化Linux內(nèi)核參數(shù) #vi /etc/sysctl.conf 在/etc/sysctl.conf末尾增加以下內(nèi)容(可根據(jù)服務(wù)器實(shí)際情況進(jìn)行調(diào)整),在文件最后添加下面的內(nèi)容 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_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.ip_local_port_range = 1024 65535 #net.ipv4.ip_conntrack_max = 10000
保存退出 /sbin/sysctl -p
##############Linux內(nèi)核優(yōu)化參數(shù)說明########################## net.ipv4.tcp_max_syn_backlog = 65536 #記錄的那些尚未收到客戶端確認(rèn)信息的連接請(qǐng)求的最大值 net.core.netdev_max_backlog = 32768
#每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目。 net.core.somaxconn = 32768
#listen()的默認(rèn)參數(shù),掛起請(qǐng)求的最大數(shù)量.默認(rèn)是128.對(duì)繁忙的服務(wù)器,增加該值有助于網(wǎng)絡(luò)性能. net.core.wmem_default = 8388608
#該參數(shù)指定了發(fā)送套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位) net.core.rmem_default = 8388608
該參數(shù)指定了接收套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位) net.core.rmem_max = 16777216
#該參數(shù)指定了接收套接字緩沖區(qū)大小的最大值(以字節(jié)為單位) net.core.wmem_max = 16777216
#該參數(shù)指定了發(fā)送套接字緩沖區(qū)大小的最大值(以字節(jié)為單位) net.ipv4.tcp_timestamps = 0
#時(shí)間戳可以避免序列號(hào)的卷繞。一個(gè)1Gbps的鏈路肯定會(huì)遇到以前用過的序列號(hào)。時(shí)間戳能夠讓內(nèi)核接受這種“異常”的數(shù)據(jù)包。這里需要將其關(guān)掉。 net.ipv4.tcp_synack_retries = 2 #為了打開對(duì)端的連接,內(nèi)核需要發(fā)送一個(gè)SYN并附帶一個(gè)回應(yīng)前面一個(gè)SYN的ACK。也就是所謂三次握手中的第二次握手。這個(gè)設(shè)置決定了內(nèi)核放棄連接之前發(fā)送SYN+ACK包的數(shù)量。 net.ipv4.tcp_syn_retries = 2 #在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量。 net.ipv4.tcp_tw_recycle = 1 #啟用timewait快速回收。 net.ipv4.tcp_tw_reuse = 1 #開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接。 net.ipv4.tcp_mem = 94500000 915000000 927000000
# 同樣有3個(gè)值,意思是: net.ipv4.tcp_mem[0]:低于此值,TCP沒有內(nèi)存壓力.
#系統(tǒng)所能處理不屬于任何進(jìn)程的TCP sockets最大數(shù)量。假如超過這個(gè)數(shù)量﹐那么不屬于任何進(jìn)程的連接會(huì)被立即reset,并同時(shí)顯示警告信息。之所以要設(shè)定這個(gè)限制﹐純粹為了抵御那些簡(jiǎn)單的DoS攻擊﹐千萬不要依賴這個(gè)或是人為的降低這個(gè)限制 net.ipv4.ip_local_port_range = 1024 65535 #允許系統(tǒng)打開的端口范圍。 #net.ipv4.ip_conntrack_max = 10000 #設(shè)置系統(tǒng)對(duì)最大跟蹤的TCP連接數(shù)的限制(CentOS 5.6無此參數(shù))
##################################################################### 編寫每天定時(shí)切割Nginx日志的腳本,使用系統(tǒng)的logrotate 工具來回滾日志: logrotate 程序是一個(gè)日志文件管理工具。用來把舊的日志文件刪除,并創(chuàng)建新的日志文件,我們把它叫做“轉(zhuǎn)儲(chǔ)”。我們可以根據(jù)日志文件的大小,也可以根據(jù)其天數(shù)來轉(zhuǎn)儲(chǔ),這個(gè)過程一般通過 cron 程序來執(zhí)行。 logrotate 程序還可以用于壓縮日志文件,以及發(fā)送日志到指定的E-mai #vim /etc/logrotate/nginx //在/etc/logrotate.d/下建立一腳本文件nginx,內(nèi)容為: /usr/local/webserver/nginx/logs/*log { missingok rotate 10 daily notifempty sharedscripts postrotate /bin/kill -HUP `cat /var/run/nginx/nginx.pid 2>/dev/null` 2> /dev/null || true endscript }
保存退出 生成日志的格式為:access_log.1 access_log.2 error_log.3 ......
error_log.1 error_log.2 error_log.3 ........
用Webbench進(jìn)行簡(jiǎn)單的壓力測(cè)試 Webbench是有名的網(wǎng)站壓力測(cè)試工具。Webbench支持多平臺(tái),F(xiàn)reeBSD、Linux、Windows都可以使用。Webbench最多可以模擬3萬個(gè)并發(fā)連接去測(cè)試網(wǎng)站的負(fù)載能力。
cd /usr/local/src/websoft tar xvf webbench-1.5.tar.gz cd webbench-1.5 make && make install 本文出自:億恩科技【mszdt.com】 如需要開機(jī)自動(dòng)啟動(dòng) 則可以添加到/etc/rc.d/rc.local中
vim /etc/rc.d/rc.local
在空白行添加 /usr/local/webserver/php/sbin/php-fpm &
vim /etc/nginx/nginx.conf //下面就是最后修改nginx.conf配置文件
user nginx //修改ngin守護(hù)進(jìn)程的用戶 worker_processes 4; //工作進(jìn)程數(shù),一般與 CPU 核數(shù)等同,但實(shí)際的可以多一些 error_log logs/error.log; //錯(cuò)誤日志位置
events { worker_connections 2048;#每個(gè)工作進(jìn)程允許最大的同時(shí)連接數(shù),可以稍微大一些,1024的倍數(shù) }
gzip on; server { listen 80; server_name 192.168.175.208; //服務(wù)器地址
找到
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
把前面注釋全部去掉, root后面的路徑是你網(wǎng)頁文件所放置的路徑, 該目錄如果不存在的話還需要手動(dòng)創(chuàng)建。 找到
location / { root /html; index index.php index.html index.htm; }
修改為如上所示 主要是添加index 后面的index.php 修改完成后保存退出,重新啟動(dòng)nginx服務(wù)
service nginxd restart
vim /usr/local/webserver/nginx/html/index.php //編輯測(cè)試文件在其中添加
<?php phpinfo(); ?>
保存退出
之后用web瀏覽器訪問 如果出現(xiàn)php信息頁面 表示服務(wù)成功,
下面是測(cè)試msql 的連接 把剛才/usr/local/webserver/nginx/html/index.php中的內(nèi)容修改成
<?php $link=mysql_connect("localhost","root","123456"); if(!$link) echo "FAILD!"; else echo "OK!"; ?>
然后刷新web頁面,如果出現(xiàn)OK!字樣 測(cè)表示正常連接
優(yōu)化Linux內(nèi)核參數(shù) #vi /etc/sysctl.conf 在/etc/sysctl.conf末尾增加以下內(nèi)容(可根據(jù)服務(wù)器實(shí)際情況進(jìn)行調(diào)整),在文件最后添加下面的內(nèi)容 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_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.ip_local_port_range = 1024 65535 #net.ipv4.ip_conntrack_max = 10000
保存退出 /sbin/sysctl -p
##############Linux內(nèi)核優(yōu)化參數(shù)說明########################## net.ipv4.tcp_max_syn_backlog = 65536 #記錄的那些尚未收到客戶端確認(rèn)信息的連接請(qǐng)求的最大值 net.core.netdev_max_backlog = 32768
#每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目。 net.core.somaxconn = 32768
#listen()的默認(rèn)參數(shù),掛起請(qǐng)求的最大數(shù)量.默認(rèn)是128.對(duì)繁忙的服務(wù)器,增加該值有助于網(wǎng)絡(luò)性能. net.core.wmem_default = 8388608
#該參數(shù)指定了發(fā)送套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位) net.core.rmem_default = 8388608
該參數(shù)指定了接收套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位) net.core.rmem_max = 16777216
#該參數(shù)指定了接收套接字緩沖區(qū)大小的最大值(以字節(jié)為單位) net.core.wmem_max = 16777216
#該參數(shù)指定了發(fā)送套接字緩沖區(qū)大小的最大值(以字節(jié)為單位) net.ipv4.tcp_timestamps = 0
#時(shí)間戳可以避免序列號(hào)的卷繞。一個(gè)1Gbps的鏈路肯定會(huì)遇到以前用過的序列號(hào)。時(shí)間戳能夠讓內(nèi)核接受這種“異常”的數(shù)據(jù)包。這里需要將其關(guān)掉。 net.ipv4.tcp_synack_retries = 2 #為了打開對(duì)端的連接,內(nèi)核需要發(fā)送一個(gè)SYN并附帶一個(gè)回應(yīng)前面一個(gè)SYN的ACK。也就是所謂三次握手中的第二次握手。這個(gè)設(shè)置決定了內(nèi)核放棄連接之前發(fā)送SYN+ACK包的數(shù)量。 net.ipv4.tcp_syn_retries = 2 #在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量。 net.ipv4.tcp_tw_recycle = 1 #啟用timewait快速回收。 net.ipv4.tcp_tw_reuse = 1 #開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接。 net.ipv4.tcp_mem = 94500000 915000000 927000000
# 同樣有3個(gè)值,意思是: net.ipv4.tcp_mem[0]:低于此值,TCP沒有內(nèi)存壓力.
#系統(tǒng)所能處理不屬于任何進(jìn)程的TCP sockets最大數(shù)量。假如超過這個(gè)數(shù)量﹐那么不屬于任何進(jìn)程的連接會(huì)被立即reset,并同時(shí)顯示警告信息。之所以要設(shè)定這個(gè)限制﹐純粹為了抵御那些簡(jiǎn)單的DoS攻擊﹐千萬不要依賴這個(gè)或是人為的降低這個(gè)限制 net.ipv4.ip_local_port_range = 1024 65535 #允許系統(tǒng)打開的端口范圍。 #net.ipv4.ip_conntrack_max = 10000 #設(shè)置系統(tǒng)對(duì)最大跟蹤的TCP連接數(shù)的限制(CentOS 5.6無此參數(shù))
##################################################################### 編寫每天定時(shí)切割Nginx日志的腳本,使用系統(tǒng)的logrotate 工具來回滾日志: logrotate 程序是一個(gè)日志文件管理工具。用來把舊的日志文件刪除,并創(chuàng)建新的日志文件,我們把它叫做“轉(zhuǎn)儲(chǔ)”。我們可以根據(jù)日志文件的大小,也可以根據(jù)其天數(shù)來轉(zhuǎn)儲(chǔ),這個(gè)過程一般通過 cron 程序來執(zhí)行。 logrotate 程序還可以用于壓縮日志文件,以及發(fā)送日志到指定的E-mai #vim /etc/logrotate/nginx //在/etc/logrotate.d/下建立一腳本文件nginx,內(nèi)容為: /usr/local/webserver/nginx/logs/*log { missingok rotate 10 daily notifempty sharedscripts postrotate /bin/kill -HUP `cat /var/run/nginx/nginx.pid 2>/dev/null` 2> /dev/null || true endscript }
保存退出 生成日志的格式為:access_log.1 access_log.2 error_log.3 ......
error_log.1 error_log.2 error_log.3 ........
用Webbench進(jìn)行簡(jiǎn)單的壓力測(cè)試 Webbench是有名的網(wǎng)站壓力測(cè)試工具。Webbench支持多平臺(tái),F(xiàn)reeBSD、Linux、Windows都可以使用。Webbench最多可以模擬3萬個(gè)并發(fā)連接去測(cè)試網(wǎng)站的負(fù)載能力。
cd /usr/local/src/websoft tar xvf webbench-1.5.tar.gz cd webbench-1.5 make && make install 本文出自:億恩科技【www.enidc.com】 --> 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |