[英]Nginx + fastcgi truncation problem
I'm running a Django site using the fastcgi interface to nginx. 我使用fastcgi接口运行一个Django站点到nginx。 However, some pages are being served truncated (ie the page source just stops, sometimes in the middle of a tag). 但是,某些页面正在被截断(即页面源只是停止,有时在标记的中间)。 How do I fix this (let me know what extra information is needed, and I'll post it) 我该如何解决这个问题(让我知道需要哪些额外信息,我会发布)
Details: 细节:
I'm using flup, and spawning the fastcgi server with the following command: 我正在使用flup,并使用以下命令生成fastcgi服务器:
python ./manage.py runfcgi umask=000 maxchildren=5 maxspare=1 minspare=0 method=prefork socket=/path/to/runfiles/django.sock pidfile=/path/to/runfiles/django.pid
The nginx config is as follows: nginx配置如下:
# search and replace this: {project_location}
pid /path/to/runfiles/nginx.pid;
worker_processes 2;
error_log /path/to/runfiles/error_log;
events {
worker_connections 1024;
use epoll;
}
http {
# default nginx location
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
keepalive_timeout 75 20;
tcp_nodelay on;
client_max_body_size 10m;
client_body_buffer_size 256k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
client_body_temp_path /path/to/runfiles/client_body_temp;
proxy_temp_path /path/to/runfiles/proxy_temp;
fastcgi_temp_path /path/to/runfiles/fastcgi_temp;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain text/html application/x-javascript text/xml text/css;
ignore_invalid_headers on;
server {
listen 80;
server_name alpha2.sonyalabs.com;
index index.html;
root /path/to/django-root/static;
# static resources
location ~* ^/static/.*$
{
root /path/to/django-root;
expires 30d;
break;
}
location / {
# host and port to fastcgi server
fastcgi_pass unix:/path/to/runfiles/django.sock;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
}
location /403.html {
root /usr/local/nginx;
access_log off;
}
location /401.html {
root /usr/local/nginx;
access_log off;
}
location /404.html {
root /usr/local/nginx;
access_log off;
}
location = /_.gif {
empty_gif;
access_log off;
}
access_log /path/to/runfiles/localhost.access_log main;
error_log /path/to/runfiles/localhost.error_log;
}
}
I had the same exact problem running Nagios on nginx. 我在nginx上运行Nagios时遇到了同样的问题。 I stumbled upon your question while googling for an answer, and reading "permission denied" related answers it struck me (and perhaps it will help you) : 我在谷歌上搜索答案时偶然发现了你的问题,并且阅读了“许可被拒绝”的相关答案,这让我感到震惊(也许它会帮助你):
Nginx error.log was reporting : Nginx error.log正在报告:
2011/03/07 11:36:02 [crit] 30977#0: *225952 open() "/var/lib/nginx/fastcgi/2/65/0000002652" failed (13: Permission denied) 2011/03/07 11:36:02 [暴击] 30977#0:* 225952 open()“/ var / lib / nginx / fastcgi / 2/65/0000002652”失败(13:权限被拒绝)
so I just ran # chown -R www-data:www-data /var/lib/nginx/fastcgi 所以我只跑#chown -R www-data:www-data / var / lib / nginx / fastcgi
Fixed ! 固定! (and thank you for your indirect help) (谢谢你的间接帮助)
Check your error logs for "Permission denied" errors writing to .../nginx/tmp/...
files. 检查错误日志中写入“Permission denied”错误,写入.../nginx/tmp/...
文件。 Nginx will work fine unless it needs temporary space, and that typically happens at 32K boundaries. 除非需要临时空间,否则Nginx将正常工作,并且通常发生在32K边界。 If you find these errors, make sure the tmp directory is writable by the user nginx runs as. 如果发现这些错误,请确保用户nginx运行的tmp目录是可写的。
What fastcgi interface are you using and how. 你使用什么fastcgi接口以及如何使用。 Is it flup? 是痘吗? If yes, paste the way you spawn the server and how it's hooked into nginx. 如果是,请粘贴您生成服务器的方式以及它如何连接到nginx。 Without that information it's just guessing what could go wrong. 没有这些信息,它只是猜测可能出现的问题。
Possible problems: 可能的问题:
But server log and config would be great. 但服务器日志和配置会很棒。
FastCGI is not to blame for this. FastCGI不应该归咎于此。
I ran into exactly the same issue using nginx/gunicorn. 我使用nginx / gunicorn遇到了完全相同的问题。 Reducing the response size to less than 32k (in the specific case using the spaceless
tag in the template) solved it. 将响应大小减小到小于32k(在特定情况下使用模板中的spaceless
标签)解决了它。
As dwc says, it's probably a hard limit due to the way nginx uses address space. 正如dwc所说,由于nginx使用地址空间的方式,它可能是一个硬限制。
try to raise "gzip_buffers" may help. 尝试提高“gzip_buffers”可能有所帮助。
see here: http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl 见这里: http : //blog.leetsoft.com/2007/7/25/nginx-gzip-ssl
I'm running very similar configurations to this both on my webhost (Webfaction) and on a local Ubuntu dev server and I don't see any problems. 我在我的webhost(Webfaction)和本地Ubuntu开发服务器上运行非常类似的配置,我没有看到任何问题。 I'm guessing it's a time-out or full buffer that's causing this. 我猜这是一个超时或完全缓冲区导致这种情况。
Can you post the output of the nginx error log? 你可以发布nginx错误日志的输出吗? Also what version of nginx are you using? 你还在使用什么版本的nginx?
As a side note it may be worth looking at django-logging to find out what your fastcgi process is doing. 作为旁注,可能值得查看django-logging以了解您的fastcgi进程正在做什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.