在上周末,我注意到我的一个中型AWS实例出现问题,如果请求超过60秒,Nginx总是返回HTTP 499响应.请求的页面是PHP脚本
我花了几天时间试图找到答案,并尝试了我可以在互联网上找到的所有内容,包括Stack Overflow上的几个条目,没有任何效果.
我已经尝试修改PHP设置,PHP-FPM设置和Nginx设置.你可以在星期五看到我在NginX论坛上提出的一个问题(http://forum.nginx.org/read.php?9,237692)虽然没有得到任何答复所以我希望我能找到一个在我被迫回到Apache之前回答这个问题,我知道它正常工作.
这是不是同样的问题在其他项中报告的HTTP 500错误.
我已经能够使用PHP 5.4.11使用NginX的新的微型AWS实例来复制问题.
为了帮助那些希望看到问题的人,我将带你完成设置,我为最新的Micro测试服务器运行.
您需要使用AMI ami-c1aaabb5启动新的AWS Micro实例(因此它是免费的)
此PasteBin条目具有完整的设置,可以运行以镜像我的测试环境.您最后需要在NginX配置中更改example.com
一旦设置完毕,您只需要创建我正在测试的示例PHP文件
<?php
sleep(70);
die( 'Hello World' );
?>
Run Code Online (Sandbox Code Playgroud)
将其保存到webroot中然后进行测试.如果您使用php或php-cgi从命令行运行脚本,它将起作用.如果您通过网页访问脚本并拖动访问日志/var/log/nginx/example.access.log,您会注意到在60秒后收到HTTP 1.1 499响应.
现在您可以看到超时,我将完成我对PHP和NginX所做的一些配置更改以尝试解决此问题.对于PHP,我将创建几个配置文件,以便可以轻松禁用它们
更新PHP FPM配置以包含外部配置文件
sudo echo '
include=/usr/local/php/php-fpm.d/*.conf
' >> /usr/local/php/etc/php-fpm.conf
Run Code Online (Sandbox Code Playgroud)
创建一个新的PHP-FPM配置以覆盖请求超时
sudo echo '[www]
request_terminate_timeout = 120s
request_slowlog_timeout = 60s
slowlog = /var/log/php-fpm-slow.log ' >
/usr/local/php/php-fpm.d/timeouts.conf
Run Code Online (Sandbox Code Playgroud)
更改一些全局设置以确保紧急重启间隔为2分钟
# Create a global tweaks
sudo echo '[global]
error_log = /var/log/php-fpm.log
emergency_restart_threshold = 10
emergency_restart_interval = 2m
process_control_timeout …Run Code Online (Sandbox Code Playgroud)