Nginx에서 요청을 수신하는 CherryPy의 WSGI 서버를 통해 Python 응용 프로그램을 제공합니다. Windows Server 2003 상자에서 호스팅되며 일부 사용자 만 액세스 할 수 있습니다.502 Nginx + Cherrypy를 사용하는 WSGI 응용 프로그램의 잘못된 게이트웨이
때때로 특정 리소스에 대한 요청이 502 Bad Gateway Firefox에서 거의 즉시 실패합니다. 나는 성공하지 못했지만 다른 브라우저에서 문제를 재현하려고했습니다.
애플리케이션은 다음과 같이 개시된다 :
paths = { "/resource": resource_func }
dispatcher = wsgiserver.WSGIPathInfoDispatcher(paths)
server = wsgiserver.CherryPyWSGIServer(("127.0.0.1", 9191), dispatcher)
server.start()
의 nginx 서버 proxy_pass
통해 CherryPy에 요청을 전달한다 :
$.ajax(requestURI).done(myRequestCallback);
:
location/{
proxy_pass http://127.0.0.1:9191/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
요청은 jQuery.ajax 방법을 통해 보내진다
파이어 버그를 실행 한 다음 502가 발생하면 nginx 오류 로그를 엽니 다. 다음과 같은 오류 : xxx.xxx.xxx.xxx
가 IP입니다
(time): *92 WSASend() failed (10054: An existing connection was forcibly closed by the remote host) while sending request to upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET /resource?params=VALUES&_=1371674388573 HTTP/1.1", upstream: "http://127.0.0.1:9191/resource?params=VALUES&_=1371674388573", host: "xxx.xxx.xxx.xxx:9080", referrer: "http://172.27.129.112:9080/myAppPage.html"
이 ...있는 나는 응용 프로그램을 테스트하고있어,와의 nginx는
9080
듣고있다.
실패한 요청은 Google 앱의 로그 파일에 표시되지 않으며 동일한 리소스와 매개 변수가 유효합니다 (모든 시도에서 요청이 실패하지 않음).
이 난 문제를 해결하려고 (다음 두 서버를 다시 시작) 내 nginx.conf 파일에 다음 줄을 추가했습니다,하지만 바깥 차이를 보이지 않았다proxy_buffers 8 16k;
proxy_buffer_size 32k;
버전은 다음과 같습니다
- 파이어 폭스 (21)
- 파이썬 2.7.5
- 의 nginx 1.2.0
- CherryPy 3.2.2
무엇이 오류의 원인 일 수 있습니까?
스크립트에서 WSGI 서버를 시작하고 CherryPy가 내부적으로 구성 요소를 다시 시작하지 않으면 오류가 표시 될 때까지 중지되지 않습니다. 내가 흥미를 끈 것은 Firefox에서만 재현 할 수 있다는 것입니다. 나는 [이 질문]을 보았습니다. (http://stackoverflow.com/questions/3704626/nginx-502-bad-gateway-error-only -in-firefox)하지만 로그에서 같은 오류가 아닙니다. – Fernando