2016-09-14 1 views
10

django + nginx + gunicorn에서 실행중인 웹 응용 프로그램의 메소드에서 게시물 요청을 보내고 있습니다. 나는 django의 자체 서버 (runserver 사용)에서 실행될 때 동일한 코드에서 200 개의 응답을 수신하는 데 아무런 문제가 없습니다.django + gunicorn + nginx 설정에서 외부 URL로 POST 요청하기

post_url에서 서버 로그를 확인했지만 실제로이 데이터가 200 응답을 반환합니다. 그러나, 내가 gunicorn과 nginx 뒤에 응용 프로그램을 실행할 때, 나는 응답을받을 수 없다 (그러나 요청이 전송되고있다). 코드가 try 블록 다음에 첫 번째 줄에 멈추고 gunicorn 작업자가 시간 초과됩니다 (30 초 후).

은 POST_URL에서 아파치 서버 로그입니다 :

[14/Sep/2016:13:19:20 +0000] "POST POST_URL_PATH HTTP/1.0" 200 295 "-" "python-requests/2.9.1" 

UPDATE : 내가 언급하는 것을 잊었다

는이 요청을 실행하는 데 걸리는 시간이 1 초 미만, 그래서 시간 제한되지 않습니다 발행물. 구성에 문제가 있습니까? 나는 gunginorn이 nginx에서 proxy_pass로 설정된 표준 nginx + gunicorn 설정을 가지고 있습니다. 나는 nginx 프록시 뒤에 있기 때문에 응용 프로그램에서 게시물 요청을 보내는 동안 뭔가 다른 일을 해야하는 것 같아요?

+0

진단에 유용한 정보를 제공함에 따라 여기에 {} 유형의 오류가있을 수 있습니다 : - HTTP 요청을 처리 할 수 ​​있지만 결과를 얻을 수없는 것으로 보입니다. 우선, 방화벽을 점검하십시오 ('iptables -L' 명령 일 가능성이 높고'INPUT' 테이블에 포트 80에 대한 규칙이 있는지 확인하십시오). - 신뢰할 수없는 서버에 대한 https 요청을 요청 하시겠습니까? - 다른 서버에 연결하려 했습니까? – artragis

+1

몇 명의 gunicorn 직원이 있습니까? – VBart

+0

@artragis django 쉘을 사용하여 요청을 성공적으로 실행할 수 있습니다. 같은 컴퓨터에서 파이썬 스크립트로 동일한 코드를 실행할 수 있습니다. – SeeknInspYre

답변

4

내 gunicorn 설정에서 workers=2으로 설정하면이 문제가 해결됩니다.

외부 URL로 요청을 보내면 외부 응용 프로그램이 요청을 다시 보냅니다. 이 새로운 요청은 응용 프로그램에서 유일하고 유일한 작업자를 차지합니다. 보낸 원래 요청은 작업자가 없으므로 방해가됩니다. 근로자 2 명과 동시에 요청을 보내고 다른 요청을받을 수 있습니다.

-1

이것은 총알 타임 제한 문제입니다. gunicorn 실행 명령에 추가 플래그 --timeout 60을 지정하여 gunicorn의 시간 초과를 늘릴 수 있습니다. 물론 필요에 따라 제한 시간 길이를 사용자 정의 할 수 있습니다. 인수는 초입니다.

+0

이것은 시간 초과 문제가 아닙니다. gunicorn이 없으면 게시물 요청을 완료하는 데 1 초도 채 걸리지 않습니다. – SeeknInspYre

0

문제가 nginx request entity too large 일 수있는 Nginx에 문제가있을 수 있습니다. 너무 큰 데이터를 서버에 보내면 Nginx가 요청을 거부 할 수 있습니다. 너무 큰 이미지를 업로드하려고 할 때 Nginx에 문제가있어서 문제가 발생했습니다. 우리는 또한 장고 nginx + gunicorn을 사용합니다. 그래서 나는 의심하고있다. 이것은 같은 문제 일 수 있습니다.

+0

아니요, 일부 데이터와 함께 작은 파이썬 개체를 보내고 있습니다. 너무 큰 것은 없습니다. 어쨌든 이것을 디버깅 할 수 있습니까? – SeeknInspYre

+0

또한 요청이 전송되고 응답을받지 못했습니다. – SeeknInspYre

관련 문제