Найти - Пользователи
Полная версия: nginx + django = code 400, message Bad HTTP/0.9 request syntax...
Начало » Django » nginx + django = code 400, message Bad HTTP/0.9 request syntax...
1
Fandal
Друзья, всем привет!

Столкнулся с очень не понятной проблемой, потратил целый день на то чтобы понять где и что не так, но не осилил… может тут кто подскажет.

Значит конфигурация такая
centos 6
supertvisor
virtualenv
uwsgi
pip install следующие пакеты: django, MySQL-python, gunicorn
=======
Версии софта:
django - (1, 6, 2, ‘final’, 0)
nginx version: nginx/1.4.7

django дефолтная, ничего не настроено, кроме добавленного gunicorn в INSTALLED_APPS и соединения с базой данных mysql. Из дополнительных опций добавленно в settings.py только эти:
DEFAULT_CHARSET='utf-8'
LOGGING = {'version': 1,}

nginx
### example.conf nginx configuration
 upstream django {
#server 127.0.0.1:8001; # for a web port socket (we'll use this first)
server 127.0.0.1:8001 fail_timeout=0;
#server unix:///tmp/11111111.sock fail_timeout=0; #через unx socket такая же проблема
}
server {
listen 80;
server_name server149;
override_charset on;# эту опцию и добавлял и убирал - ничего не меняет
source_charset utf-8;# эту опцию и добавлял и убирал - ничего не меняет
charset utf-8;
client_max_body_size 100M; # adjust according to your needs
location /media {
alias /home/webapps/vnv/asterisk/asterisk/media;
}
location /static {
alias /home/webapps/vnv/asterisk/asterisk/static;
}
location / {
uwsgi_pass django;
override_charset on;# эту опцию и добавлял и убирал - ничего не меняет
source_charset utf-8;# эту опцию и добавлял и убирал - ничего не меняет
charset utf-8;
}
error_log /var/log/nginx_debug debug;
}
Собственно суть проблемы: при подключении через nginx никак не хочет отдавать страничку, а выдает code 400, message Bad HTTP/0.9 request syntax или type
Пример ошибки в ситуации когда manage.py runserver 127.0.0.1:8001, то же самое через gunicorn.
Если напрямую обращаться к адресу 127.0.0.1:8001 - страничка открывается, а вот если через upstream в nginx - выдает следующую проблему.
Starting development server at http://127.0.0.1:8001/
Quit the server with CONTROL-C.
[13/Apr/2014 17:59:41] code 400, message Bad HTTP/0.9 request type ('\x00\xaf\x01\x00')
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 38664)
Traceback (most recent call last):
  File "/usr/lib64/python2.6/SocketServer.py", line 570, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/lib64/python2.6/SocketServer.py", line 332, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/home/webapps/vnv/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 126, in __init__
    super(WSGIRequestHandler, self).__init__(*args, **kwargs)
  File "/usr/lib64/python2.6/SocketServer.py", line 627, in __init__
    self.handle()
  File "/usr/lib64/python2.6/wsgiref/simple_server.py", line 131, in handle
    if not self.parse_request(): # An error code has been sent, just exit
  File "/usr/lib64/python2.6/BaseHTTPServer.py", line 284, in parse_request
    "Bad HTTP/0.9 request type (%r)" % command)
  File "/usr/lib64/python2.6/BaseHTTPServer.py", line 357, in send_error
    self.send_response(code, message)
  File "/usr/lib64/python2.6/BaseHTTPServer.py", line 374, in send_response
    self.log_request(code)
  File "/usr/lib64/python2.6/BaseHTTPServer.py", line 411, in log_request
    self.requestline, str(code), str(size))
  File "/home/webapps/vnv/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 138, in log_message
    msg = "[%s] %s\n" % (self.log_date_time_string(), format % args)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xaf in position 2: ordinal not in range(128)
----------------------------------------
[13/Apr/2014 17:59:41] code 400, message Bad HTTP/0.9 request type ('\x00I\x01\x00')
[13/Apr/2014 17:59:41] "I	HTTP_HOST192.168.125.149HTTP_CONNECTION" 400 -

Судя по всему проблема с кодировкой, но где я ее только не менял, ситуацию не исправляет. В конфиге nginx - установил, mysql база данных так же создана так:
CREATE DATABASE IF NOT EXISTS aster DEFAULT CHARACTER SET ‘utf8’ COLLATE ‘utf8_unicode_ci’;
локаль системы en_US.UTF-8, была ru_RU.UTF-8… тоже ничего не изменилось.

Подскажите куда копать дальше?

Заранее спасибо!
Alen
Fandal
uwsgi
pip install следующие пакеты: django, MySQL-python, gunicorn

Вы определитесь для начала uwsgi или gunicorn.

Fandal
кроме добавленного gunicorn в INSTALLED_APPS

Этого не нужно было делать.

Возьмите любое howto по настройке связки.
http://blog.djangofan.ru/2012/04/gunicorn-nginx-django-ubuntu.html
http://smidth.ru/blog/django/server-configuration-for-django.-gunicorn-nginx-ubuntu/
http://wps.su/blog/12/
Fandal
Спасибо, заработало, переделал по материалу изложенному тут:
http://blog.djangofan.ru/2012/04/gunicorn-nginx-django-ubuntu.html

upd:

теперь supervisor кушает cpu 100% ядро=)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB