Проблема усечения Nginx + fastcgi
Я использую сайт Django, использующий интерфейс fastcgi для nginx. Однако некоторые страницы обрезаются (т.е. источник страницы просто останавливается, иногда в середине тега). Как мне это исправить (дайте мне знать, какая дополнительная информация нужна, и я опубликую ее)
Подробности:
Я использую 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;
}
}
6 ответов
У меня была точно такая же проблема при запуске Nagios на nginx. Я наткнулся на ваш вопрос, когда гуглил ответ, и прочитав ответы "отказано в разрешении", он поразил меня (и, возможно, это поможет вам):
Nginx error.log сообщал:
2011/03/07 11:36:02 [crit] 30977 # 0: * 225952 open () "/ var / lib / nginx / fastcgi / 2/65/0000002652" не удалось (13: разрешение отклонено)
поэтому я просто запустил # chown -R www-data:www-data /var/lib/nginx/fastcgi
Исправлена ! (и спасибо за вашу косвенную помощь)
Проверьте журналы ошибок на наличие ошибок "Отказано в доступе" .../nginx/tmp/...
файлы. Nginx будет работать нормально, если ему не нужно временное пространство, а это обычно происходит на границах 32 КБ. Если вы обнаружите эти ошибки, убедитесь, что каталог tmp доступен для записи пользователю, который запускает nginx.
Какой интерфейс fastcgi вы используете и как. Это провал? Если да, вставьте способ, которым вы вызываете сервер и как он подключен к nginx. Без этой информации просто гадать, что может пойти не так.
Возможные проблемы:
- nginx глючит По крайней мере, у lighttpd есть ужасные ошибки fastcgi, я не удивлюсь, если у nginx тоже есть:)
- Django умирает с трассировкой во внутренней системе, которая не перехватывается должным образом, и закрывает сервер fastcgi, который вы не видите на клиенте. В этой ситуации оберните вызов приложения на сервере fastcgi и попытайтесь / исключить его, чтобы напечатать исключение.
Но журнал и конфигурация сервера были бы хороши.
Попытка поднять "gzip_buffers" может помочь.
смотрите здесь: http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl
FastCGI не виноват в этом.
Я столкнулся с точно такой же проблемой, используя nginx/gunicorn. Уменьшение размера ответа до менее 32 КБ (в конкретном случае с помощью spaceless
тег в шаблоне) решил это.
Как говорит dwc, это, вероятно, жесткое ограничение из-за того, как nginx использует адресное пространство.
Я использую конфигурации, очень похожие на эту, как на своем веб-хосте (Webfaction), так и на локальном сервере разработки Ubuntu, и я не вижу никаких проблем. Я предполагаю, что причиной является тайм-аут или полный буфер.
Можете ли вы опубликовать вывод журнала ошибок nginx? Также, какую версию nginx вы используете?
В качестве примечания, возможно, стоит посмотреть на django-logging, чтобы узнать, что делает ваш процесс fastcgi.