<?php function whatthefuck($cons) { $i = 0; $object = new StdClass; for (;$i < $cons; $i++) { $object->{"your_" . $i} = array("sorry" => 12345); $object->{"yourdaddy_" . $i} = new StdClass; $object->{"onlyyour"} = array("sorry" => 12345); } unset($object); } whatthefuck(10000); print "done"; ?>
|
安装Apache
sudo apt-get install apache2 libapache2-mod-php5 libapache2-mod-rpaf
|
安装nginx
Debian squeeze的nginx是0.7.67版本的,这个版本有点老,从测试结果来看效率确实不如sid的0.8.54版本(现在sid为1.0.4版本)。所以首先增加一个sid的源。为了不让sid大规模污染squeeze环境,在/etc/apt/preferences.d/新建priority文件并且写入以下Pin-Priority:
Package: * Pin: release v=6.* Pin-Priority: 900 Package: * Pin: release o=Debian Pin-Priority: -1
|
然后,
sudo apt-get -t sid install nginx-light
|
安装MySQL和PHP
跟LAMP、LLMP和LNMP的区别是,不需要php5-cgi,php的配置文件在/etc/php5/apache2/。
配置Apache
Apache在LANMP里的意义相当于LNMP里的php-fam、LLMP里的spawn-fcgi,以及php-cgi,首先要调整下Apache进程的数量,在/etc/apache/apache2.conf找到下面一段:
# prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_prefork_module> StartServers 14 MinSpareServers 14 MaxSpareServers 14 MaxClients 14 MaxRequestsPerChild 10000 </IfModule>
|
Timeout值也可以改一下,比如60,后面配置Nginx时会用到这个值。
再给Apache指定一个非80端口,比如81,在ports.conf里面改成:
NameVirtualHost *:81 Listen 127.0.0.1:81
|
虚拟主机需要在Apache上配好,与没有Nginx前端时一样,SSL不需要在Apache上配置。
最后把Apache精简一下,只当作后端用,没必要加载很多模块,保留
deflate dir mime php5 reqtimeout rewrite rpaf setenvif
足够了。
配置Nginx
Nginx采用反向代理的方式接收Apache的处理结果,需要先写一些代理的参数,可以将下面的配置保存为proxy_params,以后每个用到proxy_pass的地方都include一下。
proxy_redirect http:// $scheme://; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 30; proxy_send_timeout 30; proxy_read_timeout 60; proxy_buffers 8 128k;
|
然后可以配置虚拟主机了,以前的location ~ .*.(php|php5)?$里的fastcgi_pass之类,现在应该改写成proxy_pass:
# proxy the PHP scripts to Apache listening on 127.0.0.1:81 location ~ .php$ { proxy_pass http://127.0.0.1:81; include proxy_params; }
|
if (!-f $request_filename){ rewrite (.*) /index.php; }
|
try_files $uri $uri/ @apache; location @apache { proxy_pass http://127.0.0.1:81; include proxy_params; }
|
if (!-e $request_filename) { proxy_pass http://127.0.0.1:81; }
|
SSL需要在Nginx上配置。
Tips
配置Apache的mod_deflate时别忘了把text/javascript也加进去,有些PHP生成的js指定的mime type是text/javascript而不是application/x-javascript和application/javascript。Nginx不需要改,静态的js一定会是application/x-javascript。
Apache跑Ruby on Rails需要mod_passenger,配置只要
DocumentRoot xxx RailsEnv production RailsBaseURI /
|
nginx的worker process跟CPU核数一样多比较好。
ipv6only=on只在listen [::]:80 default_server的地方写。
Nginx上用的SSL证书需要把certificate、chain和CA都装在一个pem文件里,private key也可以装进去,然后ssl_certificate和ssl_certificate_key指定同一个文件就行了。
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。