Nginx + FastCGI截断问题
时间:2020-03-06 14:59:47 来源:igfitidea点击:
我正在使用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; } }
解决方案
我们正在使用什么fastcgi界面以及如何使用。是短笛吗?如果是,请粘贴生成服务器的方式以及如何将其钩接到nginx中。没有这些信息,只能猜测可能出什么问题。
可能的问题:
- nginx是越野车。至少lighttpd有可怕的fastcgi错误,我也不会怀疑nginx是否也有一些错误:)
- Django死于内部系统无法正确捕获的追溯,并关闭了我们无法从客户端看到的fastcgi服务器。在这种情况下,请包装fastcgi服务器应用程序调用,并尝试/除外它以打印异常。
但是服务器日志和配置会很棒。
尝试提高" gzip_buffers"可能会有所帮助。
看这里:
http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl
我在Webhost(Webfaction)和本地Ubuntu开发服务器上都运行与此非常相似的配置,但没有发现任何问题。我猜测是造成此问题的原因是超时或者缓冲区已满。
我们可以发布nginx错误日志的输出吗?另外,我们使用的是什么版本的Nginx?
附带说明一下,值得一看django-logging,以了解fastcgi进程在做什么。
检查错误日志中是否存在写入" ... / nginx / tmp / ..."文件的"权限被拒绝"错误。除非需要临时空间,否则Nginx可以正常工作,并且通常发生在32K边界。如果发现这些错误,请确保用户nginx的运行目录可写tmp目录。