我在本地运行一个网站,所有流量都通过NGinx路由,然后NGinx将请求发送到Apache页面并提供静态文件。在Chrome,Safari,IE等中完美运行。
但是,每当我在Firefox中打开网站时,我都会收到以下错误:
502 Bad Gateway
nginx/0.7.65
如果我清除缓存和cookie,然后重新启动FireFox,我可以在错误返回之前加载一次或两次站点。我已经尝试过Firefox 3.6和3.5,两者都有同样的问题。
这是我的Nginx配置的样子:
worker_processes 2;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name local.mysite.amc;
root /Users/joshmaker/Sites/mysite;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://local.mysite.amc:8080;
}
include /opt/local/etc/nginx/rewrite.txt;
}
server {
include /opt/local/etc/nginx/mime.types;
listen 80;
server_name local.static.mysite.amc;
root /Users/joshmaker/Sites/mysite;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
}
以下是Firefox在error.log文件中生成的错误:
[error] 11013#0: *26 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream
[error] 11013#0: *30 upstream sent too big header while reading response header from upstream
[error] 11013#0: *30 no live upstreams while connecting to upstream
我完全不知道为什么浏览器会导致服务器错误。有人可以帮忙吗?
答案 0 :(得分:11)
我似乎找到了解决问题的方法。在进行了一些额外的Google研究之后,我将以下几行添加到我的Nginx配置中:
proxy_buffers 8 16k;
proxy_buffer_size 32k;
但是,我仍然不知道为什么这是有效的,为什么只有Firefox似乎有问题。如果有人能够阐明这一点,或提供更好的解决方案,我们将不胜感激!
答案 1 :(得分:5)
如果你有firePHP禁用它。使用php进行nginx通信时,大标题会导致问题。
答案 2 :(得分:3)
增加代理缓冲区的大小可以解决此问题。 Firefox允许附加到每个请求的大型cookie(每个最多4k)。 Nginx默认配置有小缓冲区(仅4k)。如果您的流量使用大cookie,您将在nginx错误日志中看到错误“上游在读取响应头时发送了太大的头”,并且Nginx将向客户端返回http 502错误。发生了什么事,Nginx在解析和处理请求时耗尽了缓冲区空间。
要解决此问题,请更改您的nginx.conf文件
proxy_buffers 8 16k; proxy_buffer_size 32k;
- 或 -
fastcgi_buffers 8 16k; fastcgi_buffer_size 32k;
答案 3 :(得分:0)
打开/etc/nginx/nginx.conf和 将以下行添加到http部分:
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
此修复程序在CI Web应用程序中适用于我。在http://www.adminsehow.com/2012/01/fix-nginx-502-bad-gateway-error/
了解更多信息