2014-06-12 12 views
6

डीजेंगो विकास-सर्वर का उपयोग करते हुए, मैंने अपने ब्लॉग को तैनात करने की कोशिश करते समय 400-त्रुटि प्राप्त करने के बाद, मैंने एक नया टेस्ट-प्रोजेक्ट शुरू किया (स्टार्टप्रोजेक्ट का उपयोग करके और कुछ भी नहीं कर रहा - बस एक यहां और वहां छोटी कॉन्फ़िगरेशन) - जितना संभव हो उतना सरल रखने के लिए जितना संभव हो सके।डीजेंगो यूडब्ल्यूएसजीआई एनजीआईएनएक्स खराब अनुरोध 400

जब मैं "manage.py रनरवर" करता हूं, तो यह मुझे एक पृष्ठ दिखाता है, यह कहकर कि मैं इसे देखता हूं, क्योंकि मेरे पास मेरी सेटिंग्स में "DEBUG = True" है।

अभी तक इतना अच्छा है। त्रुटियाँ नहीं।

लेकिन अगर मैं यूडब्ल्यूएसजीआई और एनजीआईएनएक्स का उपयोग करता हूं, तो मुझे "खराब अनुरोध (400)" पृष्ठ मिलता है।

प्रारंभ में मेरे पास कुछ आयात-त्रुटियां थीं और मुझे sys.path में कुछ पथ जोड़ना पड़ा। लेकिन अब मुझे पायथन, एनजीआईएनएक्स या यूडब्ल्यूएसजीआई से कोई त्रुटि नहीं मिली है और अभी भी 400-त्रुटि-पृष्ठ के साथ समाप्त हो गया है।

मैं निम्नलिखित की कोशिश की है:

  • डीबग = झूठी
  • TEMPLATE_DEBUG = झूठी
  • ALLOWED_HOSTS = [ '*']
  • ALLOWED_HOSTS = '*'
  • बाहर टिप्पणी की 'django.middleware.clickjacking.XFrameOptionsMiddleware' MIDDLEWARE_CLASSES
  • mod_wsgi के साथ अपाचे के बजाय uWSGI के साथ एनजीआईएनएक्स का उपयोग करना (मैं बुद्धि ज इस स्थापना, क्योंकि मुझे यह पसंद है, लेकिन यह मेरी समस्या) का समाधान नहीं

मेरे सेटअप: uWSGI, nginx और ग्राहक (फ़ायरफ़ॉक्स) से मेरी नोटबुक के भीतर (Kubuntu 14.04 रन)। वोस्ट/सबडोमेन (cefk_blawg.localhost), जो मेजबान फ़ाइल (cefk_blawg.localhost 127.0.0.1) में है और एनजीआईएनएक्स में सही ढंग से कॉन्फ़िगर किया गया है (मुझे पता है, क्योंकि जब मैं एक पिरामिड-टेस्ट-प्रोजेक्ट का उपयोग करता हूं, तो यह वास्तव में काम करता है आकर्षण)। रास्ते में कोई फ़ायरवॉल नहीं है। इसमें वर्चुअलenv और पाइप-स्थापित सब कुछ (django/uwsgi/तकिया/mysql-python)।

मेरे uwsgi.ini:

[uwsgi] 

# Unix socket (full path) 
socket = /tmp/cefk_blawg.sock 

# Set socket permissions 
chmod-socket = 666 

# Master process 
master = true 

# Maximum number of worker processes 
processes = 4 

# Set timeout 
harakiri = 60 
harakiri-verbose = true 

# Limit post-size 
limit-post = 65536 

# When to start buffering for post-vars 
post-buffering = 1  ## none of these makes my problem go away 
#post-buffering = 8192 ## none of these makes my problem go away 
#post-buffering = 32768 ## none of these makes my problem go away 

# Daemonize 
daemonize = /home/cefk/Dokumente/cefk_blawg/uwsgi.log 
pidfile = /home/cefk/Dokumente/cefk_blawg/uwsgi.pid 

