502坏网关和codeigniter / nginx / apache。代码或服务器问题?

时间:2013-01-30 07:58:21

标签: apache codeigniter nginx plesk

我的codeigniter应用程序正在针对502错误的网关错误运行。我知道这个主题还有其他线程,但我不是服务器向导,症状不同,我的服务器配置也略有不同,或者我认为。

这是我的情况。

  • 应用程序正常,直到我第n次发布表单(n为2到n次之间)。第n次与之前的帖子完全相同。我只需更改一个字段,然后按“提交”按钮。
  • 表单使用验证类,我自定义了错误消息设置器,这些消息也在会话中设置为flashdata(我希望消息在重定向后可用)。
  • 我的服务器使用Nginx和apache(Plesk,apache服务守护进程称为httpd)。如果我“服务httpd停止”或“服务nginx停止”我的所有网站都会立即停止工作。
  • 错误日志中没有错误。

我的问题是:这可能是编码问题,还是最明确(或最有可能)服务器配置错误?如果是后者,当然欢迎所有建议,但请记住它是一个plesk / apache / nginx环境。

希望你们能帮忙!

2 个答案:

答案 0 :(得分:7)

我弄清楚出了什么问题。首先,一位拥有更多服务器知识的同事向我解释说,我的设置可能是nginx接收到所有请求,然后直接提供静态文件。对于非静态请求,它将工作传递给apache,并充当中介。因此,当apache尝试向nginx发送数据时(或者当nginx尝试向apache发送信息时)可能出现了问题。

由于我之前从未使用过nginx,我也没想过检查nginx日志文件。并且我可以使用错误:

[错误] 27453#0:* 9223上游在从上游读取响应头时发送了太大的头,客户端:

我最后应用了另一个stack overflow solution的第一位:

Add this to your nginx.conf file normally located at
/etc/nginx/nginx.conf:

proxy_buffer_size   128k; 
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

顺便说一下,它应该添加到文件的http部分。这就是解决方案中缺少的东西。

答案 1 :(得分:2)

我建议在失败后立即检查Apache服务器状态(service httpd status)。没有太多细节可以更好地判断,但可能的情况之一是Apache在第N个请求上失败,因此Nginx无法将请求转发给Apache并向您返回“502 Bad Gateway”。

Apache失败可能是编程问题和错误配置问题。即在Nth请求上占用太多RAM(我的理解是你在请求之间保留一些日期)然后被虚拟化引擎杀死(如果你有VPS而不是专用硬件服务器)。到目前为止只是一个假设,但我之前遇到过类似的情况。