我正在使用 Zend框架编写 REST API
多次调用网址时(例如,每秒1次请求1000次),大约 0.2%的情况,而不是 200 OK
作为回复我获取 302 Found
- 以便重定向到其他页面
这是整个服务器响应:
302 Found Date: Mon, 04 Mar 2013 11:56:04 GMT
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.11
Set-Cookie: PHPSESSID=ui9r8jqa63dbom8osknso6eea5; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: /de/default/index/index/error/500
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=utf-8
因此Zend重定向到错误500 (内部服务器错误)页面。问题是为什么 - 我只是想不出来......
调用的php页面将一行插入MySQL数据库并返回一个JSON字符串 - 这就是全部。
Apache2 打开了 20个并发连接,服务器负载是<< 1所以我真的不明白为什么这些请求会导致问题。
我知道这对于远程诊断来说是一个非常困难的问题,但是如果能够解决这个问题,那么很好的猜测和建议非常受欢迎!感谢。
这是@chris:
所要求的apache vhost配置<IfModule mod_ssl.c>
<VirtualHost mydomain.tld:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
ServerName www.mydomain.tld
ServerAlias mydomain.tld *.mydomain.tld
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/ssl_access.log combined
# RewriteLog "/var/log/htaccess.log"
# RewriteLogLevel 5
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLOptions +StrictRequire
SSLCertificateFile /etc/apache2/ssl/cert_2013_2014.crt
SSLCertificateKeyFile /etc/apache2/ssl/www.mydomain.tld.key
SSLCACertificateFile /etc/apache2/ssl/intermediate.crt
</VirtualHost>
</IfModule>
答案 0 :(得分:2)
这对我来说非常简单直接。这是一个302重定向,我想不出ZF中任何重定向的东西;特别是不要500错误页面。 500错误(内部服务器错误)必须始终返回500错误,并且永远不应该是302重定向。所以你在这里很幸运,因为你必须在RETS API中有一些错误处理导致某个地方的重定向(而不是常规的错误页面)。
在代码中搜索重定向。可以使用ZF重定向器帮助程序(在控制器内)或手动(任何地)使用header()和exit()来完成。当您发现重定向时,使用debug_backtrace显示(退出)或将其转储到日志文件中。并修复返回代码或处理错误的方式。
答案 1 :(得分:1)
请注意,当您指定一个指向远程URL的ErrorDocument(即任何方法,例如前面带有http的方法)时,Apache会向客户端发送重定向,告诉它在哪里找到该文档,甚至如果文档最终在同一台服务器上。
http://httpd.apache.org/docs/2.2/mod/core.html#errordocument
我假设你在Apache HTTP服务器配置中使用ErrorDocument
指令,然后按照500错误的配置进行操作。
PHP本身可以触发500个错误。要了解发生了什么,您需要查看服务器错误日志以及php错误日志(并自然启用PHP错误日志记录)。
或者我通常写道:
500内部服务器错误 始终 是查看服务器错误日志的邀请。它包含更多信息。由于这是PHP,它很可能是由于PHP中的致命错误,因此确保启用PHP错误日志记录并查看PHP错误日志也非常有用。 More about the 500 Internal Server Error
答案 2 :(得分:0)
如果没有关于您的应用程序的更多细节,很难猜测。我的猜测是你的服务之一(很可能是数据库)在增加的流量和I / O下变慢。因此,某些PHP连接可能会超时。这会导致应用程序错误并重定向到错误页面。
取决于您的应用程序在记录内部问题方面有多好看logs/application.log
,但默认情况下,记录内容不是很好。
答案 3 :(得分:0)
ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Permission denied (13) Array
这显然是一个非常常见的问题,如所描述和解决here
变量session.gc_probability
在1
中设置为php.ini
,这意味着垃圾收集器运行并清理php会话所在的目录/var/lib/php5
的概率为1%存储。显然,www-data
无法写入此文件夹,从而导致上述错误并抛出Zend异常。
由于session.gc_probability
仅设置错误,因此错误随机发生,使得调试非常困难。
无论如何,我很高兴它已经解决了 - 感谢所有提示和猜测:)