장고는 DEBUG = False 일 때 잘못된 요청 (400)을 제공합니다.


254

django-1.6을 처음 사용합니다. 로 django 서버를 실행하면 DEBUG = True완벽하게 실행됩니다. 내가 변경할 때 DEBUGFalse설정 파일에, 서버는 중지하고 프롬프트 명령에 다음과 같은 오류를 제공합니다 :

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

내가 변경 한 후 ALLOWED_HOSTS["http://127.0.0.1:8000",], 브라우저에서 나는 오류가 발생합니다 :

Bad Request (400)

디버그 모드없이 장고를 실행할 수 있습니까?


기억해야 할 한 가지 : 'http'또는 'https'를 추가하지 마십시오ALLOWED_HOSTS
shellbye

답변:


415

ALLOWED_HOSTS목록은 완전한 포함해야 호스트 이름 , 하지 URL을. 포트와 프로토콜을 제외하십시오. 를 사용 하는 경우 목록에도 127.0.0.1추가 localhost합니다.

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

모든 호스트 *를 일치시키는 데 사용할 수도 있습니다 .

ALLOWED_HOSTS = ['*']

문서 인용하기 :

이 목록의 값은 정규화 된 이름 (예 :) 일 수 있으며 'www.example.com',이 경우 요청 Host헤더 와 정확히 일치합니다 (대소 문자 구분, 포트 제외). : 마침표로 시작하는 값은 하위 도메인 와일드 카드로 사용할 수 '.example.com'일치 example.com, www.example.com, 그리고 다른 하위 도메인 example.com. 의 가치는 '*'무엇이든 일치합니다. 이 경우 Host헤더에 대한 자체 유효성 검사를 제공해야합니다 (미들웨어 일 수도 있습니다.이 경우이 미들웨어가에 먼저 나열되어야 함 MIDDLEWARE_CLASSES).

대담한 강조 광산 .

상태 400 응답은 호스트 헤더가 해당 목록의 값과 일치하지 않을 때 SuspiciousOperation예외 가 발생 하기 때문 입니다.


3
고맙지 만 작동하지만 False를 설정하면 하나의 문제가 발생합니다. 모든 정적 파일은 404로 표시됩니다. 왜 찾을 수 없는지 이해할 수 없었습니다.
MegaBytes

@ MegaBytes : 죄송합니다, 그게 뭔지 모르겠습니다.
Martijn Pieters

1
내 프로젝트가 생산되기 때문에 어떻게 해야하는지 제안 할 수 있습니까?
MegaBytes

다시, 나는 당신이 무엇을 설정하고 있는지 전혀 모른다 False. 아마도 당신은 새로운 질문을 게시 할 수 있습니까?
Martijn Pieters

9
@MegaBytes DEBUG가 False이면 모든 정적 파일이 STATIC_ROOT에서 제공되므로 대부분의 ./manage.py collectstatic경우 수행됩니다.
Blackeagle52

6

USE_X_FORWARDED_HOST에게 true로 설정하지 않으면이 오류가 발생했습니다 . 문서에서 :

이 헤더를 설정하는 프록시가 사용중인 경우에만 활성화해야합니다.

내 호스팅 서비스 설명서 에이 설정을 사용해야 한다고 명시 적으로 기록했으며 잊어 버린 경우 400 오류가 발생합니다.


ALLOWED_HOSTS = [ '*'] 인 경우 이것이 필요합니까?
Mike Stoddart

1
ALLOWED_HOSTS가 전체 호스트를 차단한다고 생각합니다. USE_X_FORWARDED_HOST는 HTTP 헤더 사용 여부 만 결정합니다.
Keith

3

나는 같은 문제가 있었고 ALLOWED_HOSTS = ['*']정적 이미지의 문제를 설정 하고 해결하여 환경 구성에서 가상 경로를 다음과 같이 변경해야합니다.

가상 경로                 디렉토리

/ static / / opt / python / current / app / yourpj / static /
/ media / / opt / python / current / app / Nuevo / media /

도움이 되길 바랍니다.

PD : 나쁜 영어로 죄송합니다.


2

나는 같은 문제가 있었고 어떤 대답도 내 문제를 해결하지 못했습니다. 이와 같은 상황을 해결하기 위해 다음 구성을 settings.py임시 에 추가하여 로깅을 활성화하는 것이 좋습니다

LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, }

그리고 시도하십시오 tail -f /tmp/debug.log. 문제를 볼 때 맹목적인 디버깅보다 훨씬 쉽게 처리 할 수 ​​있습니다.

내 문제는

잘못된 HTTP_HOST 헤더 : 'pt_web : 8000' 제공된 도메인 이름이 RFC 1034/1035에 따라 유효하지 않습니다.

그리고 추가하여 해결 proxy_set_header Host $host;Nginx의 설정 파일에 의해 포트 포워딩을 가능하게 USE_X_FORWARDED_PORT = Truesettings.py(내 경우에는 내가 포트에서의 Nginx에 요청 말을 들었 때문이다 8080과에 전달 guni포트8000


공유해 주셔서 감사합니다. prod의 경우 LOGGING = ...을 추가 한 후 "ValueError : Missing staticfiles manifest entry for ... css"오류가 표시됩니다. 그런 다음 @ Blackeagle52에 의해 위에서 언급 한 "python manager.py collectstatic"을 사용하면 500 오류 (내 로컬 개발자의 400 오류 일 수도 있음)가 해결됩니다.
zhihong

1

127.0.0.1에서 이미 xampp를, 127.0.1.1에서 django를 사용하고 호스트를 계속 추가하려고 했으므로

ALLOWED_HOSTS = ['127.0.0.1', 'localhost', 'www.yourdomain.com', '*', '127.0.1.1']

그리고 같은 오류 또는 (400) 잘못된 요청이 있습니다. 여기에 이미지 설명을 입력하십시오

그래서 URL을 127.0.1.1 : (사용 된 포트) / 프로젝트 및 voila로 변경하십시오!

Linux에서 bitnami django stack 2.2.3-1을 사용하므로 django가 사용중인 포트를 확인할 수 있습니다. 오류가있는 경우 (400 나쁜 요청) 다른 가상 네트워크에서 django를 추측합니다.. 행운을 빕니다 여기에 이미지 설명을 입력하십시오


0

함께 DEBUG = False하면 설정 파일에, 당신은 또한 ALLOWED_HOST 목록을 설정해야합니다. 포함 해보십시오ALLOWED_HOST = ['127.0.0.1', 'localhost', 'www.yourdomain.com']

그렇지 않으면 django로부터 잘못된 요청 (400) 오류가 수신 될 수 있습니다.


0

다음과 같이-안전하지 않은 상태로 서버를 실행하십시오.

python manage.py runserver-안전하지 않은


0

아파치 서버를 먼저 중지해야했습니다.

(fe sudo systemctl stop httpd.service/ sudo systemctl disable httpd.service).

' settings.py'파일을 편집하는 것 외에도 내 문제를 해결했습니다.

ALLOWED_HOSTS = ['se.rv.er.ip', 'www.example.com']


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.