本文已有最新版本:

  请点击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服务器 | 评论(240) | 引用(1) | 阅读(245773)
emmawillison Homepage
2022-9-29 17:22
Dissertation writing or thesis writing may be an extremely time-consuming and laborious process. Students tend to put off starting their dissertations since universities typically give them a lot of time to work on them, which great encourages procrastination. Students sometimes fall into the trap of believing they have a deal of time and may, as a consequence, begin their work at a later stage. Nevertheless, this mentality only serves to make them more anxious as the due date for their work approaches. Online custom essay help provides the most outstanding custom dissertation writing services available, all at prices that are reasonable. Students who are having trouble writing their dissertations may count on us to give assistance with the writing of their dissertations around the clock, seven days a week.Online custom essay help
emmawillison Homepage
2022-9-29 17:23
Therefore, students are often asked to write assignments and do case studies on many different types of topics. However, due to a lack of writing skills, time management or mathematical solving capability other resources) to begin learning to code. you furthermore might, students are often scared to do their accounting assignments plagiarism -free. Furthermore, we meet the entire university plan while doing your homework. Students have to do a lot of work in their academics whether it is homework or assignment. However, with other projects and commitments, sometimes it becomes complicated to attend every homework on time, and which is why many students aspire do my accounting homework from an authentic and reliable writing servicehttps://www.domyhomework.us/do-my-accounting-homework.html
amaradavdi Email Homepage
2022-10-3 19:35
Choose Assignment help online Service in Canada to buy assistance of awithdemic writing. Online assignment help connects you with professional writers so you can get requisite help for your Assignment.https://www.allassignmenthelp.com/ca/
Jmaeswilliam Email Homepage
2022-10-3 20:07
AllAssignmentHelp is the appropriate place where you can obtain authentic and dependable assignment experts online services as per your requirements. Our team of adept writers presents the best Coursework Help to the students which facilitates their project windup.https://www.allassignmenthelp.com/au/
lucas
2023-1-7 17:27
I read this post your post so nice and very informative post thanks for sharing this post! 相性占い | 復縁占い
Hibbah Email
2023-4-10 18:02
Alasan pilih agen BakauToto: Link Alternatif Login Bakau Toto Slot Terbaru terbesar, karena memberi banyak bantuan dan taruhan murah. Setiap agen togel SGP memiliki cara masing-masing untuk menarik minat para pemainnya untuk bergabung di dalam agen tersebut, tetapi ada banyak agen penipu yang juga melakukan penawaran-penawaran menarik agar banyak pemain yang tertipu ikut bergabung di dalamnya. Oleh karena itu anda harus bisa memilih agen togel singapore pools yang terbaik dengan tepat untuk menjanjikan kenyamanan dan keamanan ketika bermain di agen judi tersebut, terbukti ini menjadi salah satu alasan pilih agen judi result togel SGP pools online terbaik memang selalu menguntungkan.  bakautoto login
seo
2023-8-22 00:12
Interesting post. I Have Been wondering about this issue, so thanks for posting. Pretty cool post.It 's really very nice and Useful post.Thanks 토토사이트 추천  https://totoranking.net/
adrianalima Email Homepage
2023-9-7 16:58
pay someone to take my online class  is an invaluable service that connects students with USA academic experts who truly understand the intricacies of the American education system. Their team of dedicated professionals has consistently demonstrated their commitment to excellence. With their help, I've not only improved my grades but also gained a deeper understanding of the subjects. Their unique approach to online learning support is tailored to individual needs, providing a personalized educational experience. The peace of mind I've gained, knowing that I have experts in my corner, is truly priceless. If you're seeking academic assistance from USA academic experts, look no further than "Pay Someone to Take My Online Class.
usaonlineclasshelp Email Homepage
2023-10-9 14:27
Online Class Help USA is a leading and popular platform for online class assistance. With our expert team, led by esteemed PhD educators, we provide students with reliable assistance for their online classes across various subjects. From tackling intricate math problems to simplifying complex chemistry concepts, we’ve got you covered.https://onlineclasshelpusa.com/
mymathlab Email Homepage
2023-10-9 14:29
Mymathlab Answers is a leading and popular platform for Mymathlab assistance. We are the leading MyMathLab services and offer reliable MyMathLab answers. Our experts are keenly available to serve every student in the best possible ways. We are committed to affordably providing math lab solutions.https://mymathlabanswer.com/
mymathlabanswer Email Homepage
2023-10-14 20:23
Do you need help with your Mymathlab homework? MyMathlab Answers is there to assist you. Our reliable & perfect solution will surely enhance your grades in Mymathlab! Mymathlab Answers is the choice of numerous students who have excelled in Mymathlab with flying colors. We believe in matchless services that value your money, time, and effort.https://mymathlabanswer.com/
gotakemyonlineclass Email
2023-11-7 17:56
Raise your GPA score with online class helpWorried about a low accuracy score in your homework?Worry Not! It’s easy to raise your low GPA score <a href=\\\"https://www.gotakemyonlineclass.com/\\\">help with online class</a> provided by the best US-based subject matter experts of GoTakeMyOnlineClass. With us, you have a chance to,•  Get an excellent GPA score for your homework answers •  Maximum guidance with your subject related coursework •  Submit your homework answers with maximum accuracy Hire us now to get an outstanding GPA score today           https://www.gotakemyonlineclass.com/
take online class Email
2023-11-7 18:54
The importance of take full online class help services With take full online class help services, your submissions will be done on time and are directly submitted to the entrance. You can log in to your portal and track the entries that happen in auto-mode. Additionally, your coursework will be done by experts so you will never score less than B grade. https://takeonlineclasshelp.com/
online class help Email
2023-11-14 13:59
Seamless Support for Virtual Learning: Expert Online Class Help Discover unparalleled assistance with our Online Class Help service, tailored for modern learners. We offer expert guidance across various subjects, ensuring personalized attention and interactive learning solutions. Our platform provides 24/7 access to resources and tutors, facilitating academic success and knowledge mastery in a digital learning environment. Embrace the future of education with our innovative, supportive, and user-friendly online class assistance.https://sites.google.com/view/onlineclasshelpusa/home
online class help Email
2023-11-14 14:00
Seamless Support for Virtual Learning: Expert Online Class Help Discover unparalleled assistance with our Online Class Help service, tailored for modern learners. We offer expert guidance across various subjects, ensuring personalized attention and interactive learning solutions. Our platform provides 24/7 access to resources and tutors, facilitating academic success and knowledge mastery in a digital learning environment. Embrace the future of education with our innovative, supportive, and user-friendly online class assistance.https://sites.google.com/view/onlineclasshelpusa/home
MyMathLab Email Homepage
2023-11-20 14:04
In today's digital education era, MyMathLab stands out. This platform offers comprehensive MyMathLab homework answers, enabling students to grasp complex math concepts effectively. It's an innovative tool that simplifies learning, making mathematics more accessible and engaging for learners at all levels.
MyMathLab Email Homepage
2023-11-20 14:05
In the world of online education, MyMathLab is a powerful tool for learning mathematics. However, students often seek MyMathLab answers to excel in their coursework. While using answers as a shortcut may seem tempting, it's essential to remember that genuine learning comes from understanding the concepts. Balancing resources like MyMathLab with dedicated study is the key to mastering math.https://www.gotakemyonlineclass.com/how-to-get-mymathlab-answer-key/
take online class help Email Homepage
2023-11-21 14:14
Enhance The Accuracy Of My Math Lab Answers With Solved AnswersLack of academic guidance will no longer affect your Math Lab Answers as we have the industry’s best academic resources for solving multiple homework assignments almost effortlessly. Take Online Class offers an access key to the solved math lab answers that help an average scorer to use easy strategies to solve complicated Math Lab homework in a short time.Contact us to avail our professional academic help.https://takeonlineclasshelp.com/how-to-get-mymathlab-answers/
Lucky cola
2024-2-7 13:46
Get ready to level up your gaming experience!  Lucky cola
WileyPLUS Assignments Email Homepage
2024-8-20 21:16
Looking for ways to cheat on WileyPLUS assignments? Think again! Instead of risking your academic integrity, why not explore legitimate resources and expert assistance to help you ace your WileyPLUS tasks? Discover how to master the platform, improve your grades, and succeed in your studies without resorting to shortcuts.https://medium.com/@syreetamika/can-you-cheat-on-wileyplus-assignments-to-get-correct-wileyplus-answers-2bdd375030c4
分页: 12/13 第一页 上页 7 8 9 10 11 12 13 下页 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]