# Limit queue 
listen = 64 
max-requests = 1000 

# Whatever this does .. it works for pyramid (got it from a tutorial) 
reload-on-as = 128 
reload-on-rss = 96 

no-orphans = true 
log-slow = true 

# This is the full path to my virtualenv 
virtualenv = /home/cefk/Dokumente/cefk_blawg/venv 

# Django wsgi file 
wsgi-file = /home/cefk/Dokumente/cefk_blawg/cefk_info/cefk_info/wsgi.py 

# Settings file (this seems to do nothing) 
# And it gets set in the wsgi.py-file 
env = DJANGO_SETTINGS_MODULE=cefk_info.settings 

# Set domain (this seems to do nothing) 
#domain = cefk_blawg.localhost 

# Django-project base directory (this seems to do nothing) 
#chdir = /home/cefk/Dokumente/cefk_blawg/cefk_info 

# This seems to do nothing 
#pythonpath=/home/cefk/Dokumente/cefk_blawg/cefk_info/cefk_info/ 

# Set vhost (this seems to do nothing) 
#vhost = true 

# Clean up environment on exit 
vacuum = true 
#

मेरे wsgi.py-फ़ाइल:

import os 
import pprint 
import site 
import sys 
from django.core.wsgi import get_wsgi_application 

base_parent = '/home/cefk/Dokumente/cefk_blawg/' 
base = '/home/cefk/Dokumente/cefk_blawg/cefk_info/' 

sys.path.append(base_parent) 
sys.path.append(base) 

site.addsitedir(
    '/home/cefk/Dokumente/cefk_blawg/venv/local/lib/python2.7/site-packages' 
) 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cefk_info.settings") 

activate_env = '/home/cefk/Dokumente/cefk_blawg/venv/bin/activate_this.py' 
execfile(activate_env, dict(__file__=activate_env)) 

# I stole this shamelessly from another stackoverflow-post - this is good to have 
class LoggingMiddleware: 
    def __init__(self, application): 
     self.__application = application 

    def __call__(self, environ, start_response): 
     errors = environ['wsgi.errors'] 
     pprint.pprint(('REQUEST', environ), stream=errors) 

     def _start_response(status, headers, *args): 
      pprint.pprint(('RESPONSE', status, headers), stream=errors) 
      return start_response(status, headers, *args) 

     return self.__application(environ, _start_response) 

application = LoggingMiddleware(get_wsgi_application()) 

यह मेरा अनुरोध/प्रतिक्रिया है, जो मैं wsgi.py में LoggingMiddleware से मिलता है :

(
    'REQUEST', 
    { 
     'CONTENT_LENGTH': '', 
     'CONTENT_TYPE': '', 
     'DOCUMENT_ROOT': '/home/cefk/Dokumente/cefk_blawg/cefk_info/cefk_info', 
     'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
     'HTTP_ACCEPT_ENCODING': 'gzip, deflate', 
     'HTTP_ACCEPT_LANGUAGE': 'de,en-US;q=0.7,en;q=0.3', 
     'HTTP_CACHE_CONTROL': 'max-age=0', 
     'HTTP_CONNECTION': 'keep-alive', 
     'HTTP_DNT': '1', 
     'HTTP_HOST': 'cefk_blawg.localhost', 
     'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0', 
     'PATH_INFO': '/', 
     'QUERY_STRING': '', 
     'REMOTE_ADDR': '127.0.0.1', 
     'REMOTE_PORT': '42518', 
     'REQUEST_METHOD': 'GET', 
     'REQUEST_URI': '/', 
     'SERVER_NAME': 'cefk_blawg.localhost', 
     'SERVER_PORT': '80', 
     'SERVER_PROTOCOL': 'HTTP/1.1', 
     'UWSGI_SCHEME': 'http', 
     'uwsgi.node': 'lt', 
     'uwsgi.version': '2.0.5.1', 
     'wsgi.errors': <open file 'wsgi_errors', mode 'w' at 0x7ff4337110c0>, 
     'wsgi.file_wrapper': <built-in function uwsgi_sendfile>, 
     'wsgi.input': <uwsgi._Input object at 0x7ff437271e70>, 
     'wsgi.multiprocess': True, 
     'wsgi.multithread': False, 
     'wsgi.run_once': False, 
     'wsgi.url_scheme': 'http', 
     'wsgi.version': (1, 0) 
    } 
) 
('RESPONSE', '400 BAD REQUEST', [('Content-Type', 'text/html')]) 
[pid: 2652|app: 0|req: 1/1] 127.0.0.1() {42 vars in 675 bytes} [Thu Jun 12 17:16:59 2014] GET/=> generated 26 bytes in 150 msecs (HTTP/1.1 400) 1 headers in 53 bytes (1 switches on core 0) 

