我们有一个运行nginx和PHP-FPM的负载很重的服务器。 我们在这个服务器上有6个网站,运行PHP-FPM和nginx。 软件全是vBulletin 3.8和WordPress。 数据库位于单独的服务器上。 现在,由于这些网站是非常受欢迎的网站,我们通常同时在线访问7-8,000个访问者,每个页面大部分都在数据库中。 我相信这是我们问题的原因。 因为我们在MySQL服务器上有这么多的大型数据库,而且由于这些查询在软件上可能会更好,所以我认为MySQL会偶尔无法及时地向PHP返回结果,从而产生一个级联效应,最终导致一切都停止,直到我们重新加载PHP-FPM。 我们这样做之后,事情又开始好了。 我在解决问题时遇到问题的原因是因为我无法真正辨别日志中的任何内容。 在MySQL慢速查询日志中,当停机发生时,我没有什么兴趣。 在nginx日志中,我看到成千上万的条目说读取请求超时或连接超时(到PHP-FPM)。 而在PHP-FPM日志中,我看到很多行表示“执行超时(31秒),终止 所以在这一点上,我完全不知道在哪里寻找问题。 显然,无论发生什么事情都是因为这些脚本有时执行得不够快(通常它们在一秒钟之内加载,但是会导致加载时间急剧增加)。 这种情况一天发生好几次,对我们来说已经成了一个问题。 现在我只需要一个crontab来为php5-fpm每10分钟刷新一次,这样就可以解决崩溃的问题。 当然,当PHP重新加载时,nginx会抛出一个502网关错误,所以这不是一个很好的解决scheme。 如果有问题,PHP正在运行APCcaching。 我已经在几个地方看到,在某些情况下,APC会导致挂起。 任何指针都会有帮助。 我真的很想不必担心这台机器。 当然可以提供更多信息。 只要让我知道你需要什么。 更新:我刚刚通过apc.php复制到一个web根目录并访问它来查看我们的统计信息。 事情看起来不错。 然后我点击链接去用户统计和BOOM服务器立即挂起。 我重新加载了php-fpm,然后重新加载用户统计页面,并通过罚款。 等了一会儿,再次重新加载,服务器再次挂起。 所以这绝对是APC相关的。 问题是 – 我们如何解决? APCconfiguration: [apc] apc.enabled="1" apc.stat = "1" apc.max_file_size = "2M" apc.localcache = "1" apc.localcache.size = "256" apc.shm_segments = "1" apc.ttl = "3600" apc.user_ttl […]
经过6个小时的debugging – 我放弃了:| 我们在局域网上有一个nginx + php-fpm + mysql,几乎有100个wordpress(由不同的devise人员/开发人员创build和使用,所有工作都在testingwordpres设置上) 我们使用nginx没有任何问题。 今天,突然之间 – nginx开始退出蓝色的“504网关超时”。 我检查了虚拟主机的nginx错误日志… 2010/09/06 21:24:24 [error] 12909#0: *349 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info" 2010/09/06 21:25:11 [error] 12909#0: *349 recv() failed (104: Connection reset by peer) […]
我最近在本地机器上安装了Apache 2.4,并使用PHP-FPM与PHP 5.4.8一起安装。 一切都很顺利(过了一段时间…),但仍然有一个奇怪的错误: 我为这样的PHP-FPMconfiguration了Apache: <VirtualHost *:80> ServerName localhost DocumentRoot "/Users/apfelbox/WebServer" ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1 </VirtualHost> 它工作,例如,如果我打电话给http://localhost/info.php我得到正确的phpinfo() (它只是一个testing文件)。 如果我调用一个目录然而,我得到一个404身体File not found. 并在错误日志中: [Tue Nov 20 21:27:25.191625 2012] [proxy_fcgi:error] [pid 28997] [client ::1:57204] AH01071: Got error 'Primary script unknown\n' 更新 我现在尝试使用mod_rewrite进行代理: <VirtualHost *:80> ServerName localhost DocumentRoot "/Users/apfelbox/WebServer" RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/Users/apfelbox/WebServer/$1 [L,P] </VirtualHost> […]
目前在CentOS 6.5上运行PHP 5.4。 我安装了webtatic php55w软件包,然后通过PECL安装了PEAR + PECL以及redis和mongo。 不久之后,我意识到5.5与我正在使用的框架不兼容,所以我把yum抹去了php55w并安装了php54w。 现在pecl命令根本不起作用。 每当我发出任何pecl命令(简写为…最多重复几十次)时,它只会产生这么长的一串错误: Warning: Invalid argument supplied for foreach() in Command.php on line 259 Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259 …etc etc etc… Notice: Undefined index: honorsbaseinstall in Role.php on line 180 Notice: Undefined index: honorsbaseinstall in Role.php on line 180 …etc etc […]
我在这里有一个奇怪的问题。 我刚刚从apache + mod_php移到了nginx + php-fpm。 除了这个问题,一切都很顺利。 我有一个网站,比如说example.com。 当我访问它像example.com?test=get_param $_SERVER['REQUEST_URI']是/?test=get_param ,还有$_GET['test'] 。 但是当我访问example.com/ajax/search/?search=get_param $_SERVER['REQUEST_URI']是/ajax/search/?search=get_param还没有$_GET['search'] (没有$_GET数组)。 我正在使用Kohana框架。 哪些路由/ajax/search到控制器,但我已经把index.php phpinfo() ,所以我检查$_GETvariables之前框架做任何事情(这意味着消除得到PARAMS不是框架错误)。 我的nginx.conf是这样的 worker_processes 4; pid logs/nginx.pid; events { worker_connections 1024; } http { index index.html index.php; autoindex on; autoindex_exact_size off; include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; log_format main '$remote_addr – $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" […]
关于与Nginx一起使用的cgi.fix_pathinfo PHP选项(通常是PHP-FPM,快速CGI),已经有 很多关于安全问题的 讨论 。 因此,默认的nginxconfiguration文件用来说: # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 然而,现在,“官方”Nginx维基指出, PATH_INFO可以正确处理,而不禁用上述的PHP选项。 所以呢? 问题 你能清楚地解释一下cgi.fix_pathinfo做什么的? ( 官方文档只是说 :“有关PATH_INFO的更多信息,请参阅CGI规范”) PHP会如何处理这些PATH_INFO和SCRIPT_FILENAMEvariables? 为什么以及如何对Nginx危险? ( 详细的例子) 这些程序的最新版本中是否还存在这个问题? Apache是脆弱的吗? 我试图在每一步都了解这个问题。 例如,我不明白为什么使用php-fpm Unix套接字可以避免这个问题。
我第一次使用Nginx,但是我更熟悉Apache和Linux。 我正在使用一个现有的项目,当我试图看到index.php我得到一个404文件未find。 这里是access.log条目: 2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.ordercloud.lh" 这里是网站可用的文件: server { set $host_path "/home/willem/git/console/www"; access_log /www/logs/console-access.log main; server_name console.ordercloud; root $host_path/htdocs; set $yii_bootstrap "index.php"; charset utf-8; location / { index […]