2015-10-13 7 views
8

मैंने एक Django (1.7) वेब अनुप्रयोग एक Nginx, Gunicorn, Django स्टैक के साथ बनाया है और हाल ही में मैंने एक संख्या प्राप्त करना शुरू कर दिया है त्रुटियों की:डैंजो त्रुटि (बाहरी आईपी): अमान्य HTTP_HOST शीर्षलेख: '* .domain.com'

[Django] त्रुटि (बाहरी आईपी): अवैध HTTP_HOST शीर्षलेख: '* .domain.com'। प्रदान किया गया डोमेन नाम आरएफसी 1034/1035 के अनुसार मान्य नहीं है।

चारों ओर खोज के बाद, मैं कई प्रतिक्रिया है कि अनुमति मेजबान के रूप में वाइल्डकार्ड डालने का सुझाव देते हैं, अर्थात

ALLOWED_HOSTS = ['*'] 

हालांकि मैं अभी भी इस त्रुटि मिल रही है मिल गया है।

Request repr(): 
<WSGIRequest 
path:/, 
GET:<QueryDict: {}>, 
POST:<QueryDict: {}>, 
COOKIES:{}, 
META:{'HTTP_ACCEPT_ENCODING': 'none', 
'HTTP_CONNECTION': 'close', 
'HTTP_HOST': '*.domain.com', 
'HTTP_USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)', 
'HTTP_X_FORWARDED_FOR': '11.111.111.11', 
'HTTP_X_FORWARDED_HOST': 'subdomain.domain.com', 
'HTTP_X_REAL_IP': '11.111.111.11', 
'PATH_INFO': u'/', 
'QUERY_STRING': '', 
'RAW_URI': '/', 
'REMOTE_ADDR': '127.0.0.1', 
'REMOTE_PORT': '51349', 
'REQUEST_METHOD': 'GET', 
'SCRIPT_NAME': u'', 
'SERVER_NAME': '127.0.0.1', 
'SERVER_PORT': '9000', 
'SERVER_PROTOCOL': 'HTTP/1.0', 
'SERVER_SOFTWARE': 'gunicorn/19.1.1', 
'gunicorn.socket': <socket._socketobject object at 0x3877fa0>, 
'wsgi.errors': <gunicorn.http.wsgi.WSGIErrorsWraper object at 0x37e6050>, 
'wsgi.file_wrapper': <class 'gunicorn.http.wsgi.FileWrapper'>, 
'wsgi.input': <gunicorn.http.body.Body object at 0x396cc50>, 
'wsgi.multiprocess': False, 
'wsgi.multithread': False, 
'wsgi.run_once': False, 
'wsgi.url_scheme': 'http', 
'wsgi.version': (1, 0)}> 

यह कुछ मैं के बारे में चिंतित होना चाहिए है:

यहाँ पूर्ण त्रुटि संदेश है? क्या मुझसे कोई चूक हो रही है? मैंने वाइल्डकार्ड को अनुमति देने वाले मेजबानों में डालकर सोचा, मैं इस मुद्दे को खत्म कर दूंगा, लेकिन ऐसा लगता है कि ऐसा नहीं लगता है।

किसी भी मदद की बहुत सराहना की जाएगी।

+0

मैं अनुमति मेजबान वाइल्डकार्ड नहीं होगा, बजाय की तरह वास्तव में अनुमति दी होस्ट की सूची का उपयोग करें [www.domain.com, domain.com]। Server_name के माध्यम से इन अनुरोधों को स्वीकार करने के लिए अपने Nginx को भी कॉन्फ़िगर करें। – Jingo

+0

@ जिंगो आपकी मदद और त्वरित प्रतिक्रिया के लिए धन्यवाद। मेरे पास डोमेन पहले जोड़े गए थे लेकिन इस त्रुटि का सामना करना पड़ा, यही कारण है कि मैंने वाइल्डकार्ड को इसके स्थान पर जोड़ा। अजीब। जैसा कि आपने उल्लेख किया है, मैं इसे वापस रखूंगा और देख सकता हूं कि मुझे इन मुद्दों का सामना करना पड़ रहा है या नहीं। – tdsymonds

+0

अब मैंने वाइल्डकार्ड को होस्ट किए गए होस्ट को हटा दिया है और अभी भी यह त्रुटि प्राप्त कर रहा है ?! – tdsymonds

उत्तर

2

ग्राहक इससे आपके सर्वर पर एक अनुरोध कर रही है निम्न HTTP Host हैडर भेजा है:

Host: *.domain.com 

यह प्रति HTTP विनिर्देशन के रूप में अमान्य है - * शीर्षक में अनुमति नहीं है - इसलिए Django के साथ प्रतिक्रिया एक HTTP 400 प्रतिक्रिया और त्रुटि लॉग करता है।

यह है कि आप अपने ALLOWED_HOSTS की स्थापना, जहां * की अनुमति दी और Django बताता है (यह अभी भी *.domain.com तरह अवैध होस्ट नामों को अस्वीकार कर देंगे) किसी भी (वैध) होस्ट नाम के लिए अनुरोध स्वीकार करने के लिए है में डालने के लिए संबंधित नहीं है।

जैसा कि अन्य ने टिप्पणियों में बताया है, आपको वास्तव में विशिष्ट होस्ट (server_name) के लिए कनेक्शन स्वीकार करने के लिए केवल nginx को कॉन्फ़िगर करना चाहिए ताकि ऐसे अनुरोध Django तक न पहुंचें।

1

ISSUE: gunicorn (आपका Django ऐप सर्वर) एक अवैध होस्ट नाम प्राप्त कर रहा है।

जब एक अनुरोध सर्वर (nginx) और HTTP होस्ट (या उपयोगकर्ता एजेंट) के लिए किया जाता है खाली है, nginx gunicorn जुर्राब के लिए HTTP मेजबान तय करता है।


समाधान: जोड़ें/से अपने nginx conf (nginx.conf या sites-enabled/<your-site>.conf) में एक निर्देश अद्यतन:

proxy_set_header Host $http_host; 
को

(यदि आप इसे सेट नहीं है, बस जोड़ने) के बाद,

proxy_set_header Host $host; 

location अंदर रख सकते हैं, proxy_pass निर्देश ऊपर:

server { 
    listen 8000; 
    server_name 0.0.0.0; 

    location/{ 
      proxy_set_header Host $host; 
      include proxy_params; 
      proxy_pass http://unix:/<your-path>/yourproject.sock; 

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