Articles of FastCGI的

Apache + mod_php比Nginx + PHP-FPM慢4倍

我一直在Drupal 7网站进行基准testing,发现apache的页面执行速度比我创build的Nginx慢四倍。 由于这是页面执行时间,我的理解是,在执行完成之前,不会有其他任何页面资源请求,所以不太可能是由多个请求处理的方式引起的(我还应该提到,这些testing服务器只能被访问我)。 我尝试设置PHP-FPM与Apache一起工作,将其排除为可能的因素,但它只对约2%的页面执行时间产生影响。 每个服务器都运行Ubuntu 11.10,软件来自PPA,安装后只有最less量的configuration更改才能使服务器显示Drupal。 据我所知,这是我应该期待与这种设置相反。 Apache应该有一个优势,因为它不需要呼叫到外部服务,但是我看到的结果是大规模偏向于nginx。 有没有我看到的结果的任何解释? 有人可以提供我如何去确定原因的提示吗?

nginx在发送到fastcgi之前缓冲数据

我的nginx服务器正在缓冲客户端发送的所有数据,当它有所有数据时,它将数据写入fastcgi套接字。 我们如何避免这种延迟,让fastcgi一接收到客户端的数据,就立即开始接收数据? 我试图玩fastcgi设置,但没有运气。 谢谢

lighttpd上的FastCGI没有收到数据

我有一个简单的FastCGI脚本: public static void main (String args[]) { int count = 0; while(new FCGIInterface().FCGIaccept()>= 0) { count ++; System.out.println("Content-type: text/html\n\n"); System.out.println("<html>"); System.out.println( "<head><TITLE>FastCGI-Hello Java stdio</TITLE></head>"); System.out.println("<body>"); System.out.println("<H3>FastCGI Hello Java stdio</H3>"); System.out.println("request number " + count + " running on host " + System.getProperty("SERVER_NAME")); System.out.println("</body>"); System.out.println("</html>"); } } 设置为lighttpd为: server.modules += ( "mod_fastcgi" ) fastcgi.debug = […]

是否有可能告诉nginx通过fastcgi通过一个连接:closures标题通过未改变?

TL; DR :如何告诉nginx从我的php-fpm后端到a)发送一个“Connection:close”标题和b)不缓冲我的回应? 我有一个运行在nginx后面的php-fpm。 一般来说,这样做效果很好,我对此感到满意,但是有几个脚本非常希望向客户端浏览器发送一个“Connection:close”头文件(一个确保一个全新的连接到达HAProxy ),一个是为了能够响应客户端不能处理分块传输编码(.NET有一个错误)。 现在,如果我在PHP中这样做: <?php header('Connection: close'); echo "foobar"; 并尝试curl,我得到这个: curl -I http://localhost/foo.php HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Tue, 19 Feb 2013 08:07:03 GMT Content-Type: text/html Connection: keep-alive X-Powered-By: PHP/5.4.11 正如你所看到的,“closures”已经变成了“保持活力”。 但不仅如此:显然,nginx也会caching这个响应并一次性发送(通过发送大量数据,睡眠,发送更多的数据来确认)。 看看这个文档,我发现了在这里代理的“X-Accel-Buffering”头文件。 这个头看起来应该是做我想要的东西(好吧,它不能解决连接头问题,但至less应该停止缓冲),但是,唉,没有运气 <?php header('Connection: close'); header('X-Accel-Buffering: no'); echo "foobar"; curl -I http://localhost/foo.php HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Tue, […]

nginx + fcgiwrap:fastcgi_param的顺序如何?

我正在运行Debian 6.0.3 ( squeeze ), nginx-0.7.67 , fcgiwrap-1.0-1+squeeze1 。 这里是testing脚本: #!/usr/bin/perl use 5.010; use warnings; use strict; use Data::Dumper; print "Content-Type: text/html\n\n"; say Dumper {map {$_ => $ENV{$_}} 'SCRIPT_NAME', 'DOCUMENT_ROOT', 'WHATEVER'}; say "$<, $>, $(, $)"; 这里是nginxconfiguration: server { server_name domain.com; root /home/yuri/6; access_log /var/log/nginx/domain.com-access.log; error_log /var/log/nginx/domain.com-error.log; location /cgi-bin/ { fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param DOCUMENT_ROOT $document_root; […]

我可以让nginx在几秒钟后重新发送请求到FastCGI吗?

我的FastCGI(PHP-FPM)应用程序可能会遇到需要一些时间来自我修复的情况。 我想告诉nginx它应该等待几秒钟,然后重新发送请求到FastCGI后端。 我已经尝试了一个hacky安装,其中nginxconfiguration了fastcgi_next_upstream http_503 ( 请参阅文档 ),其中fastcgiconfiguration与上游相同: upstream php { server 127.0.0.1:9000; server 127.0.0.1:9000; } location ~ \.php(/|$) { fastcgi_pass php; fastcgi_next_upstream http_503 } 当PHP应用程序需要一些时间和空间的时候,它会回复503 ,使得nginx“向前移动”到显然是同一个服务器的下一个上游。 不幸的是,nginx以毫秒为单位进行第二次调用。 我想延迟nginx的第二个电话几秒钟,以确保PHP后端完全正常运行后,错误的情况。 那么,如何在第二次尝试之前添加适当的延迟? 在幕后,我需要回收整个PHP-FPM过程,因为MongoDB驱动程序如何处理副本集故障转移。 这就是为什么我无法在PHP级别完全处理这个案例,但是需要短时间释放PHP过程。

