本文已有最新版本:

  请点击Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)




  [文章作者:张宴 本文版本:v2.1 最后修改:2008.02.27 转载请注明出处:http://blog.zyan.cc]

  前言:本文为我2007年9月写过的文章《Nginx 0.5.31 + PHP 5.2.4(FastCGI)搭建可承受3万以上并发连接数,胜过Apache 10倍的Web服务器》的第2版,经过了多台服务器的测试,修正了PHP iconv和gd库冲突的BUG,增加了PHP mcrypt、memcache扩展,修改了PHP和Nginx编译参数,优化了Nginx配置文件,添加了部分功能。

  Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。

  Nginx 的中文维基:http://wiki.codemongers.com/NginxChs



  在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx 0.5.33 + PHP 5.2.5 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍

  根据我的经验,4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。

  而这台 Nginx 0.5.33 + PHP 5.2.5 (FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。

  在3万并发连接下,访问Nginx 0.5.33 + PHP 5.2.5 (FastCGI) 服务器的PHP程序,仍然速度飞快。下图为Nginx的状态监控页面,显示的活动连接数为28457(关于Nginx的监控页配置,会在本文接下来所给出的Nginx配置文件中写明):

  点击在新窗口中浏览此图片

  以下为 Nginx 0.5.33 + PHP 5.2.5 (FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程和64个php-cgi进程时的系统负载情况:

  点击在新窗口中浏览此图片



  安装步骤:
  (系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为CentOS 4.4)

  一、获取相关开源程序:
  1、下载程序源码包到当前目录:
  本文中提到的所有开源软件为截止到2007年11月25日的最新稳定版。我将它们打了两个压缩包。

  第一个压缩包:nginx-php-1.zip
  下载地址:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2746375

  第二个压缩包:nginx-php-2.zip
  下载地址:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2746370

  附:各开源软件单独下载地址(如果下载了以上两个压缩包,则无需下载以下软件):
  http://down.zyan.cc/linux/nginx-php/ (登录用户名、密码均为blog.zyan.cc)

  2、解压缩:
mkdir -p /data0/software
cd /data0/software
unzip nginx-php-1.zip
unzip nginx-php-2.zip
cd /data0/software/nginx-php



  二、安装PHP 5.2.5(FastCGI模式)
  1、编译安装PHP 5.2.5所需的支持库:
tar zxvf libiconv-1.11.tar.gz
cd libiconv-1.11/
./configure --prefix=/usr/local
make
make install
cd ../

tar zxvf freetype-2.3.5.tar.gz
cd freetype-2.3.5/
./configure
make
make install
cd ../

tar zxvf libpng-1.2.20.tar.gz
cd libpng-1.2.20/
./configure
make
make install
cd ../

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --enable-static --enable-shared
make
make install
make install-lib
cd ../

#----If your system was install libxml2, you do not need to install it.----
#tar zxvf libxml2-2.6.30.tar.gz
#cd libxml2-2.6.30/
#./configure
#make
#install
#cd ../

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 ../../

tar zxvf mhash-0.9.9.tar.gz
cd mhash-0.9.9/
./configure
make
make install
cd ../

cp /usr/local/lib/libmcrypt.* /usr/lib
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

tar zxvf mcrypt-2.6.6.tar.gz
cd mcrypt-2.6.6/
./configure
make
make install
cd ../



  2、编译安装MySQL 5.0.45
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/webserver/mysql/ --without-debug --with-unix-socket-path=/tmp/mysql.sock --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --with-extra-charsets=gbk,gb2312,utf8 --with-pthread --enable-thread-safe-client
make && make install
chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql
cp support-files/my-medium.cnf /usr/local/webserver/mysql/my.cnf
cd ../



  附:以下为附加步骤,如果你想在这台服务器上运行MySQL数据库,则执行以下两步。如果你只是希望让PHP支持MySQL扩展库,能够连接其他服务器上的MySQL数据库,那么,以下两步无需执行。
  ①、以mysql用户帐号的身份建立数据表:
/usr/local/webserver/mysql/bin/mysql_install_db --defaults-file=/usr/local/webserver/mysql/my.cnf --basedir=/usr/local/webserver/mysql --datadir=/usr/local/webserver/mysql/data --user=mysql --pid-file=/usr/local/webserver/mysql/mysql.pid --skip-locking --port=3306 --socket=/tmp/mysql.sock


  ②、启动MySQL(最后的&表示在后台运行)
/bin/sh /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/usr/local/webserver/mysql/my.cnf &



  3、编译安装PHP(FastCGI模式)
tar zxvf php-5.2.5.tar.gz
cd php-5.2.5/
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-debug --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-force-cgi-redirect --enable-mbstring --with-mcrypt
sed -i 's#-lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
make
make install
cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../



  4、编译安装PHP5扩展模块
tar zxvf memcache-2.2.1.tgz
cd memcache-2.2.1/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

cd php-5.2.5/ext/gd/
/usr/local/webserver/php/bin/phpize
./configure --with-jpeg-dir --with-png-dir --with-zlib-dir --with-ttf --with-freetype-dir --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../../../


  5、修改php.ini文件
  手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = "./"
  修改为extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
  并在此行后增加以下几行,然后保存:
  extension = "memcache.so"
  extension = "gd.so"

  自动修改:若嫌手工修改麻烦,可执行以下shell命令,自动完成对php.ini文件的修改:
sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\nextension = "gd.so"\n#' /usr/local/webserver/php/etc/php.ini



  6、创建www用户和组,以及其使用的目录:
/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /data0/vshare/htdocs
chmod +w /data0/vshare/htdocs
chown -R www:www /data0/vshare/htdocs


  7、安装lighttpd中附带的spawn-fcgi,用来启动php-cgi
  注:压缩包中的spawn-fcgi程序为已经编译成二进制的版本。
cp spawn-fcgi /usr/local/webserver/php/bin
chmod +x /usr/local/webserver/php/bin/spawn-fcgi


  8、启动php-cgi进程,监听127.0.0.1的10080端口,进程数为64(如果服务器内存小于3GB,可以只开启25个进程),用户为www:
/usr/local/webserver/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u www -f /usr/local/webserver/php/bin/php-cgi



  三、安装Nginx 0.5.33
  1、安装Nginx所需的pcre库:
tar zxvf pcre-7.2.tar.gz
cd pcre-7.2/
./configure
make && make install
cd ../


  2、安装Nginx
tar zxvf nginx-0.5.33.tar.gz
cd nginx-0.5.33/
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module
make && make install
cd ../


  3、创建Nginx日志目录
mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs


  4、创建Nginx配置文件
  ①、在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件:
rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf

  输入以下内容:
引用
user  www www;

worker_processes 10;

error_log  /data1/logs/nginx_error.log  crit;

#pid        logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
       use epoll;

       worker_connections 51200;
}

http
{
       include       conf/mime.types;
       default_type  application/octet-stream;

       charset  gb2312;
      
       server_names_hash_bucket_size 128;
      
       #sendfile on;
       #tcp_nopush     on;

       keepalive_timeout 60;

       tcp_nodelay on;

       gzip on;
       gzip_min_length  1k;
       gzip_buffers     4 8k;
       gzip_http_version 1.1;
       gzip_types       text/plain application/x-javascript text/css text/html application/xml;

       server
       {
               listen       80;
               server_name  blog.zyan.cc;
               index index.html index.htm index.php;
               root  /data0/vshare/htdocs;

               if (-d $request_filename)
               {
                      rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
               }
                              
               location ~ .*\.php?$
               {
                    include conf/fcgi.conf;      
                    fastcgi_pass  127.0.0.1:10080;
                    fastcgi_index index.php;
               }

               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  80;
               server_name  status.blog.zyan.cc;

               location / {
                    stub_status on;
                    access_log   off;
               }
       }
}


  ②、在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件:
vi /usr/local/webserver/nginx/conf/fcgi.conf

  输入以下内容:
引用
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param  REDIRECT_STATUS    200;


  5、启动Nginx
ulimit -SHn 51200
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf



  四、配置开机自动启动Nginx + PHP
vi /etc/rc.local

  在末尾增加以下内容:
引用
ulimit -SHn 51200
/usr/local/webserver/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u www -f /usr/local/webserver/php/bin/php-cgi
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf



  五、优化Linux内核参数
vi /etc/sysctl.conf

  在末尾增加以下内容:
引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000    65000


  使配置立即生效:
/sbin/sysctl -p



  六、在不停止Nginx服务的情况下平滑变更Nginx配置
  (1)、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
/usr/local/webserver/nginx/sbin/nginx -t

  如果屏幕显示以下两行信息,说明配置文件正确:
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully


  (2)、这时,输入以下命令查看Nginx主进程号:
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

  屏幕显示的即为Nginx主进程号,例如:
  6302
  这时,执行以下命令即可使修改过的Nginx配置文件生效:
kill -HUP 6302



  本文若有小的修改,会第一时间在以下网址发布:
  http://blog.zyan.cc/read.php/314.htm

  (全文完)

Tags: , ,



技术大类 » Web服务器 | 评论(238) | 引用(1) | 阅读(240403)
zeek Homepage
2020-4-15 16:00
The best hair dryer review according to best reviews, best-sellers, and stylists.hair dryer review
mcafee.com/activate Email Homepage
2020-4-23 07:15
mcafee provides the best system security for your pc, laptop or tablet from online threats whether it is a virus, malware or spyware.it is prevents the malware and Secures the important information.visit now:-http://activatemcafee.com
mcafee.com/activate Email Homepage
2020-4-23 18:23
Mcafee.com/activate Antivirus software works to block viruses from entering your computer system and kill or quarantine viruses that have some broken.Download, Install and Activate your mcafee product card from  mcafee live safe, mcafee total protection, internet security.
mcafee Email Homepage
2020-5-11 20:33
mcafee.com/activate Antivirus is a software that provides a wide variety of virus detection methods as it not only prevents viruses from entering your computer system but kills or quarantines viruses that have broken through the firewall.
mcafee activate Email Homepage
2020-5-13 14:09
Mcafee activate is one of the best security tools for any of your devices. This is not just a regular tool that removes small viruses and reports bugs. But this is one whole full security provision for your Device. Not only Mac or Windows but it works with other tablets and even mobile phones too. With security being the main focus of the McAfee security systems, it also saves you from potential threats and warns you, To protect your device with McAfee https://usmcafee.us/
Trend Email Homepage
2020-5-19 17:33
What good information, I like all your blogs. You are fine. Thanks to the administrator.trend micro best buy install Trend Micro Best Buy install
Trend Email Homepage
2020-5-19 17:35
What good information, I like all your blogs. You are fine. Thanks to the administrator.<a href=" https://www.trendmicroinstall.com/trend-micro-bestbuy/" target="_blank"> trend micro best buy install </a>
office setup Email Homepage
2020-5-25 20:21
Learn how to establish Office setup without any error on your computers. Follow the easy steps and guidelines that will help you to deploy office.com/setup.
office setup Email Homepage
2020-5-26 14:09
Learn how to establish Office setup without any error on your computers. Follow the easy steps and guidelines that will help you to deploy office.com/setup.
mircae12 Email Homepage
2020-5-27 15:02
Routers play a very important role in our day-to-day lives. The importance and significance of this small yet impactful device can be estimated from the fact that it finds a place in every other household.webroot tech support|asus router support|email customer number
mircae12 Email Homepage
2020-5-27 15:03
Routers play a very important role in our day-to-day lives. The importance and significance of this small yet impactful device can be estimated from the fact that it finds a place in every other household.webroot tech support|asus router support|email customer number
installvipreantivirus Email Homepage
2020-6-17 18:55
Install vipre on your device and protect it from cyber threats.<a href="https://installvipreantivirus.com/">install vipre using product key</a><a href="https://installvipreantivirus.com/vipre-download-with-product-key/">vipre download with product key</a><a href="https://installvipreantivirus.com/vipre-activation/">vipre activation</a>  <a href="https://installvipreantivirus.com/i-need-to-install-vipre/">i need to install vipre</a>  <a href="https://installvipreantivirus.com/install-vipre-with-key-code/">install vipre with key code</a>
installkaspersky Email Homepage
2020-7-4 12:29
install kaspersky with activation code | How to install and activate kaspersky on multiple computers•  Each copy of a multiple-device license for Kaspersky Anti-Virus 2019 (for example, a 3 PCs license) is installed and activated in the same way on all computers you want to protect.•  In conclusion to activate Kaspersky Internet Security 2019 on all computers, use one and the same activation code you purchased.<a href="https://installkaspersky.com/kaspersky-support-number/">kaspersky support number and Kaspersky Total Security Download</a><a href="https://installkaspersky.com/kaspersky-download-and-install">kaspersky installation</a><a href="https://installkaspersky.com/kaspersky-setup/">kaspersky setup</a><a href="https://installkaspersky.com">install kaspersky with activation code</a><a href="http://installkaspersky.com/kaspersky-code-activation">kaspersky code activation and kaspersky lab</a><a href="https://installkaspersky.com/geek-squad-kaspersky-activation-code">Geek squad kaspersky activation code</a>
ethanbunch Email Homepage
2020-7-16 20:55
Mcafee Login Mobile helps your customers feel safe no matter how large or small your website is Meaning you ll get more engagement, and more conversions.For more details visit our website!https://mcafeepro.com/
installvipre Email Homepage
2020-7-17 18:53
activationavg Email Homepage
2020-7-23 18:39
netrockdeals Email Homepage
2020-7-30 15:27
Keep yourself updated and take necessary precautionary measures by keeping in touch with the latest developments in our combat against the Coronavirus.if you find the best website for deals and Discount, offers here is the best website netrockdeals.com is provided the best Discount and cashback offers themancompany coupons rakshabandhan offers fnp coupons hostgator coupon hostinger coupon code dominos coupon zomato coupon credit card apply dominos coupon The Souled Store coupons godaddy coupon bigbasket coupons Beardo coupons BigRcok coupons igp coupons healthkart coupons a2 hosting coupon ola coupons zomato coupons bookmyshow coupons, ola coupon dr batras coupons
McAfeePro Email Homepage
2020-7-30 15:31
Mcafee Login : Thanks for sharing this fantastic Article, really very informative. Your writing skill is very good, you must keep writing this type of Article. McAfeePro Antivirus is the key to protect your digital world from malicious web content and cyber threats. Download McAfeePro to  activate the file via Mcafee Login for more information visit us at :  https://mcafeepro.com.
installtrendmicro Email Homepage
2020-8-4 20:15
Install trend micro at www.installtrendmicro.com antivirus is one of the top rated antivirus program available online. It safeguards a user from cyber threats such as malware, spyware and viruses that may steal confidential user information and that information later can be used by hackers for financial gains. Trend micro also optimizes computer system for performance related issues. <a href="https://installtrendmicro.com/download-trend-micro-with-key/">Download trend micro with Serial number</a><a href="https://installtrendmicro.com/">install trend micro activation code</a><a href="https://installtrendmicro.com/install-trend-micro-on-new-computer/">Install trend micro on new computer</a><a href="https://installtrendmicro.com/install-trend-micro-without-disk/">install trend micro without disk</a><a href="https://installtrendmicro.com/trend-micro-security-activation/">trend micro internet security activation</a><a href="https://installtrendmicro.com/best-buy-trendmicro/">trendmicro.com/bestbuy</a><a href="https://installtrendmicro.com/www-trendmicro-com-activation/">www.trendmicro.com/activation</a><a href="https://installtrendmicro.com/trendmicro-com-max/">www.trendmicro.com/getmax</a><a href="https://installtrendmicro.com/download-trend-micro-with-key/">trendmicro homeinstall</a>
分页: 9/12 第一页 上页 4 5 6 7 8 9 10 11 12 下页 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]