Nginx用502 Bad Gateway覆盖了通用的Symfony错误。
Nginx用502 Bad Gateway覆盖了通用的Symfony错误。
当我尝试访问一个不存在的路由或在Twig模板中犯错误时,我不会得到带有调试信息的Symfony错误页面,而是被重定向到默认的nginx 502 Bad Gateway页面。
日志中显示了一行有趣的内容:
013/07/17 16:11:41 [error] 16952#0: *187 upstream sent too big header while reading response header from upstream, client: 127.0.0.1, server: ftwo.localhost, request: "GET /heasd HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "ftwo.localhost"
有任何想法吗?
Nginx overwrites general symfony errors with 502 Bad Gateway的问题是由于ChromePHP插件生成的大型header导致nginx返回502 Bad Gateway错误。解决方法是在app/config/config_dev.yml文件中注释掉以下代码:
chromephp:
type: chromephp
level: info
更多信息请参考以下链接:
Nginx overwrites general symfony errors with 502 Bad Gateway问题出现的原因是nginx的缓冲区大小不足,导致无法正确显示错误页面的布局。解决方法是增加nginx配置中的缓冲区大小,并重新启动nginx。具体的解决方法如下:
首先,在nginx配置中增加缓冲区大小,可以参考这里的建议,将以下代码添加到nginx配置文件中:
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
然后,在php配置的fastcgi部分(location ~ .php$)中增加缓冲区大小,可以参考这里的答案,将以下代码添加到php配置文件中:
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
如果错误页面仍然无法正确加载布局,可能是因为css/js的问题。可以使用Firebug或开发者工具的网络面板检查错误信息。
另外,重新加载nginx应该就可以生效(sudo service nginx reload)。如果错误页面仍然无法正确显示布局,可以尝试运行assets install命令。
总之,设置nginx的代理缓冲区和fastcgi设置非常重要,可以解决Nginx overwrites general symfony errors with 502 Bad Gateway问题。此外,如果使用Chrome浏览器,可能会出现错误页面无法正确显示的问题,而Firefox浏览器则可以正常显示。所以两种解决方法都是正确的,一种是通过增加服务器缓冲区来解决问题,另一种是通过禁用额外的调试功能来解决问题。