संपादित करें: यह मेरा था nginx-config (नोटिस, उस फ़ोल्डर नाम इस बीच में परिवर्तित हो सकता है - तो उपेक्षा है कि, कृपया):

# Server configuration 
server { 
    # Make site accessible from http://cefk_blawg.localhost/ 
    server_name cefk_blawg.localhost; 

    root /home/cefk/Dokumente/cefk_blawg_django; 

    # Set charset 
    charset utf-8; 
    client_max_body_size 100M; 

    location /static { 
     autoindex on; 
     alias /home/cefk/Dokumente/cefk_blawg_django/static; 
    } 

    location /media { 
     autoindex on; 
     alias /home/cefk/Dokumente/cefk_blawg_django/media; 
    } 

    ################################ 
    # Port-based (old)    # 
    ################################ 
    #location/{ 
    # try_files $uri @application; 
    #} 

    #location @application { 
    # include /etc/nginx/uwsgi_params; 
    # uwsgi_pass 127.0.0.1:8000; 
    #} 
    ################################ 
    # /Port-based (old)   # 
    ################################ 

    location/{ 
     include /etc/nginx/uwsgi_params; 
     uwsgi_pass unix:///tmp/cefk_blawg.sock; 
    } 
} 

/संपादित करें

मैं विचारों से बाहर हूँ।

कृपया मदद करें।

+1

त्रुटि आम तौर पर एक गलत ALLOWED_HOSTS को संदर्भित करती है। क्या आप सुनिश्चित हैं कि आपने प्रत्येक प्रयास को बदलने के बाद uWSGI को पुनरारंभ किया है? और यूडब्ल्यूएसजीआई के लिए ब्लॉग पोस्ट से प्रतिलिपि बनाने और पेस्ट से बचने के लिए, कम से कम विकल्पों का उपयोग करें (जैसा कि आधिकारिक दस्तावेज़ों में बताया गया है) और आखिरकार अपने पर्यावरण को विशेष रूप से क्या जोड़ना चाहिए (उदाहरण के लिए आरएसएस के 96 एमईजी आपके डीजेंगो उदाहरणों को लगातार पुनः लोड कर सकते हैं) – roberto

+0

