我正在使用nginx的fastcgi接口运行Django站点。但是,某些页面正在被截断(即页面源只是停止,有时在标签的中间)。我该如何解决这个问题(让我知道需要哪些额外信息,我会发布它)
详细说明:
我正在使用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
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;
}
}
答案 0 :(得分:7)
我在nginx上运行Nagios时遇到了同样的问题。我在谷歌搜索一个答案时偶然发现了你的问题,并且阅读了“许可被拒绝”的相关答案,这让我感到震惊(也许它会帮助你):
Nginx error.log正在报告:
2011/03/07 11:36:02 [暴击] 30977#0:* 225952 open()“/ var / lib / nginx / fastcgi / 2/65 / 0000002652”失败(13:许可被拒绝)
所以我跑了#chown -R www-data:www-data / var / lib / nginx / fastcgi
修正了! (并感谢您的间接帮助)
答案 1 :(得分:5)
检查错误日志,查找写入.../nginx/tmp/...
文件的“权限被拒绝”错误。除非需要临时空间,否则Nginx将正常工作,并且通常发生在32K边界。如果发现这些错误,请确保用户nginx运行的tmp目录是可写的。
答案 2 :(得分:3)
您使用什么fastcgi界面以及如何使用。是痘吗?如果是,请粘贴您生成服务器的方式以及它如何连接到nginx。没有这些信息,只是猜测可能出现的问题。
可能出现的问题:
但服务器日志和配置会很棒。
答案 3 :(得分:2)
尝试提高“gzip_buffers”可能有所帮助。
答案 4 :(得分:2)
FastCGI不应该归咎于此。
我使用nginx / gunicorn遇到了完全相同的问题。将响应大小减少到小于32k(在特定情况下使用模板中的spaceless
标记)解决了它。
正如dwc所说,由于nginx使用地址空间的方式,它可能是一个硬限制。
答案 5 :(得分:0)
我在我的webhost(Webfaction)和本地Ubuntu开发服务器上运行非常类似的配置,我没有看到任何问题。我猜这是造成这种情况的超时或完整缓冲区。
你可以发布nginx错误日志的输出吗?你还在使用什么版本的nginx?
作为旁注,可能值得查看django-logging以了解您的fastcgi进程正在做什么。