催化剂stderr去错误的日志

我在Debian Wheezy服务器上有几个由Apache 2.2.22服务的虚拟主机。 一些虚拟主机是Catalyst应用程序; 所有虚拟主机都使用mod_fastcgi和mod_suexec运行。 每个虚拟主机都configuration为使用不同的ErrorLog 。 当Catalyst应用程序中的代码写入stderr(例如,调用warn )时,消息将在主要的Apache错误日志中结束,而不是在<VirtualHost>块中指定的日志中。 它没有以时间戳或任何其他信息为前缀。 不过,如果我把这个简单的fastcgi脚本叫做 #!/usr/bin/perl use FCGI; my $request = FCGI::Request(); while($request->Accept() >= 0) { print("Content-type: text/html\r\n\r\n"); warn 'Hello!'; } Hello! 确实结束在正确的地方,正确的前缀: [Thu Jul 10 14:40:18 2014] [error] [client xxxx] FastCGI: server "/data/vhost/wibble/docs/test.cgi" stderr: Hello! at test.cgi line 9., referer: http://my.test.site/ 我怎么能得到催化剂网站写他们的stderr到正确的日志? 唯一相关的问题是我可以find这个 – 类似的问题,但不同的模块( mod_perl ),可悲的是没有答案。 我也发现这个Apache错误报告 […]

apache worker + php fastcgi,长脚本

我的问题是,长的PHP脚本(几个小时)正在退出提前。 (FireFox表示“加载页面时,服务器的连接重置”)。 有时在30分钟后退出,有时在1小时45分钟后退出。 CentOS 6.6 64bit Apache 2.2.9 MPM worker php 5.5.20 mod_fcgid 2.3.9 没有安装操作码caching cPanel和WHM 11.46 我有root权限 对于FastCGI,我通过WHM包含编辑器将以下内容包含到httpd.conf中以post_virtualhost: <IfModule mod_fcgid.c> FcgidBusyTimeout 86400 FcgidIOTimeout 86400 </IfModule> 之后,IfModule节我有<目录path/到/ mysite>部分(“<”之后没有空格)。 我在脚本中多次使用set_time_limit()和ignore_user_abort()来保持运行。 在Apache错误日志中没有任何东西。 phpinfo: http ://lot-art.com/info.php(你可以看到set_time_limit()和ignore_user_abort()的作品) 它在我的旧服务器上运行正常,运行mod_php: http : //216.119.148.91/info.php

Nginx作为Apache之前的反向代理

目前的设置单一的CentOS 6 VPS与6G内存运行Apache 2.2,mariadb和PHP通过FastCGI。 服务器主要是WordPress的网站,但也有一些其他基于PHP的网站。 目前,我们并没有为任何网站使用HTTPS,但计划将其添加到基于PHP的网站进行身份validation。 将Nginx作为反向代理(有或没有caching)添加到同一个物理服务器上的apache + FastCGI前面的静态内容,有没有什么好处? Apache没有加载mod_php,所以它已经在静态服务很快了。 1A。 保持apache在中间并保持apache-php与FastCGI的关系有什么好处。 1B。 如果我们把Apache-FastCGI改成Apache-mod_php,会有什么好处呢? 由于Apache现在唯一的任务是提供dynamic内容,那么mod_php会提高性能吗? 和Apache-FstCGI一样,apache必须要求一个单独的进程(FastCGI)来parsingphp,而在mod_php中,apache进程可以直接parsingphp。 1C。 哪个服务器应该处理SSL的东西? 如果将apache从中间删除,Nginx直接使用php-fpm作为dynamic内容,会有什么优势? 我们正在考虑让CloudFlare免费计划添加CDN,那么如果前面有CloudFlare,那么添加nginx是否有意义呢?

Apache2和Lighttpd在同一台机器上:如何共享php APC?

我有一个Debian机器,我使用apache2(与mod_proxy)和Lighttpd(长轮询服务和静态内容)。 APC和lighttpd都运行php5。 Lighttp使用FastCGI for php5。 现在,这两个环境运行良好,但APCcaching是分开的,有没有办法告诉lighttpd和Apache使用相同的APCcaching? 我想要获得的例子: //example.com, served by apache2: <?php apc_add('foo', 'bar'); echo apc_fetch('foo'); //output: bar ?> //polling.example.com, served by lighttpd: <?php echo apc_fetch('foo'); //output desired: bar //actual output: nothing! ?> PS:我认为这属于服务器故障,如果没有,我会发布在Stackoverflow。 编辑 :从丹读取答案,并在stackoverflow上search,很明显,目前APCcaching不能共享,当有人需要这一点,另一个caching系统必须select(作为memcache,这比APC慢 如果考虑到SO重复,请随时closures此问题。