हां, मैं हर बार फिर से लोड किया। यहां तक ​​कि nginx पुनरारंभ किया। पहली चीज मैंने कोशिश की, सभी मूल्यों के लिए ALLOWED_HOSTS को बदलना था, यहां तक ​​कि समझने का एक दूरस्थ मौका भी था (स्थानीयहोस्ट/.localhost/my.domain/.my.domain/* स्ट्रिंग के रूप में सूची/* के रूप में)। मैं ALLOWED_HOSTS = '*' के साथ अटक गया। इसके अलावा, मैंने uwsgi.ini का उपयोग नहीं किया और कमांडलाइन से कॉल करते समय केवल कुछ पैरामीटर दिए। उसके बाद, मैंने django-docs से एक का उपयोग किया .. और फिर सबकुछ कॉपी किया, मुझे लगता है, यह व्यवहार्य या आवश्यक लग रहा था। –

+0

क्या कोई है, जो हाल ही में काम करने के लिए django + uwsgi + nginx मिला है? क्या यह एक बग हो सकता है? –

उत्तर

1

ठीक है तो मुझे यह वही त्रुटि मिली लेकिन मुझे अंत में यह पता चला। (कम से कम मेरे लिए)। मैं भगवान से प्रार्थना करता हूं कि यह आपके लिए काम करता है क्योंकि मैंने इस पर एक दिन बर्बाद कर दिया था।

यदि आप मेरे जैसे हैं तो आपने मूल सेटअप प्राप्त करने के लिए ट्यूटोरियल के रूप में http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html का उपयोग किया था। मुझे http पर काम करने के लिए uwsgi मिला और यह टीसीपी सॉकेट पर काम करना प्रतीत होता था। जैसे ही मैंने nginx को हुक करने की कोशिश की, मुझे 400 त्रुटियां मिल रही थीं। यह विशेष रूप से कहता है कि फ़ाइल नाम my_site.conf और साइट-सक्षम करने के लिए लिंक बनाएं। ठीक है अगर आप साइट-सक्षम की जांच करते हैं तो आपको डिफ़ॉल्ट नाम वाली फ़ाइल देखना चाहिए। ध्यान दें कि इस फ़ाइल को default.conf नाम नहीं दिया गया है। My_site.conf को my_site पर नाम बदलने का प्रयास करें और फिर से लिंक करना सुनिश्चित करें।

टीडीएलआर: my_site.conf अनलिंक करें। My_site.conf का नाम my_site पर बदलें। साइट्स-सक्षम

+0

मुझे खेद है, मैं इसका उल्लेख करना भूल गया, लेकिन मैंने पहले ही ऐसा कर लिया है। इस बीच मैंने पूरी परियोजना को फिर से लिखा है (पिरामिड + uwsgi का उपयोग कर)। आकर्षक बात यह है कि, मामूली परिवर्तनों के साथ वही uwsgi-config (पथ, निर्देशिका-नाम और उस तरह की चीजें) पिरामिड के साथ काम करती है, निर्दोष रूप से। –

+0

मैंने उन ट्यूटोरियल्स का इस्तेमाल किया, पहले .. और फिर कुछ भी, मैं इस मामले पर पा सकता हूं: https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/uwsgi/ http: // uwsgi-docs। readthedocs.org/en/latest/tutorials/Django_and_nginx.html तो मैंने एक साथ सामान मिलाकर समाप्त कर दिया, मैंने सोचा कि, यह सिर्फ इसे काम कर सकता है - लेकिन कुछ भी काम नहीं किया। इसके साथ निराशा के हफ्तों के बाद, मैंने अभी छोड़ दिया। –

+0

मैंने हाल ही में Django 1.8 की कोशिश की और यह सिर्फ मेरे लिए काम करता है। मुझे लगता है कि, एक बार जब मैं अपना प्रोजेक्ट पूरा करता हूं, तो मैं एक ट्यूटोरियल लिखूंगा और यहां एक लिंक पोस्ट करूंगा। –

7

आप अपने सर्वर पर DEBUG = True सेट कर सकते हैं, uwsgi सेवा को पुनरारंभ करें और अपने ब्राउज़र में django के डीबग आउटपुट को चेक करें। तथ्य यह है कि आपको django के विकास सर्वर के साथ कोई त्रुटि नहीं दिखाई देती है इसका मतलब यह नहीं है कि त्रुटि nginx या uwsgi सेवाओं से संबंधित है।

+0

आपके उत्तर के लिए धन्यवाद।मैंने वास्तव में 2 साल पहले उस प्रश्न को पूछा था .. ताकि django अब अस्तित्व में न हो। हालांकि, मैं इसे मौजूदा संस्करणों के साथ काम करने के लिए मिलता हूं। मुझे अभी भी पता नहीं है, पुराने के साथ क्या गलत था। लेकिन चूंकि यह आजकल काम करता है, इसलिए मुझे परवाह नहीं है कि 2 साल पहले क्या गलत हुआ था। –

संबंधित मुद्दे