编辑:增加了一些configuration和澄清多less是“多”,按anthonysomerset的要求。
编辑2:添加fastcgi_cache到nginxconfiguration,如由SleighBoybuild议。
我为一个朋友的网站运行一个服务器,时不时会有大量的stream量,大约有200-300个并发用户。 在尖峰之间,服务器有大约70-80个并发用户,并且没有麻烦地处理stream量。
该网站运行在与Debian Squeeze,Nginx,PHP5-FPM + APC(128MB),MySQL 5,memcached(128MB)和Varnish(1GB)的服务器上的W3 Total Cache。 parentesis中的数量是我为它们各自的caching分配了多less。 内存永远不会超过1.8 GB afaik,但可能会有点超额预定。 虽然通常不会造成任何问题
造成这个问题的原因总是PHP5-FPM利用100%的CPU一段时间,然后只是崩溃,导致nginx吐出502错误。 日志build议增加最大的孩子数量,但我想我已经达到了服务器可以处理多less个孩子的限制。 我一直在使用pm.max_requests (0(无限)),但是现在将其设置为1000,以查看重新产生的孩子现在是否可以提供帮助。
/etc/php5/fpm/pool.d/www.conf
[万维网] listen = /var/run/php5-fpm.sock user = www-data group = www-data 下午=dynamic pm.max_children = 200 pm.start_servers = 20 pm.min_spare_servers = 20 pm.max_spare_servers = 60 pm.max_requests = 1000
/etc/nginx/nginx.conf
用户www-data;
worker_processes 8;
pid /var/run/nginx.pid;
事件{
worker_connections 1024;
}
http {
发送文件;
tcp_nopush;
tcp_nodelay;
types_hash_max_size 2048;
包括/etc/nginx/mime.types;
default_type application / octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable“msie6”;
gzip_vary在;
gzip_comp_level 9;
gzip_buffers 16 8k;
gzip_types text /纯文本/ css应用程序/ json应用程序/ x-javascript文本/ xml应用程序/ xml应用程序/ xml + rss文本/ javascript;
fastcgi_cache_path / var / cache / nginx levels = 1:2
keys_zone = PHP5FPMCACHE:10米
无效=5米;
fastcgi_cache_key“$ scheme $ request_method $ host $ request_uri”;
包括/etc/nginx/conf.d/*.conf;
include / etc / nginx / sites-enabled / *;
}
/etc/nginx/sites-available/website.com
上游php5-fpm {
服务器unix:/var/run/php5-fpm.sock;
}
服务器{
server_name website.com * .website.com;
server_name_in_redirect off;
root /var/www/website.com;
听8080;
client_max_body_size 64M;
access_log /var/log/nginx/website.com.access.log;
error_log /var/log/nginx/website.com.error.log;
keepalive_timeout 75;
位置 / {
index index.php;
重写^。* / files /(.*)/wp-includes/ms-files.php?file=$1 last;
如果(!-e $ request_filename){
重写^(。+)$ /index.php?q=$1 last;
}
}
位置〜* ^。+ \。(jpg | jpeg | gif | css | png | js | ico | xml)$ {
到期30天;
access_logclosures;
}
位置〜\ .php $ {
fastcgi_pass php5-fpm;
fastcgi_cache PHP5FPMCACHE;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid任何1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale错误超时invalid_header http_500;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
包括/ etc / nginx / fastcgi_params;
}
}
/etc/varnish/website.vcl
后端默认{
.host =“127.0.0.1”;
.port =“8080”;
}
sub vcl_recv {
#规范化内容编码
if(req.http.Accept-Encoding){
如果(req.url〜“\。(jpg | png | gif | gz | tgz | bz2 | lzma | tbz)(\?。* |)$”){
删除req.http.Accept-Encoding;
} elsif(req.http.Accept-Encoding〜“gzip”){
设置req.http.Accept-Encoding =“gzip”;
} elsif(req.http.Accept-Encoding〜“deflate”){
设置req.http.Accept-Encoding =“deflate”;
} else {
删除req.http.Accept-Encoding;
}
}
#删除cookies和查询string的真实静态文件
if(req.url〜“^ / [^?] + \。(jpeg | jpg | png | gif | ico | js | css | txt | gz | zip | lzma | bz2 | tgz | tbz | html | htm)( \?。* |)$“){
unset req.http.cookie;
设置req.url = regsub(req.url,“\?。* $”,“”);
}
#从首页删除cookies
if(req.url〜“^ / $”){
unset req.http.cookie;
}
}
这是一款拥有4核和超线程(所以“8核”)和2GB内存的VPS。 我知道硬件节点(物理服务器)远远没有被超量使用,几乎没有被利用(因为我在托pipe公司工作了一个月左右),所以它几乎是一个专用的服务器。
如果您需要任何规格,请询问。
我怀疑你的清漆caching没有caching足够的命中
这是我会在你的情况下做什么:
降低PHP的最大孩子到100甚至50(如果清漆能正常工作,你不需要他们)也删除最大请求线,以使PHP进程不会重生太快,从而防止APC清除得太快,这是也不好
IF也不好,根据nginx – http://wiki.nginx.org/IfIsEvil
我会改变这一行:
if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; }
至:
try_files $uri $uri/ /index.php?$args;
如果你的nginx版本支持它(非常确定,如果你的nginx版本大于0.7.51,那么它支持它)
您还应该考虑直接将w3tc nginx规则插入到您的vhost文件中,以启用正确的磁盘增强页面caching(这比使用nginx的APCcaching更快)
看看我用于网站的以下清漆vcl – 你需要通读和编辑你的网站的一些东西 – 它也假定它只有在服务器上的WP站点和服务器上只有一个站点,它可以很容易被修改为更多的网站(看看cookie部分)
通用的VCL: https ://gist.github.com/b7332971a848bcb7ecef
有了这个configuration,我会争辩删除fastcgi_cache,以防止任何可能的问题与caching链发生,因为试图find任何杂散的旧caching条目是困难的
也告诉w3tc清漆是在127.0.0.1,它会清除它;)
我周三晚上部署了这个服务器(有几个域特定的修改),处理2500个活动站点访问者,它将负载减less到小于1,大约运行的PHP儿童大约在10-20(这个数字取决于login的用户数量和其他因素,比如cookies),这个服务器确实有更多的内存,但是原理是一样的,你应该能够轻松处理你在峰值时获得的访问者数量
APC和nginx fastcgi_cache将会帮助你很多。