Nginx作为apache的代理 – 加载testing

我最近转向了2台服务器设置,其中Nginx,Apache Fastcgi和Php-fpm位于一台服务器上,而另一台服务器上则安装了Mysql 5.5。 每台服务器都有1GB的RAM

Nginx被用作Apache的映像代理。 而Apache使用FastCgi通过套接字与Php-Fpm进行通信。

Apache正在使用MPM工作者configuration(我使用下面的configuration)

<IfModule mpm_worker_module> StartServers 2 ServerLimit 2 MinSpareThreads 50 MaxSpareThreads 80 ThreadLimit 80 ThreadsPerChild 50 MaxClients 100 MaxRequestsPerChild 10000 </IfModule> 

Nginx的基本configuration

 user www-data www-data; worker_processes 2; events { worker_connections 1024; use epoll; } server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 55; 

现在,当我使用ab和Siege进行负载testing时,我在两个工具之间的每秒交易中获得了很大的差异

有时abs会产生非常差的结果,每秒转换3-6次,围攻返回结果每秒转换22-26次

我在这里有点困惑,无法决定我的新设置是否提高了性能!

以前,当我用来testing我用来获得平均每秒3-6转换,这是平低的,但是当围攻开始给出每秒26转的结果时我确信。

nginx.conf设置

 client_header_timeout 30m; client_body_timeout 30m; send_timeout 30m; connection_pool_size 256; client_header_buffer_size 16k; client_max_body_size 24M; client_body_buffer_size 128k; large_client_header_buffers 4 2k; request_pool_size 4k; proxy_buffer_size 256k; proxy_buffers 4 256k; proxy_busy_buffers_size 128k; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 1m; fastcgi_buffers 4 500k; fastcgi_busy_buffers_size 1m; fastcgi_temp_file_write_size 1m; fastcgi_intercept_errors on; gzip on; gzip_min_length 1100; gzip_buffers 4 8k; gzip_types text/plain; output_buffers 1 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 2; ignore_invalid_headers on; 

除非你的应用程序专门使用apache APIs,否则根本就不需要apache。 只需要用nginx提供图片,然后直接传给PHP-FPM; 你会得到更好的performance。

另外,假设一个8MB的 PHP脚本,你的100个maxclients = 100×8MB = 800MB仅仅用于PHP,这将杀死一个小的VPS。 这是在考虑数据库所需的内存之前。 如果你正在用PHP运行一些大的东西,比如drupal(有很多插件)或者magento,可能会有100个客户端x 200MB = 20GB的内存。 大多数wordpress安装更像是16-32MB,所以你需要2GB内存,加上数据库,nginx等等。

大概你在这里看到的是根据什么时候你的服务器内存不足,并开始研磨停止由于交换的基准变化。 我build议从一个很好的干净的nginx + fpmconfiguration开始,找出一个PHP线程在使用你的应用程序一段时间后最多使用多less内存,然后相应地调整nginx / fpm和你的数据库。 坦率地说,这些天,只要卸载apache,如果可以的话。