2013-06-19 2 views
2

У меня есть приложение Python, которое подается через WSGI-сервер CherryPy, получая запросы от Nginx. Он размещен в окне Windows Server 2003, и доступно только несколько пользователей.502 Плохой шлюз в приложении WSGI с использованием Nginx + Cherrypy

Иногда запросы к определенному ресурсу сбой заканчиваются почти мгновенно с помощью 502 Bad Gateway на Firefox. Я попытался воспроизвести проблему в других браузерах без успеха.

приложение запускается следующим образом:

paths = { "/resource": resource_func } 
dispatcher = wsgiserver.WSGIPathInfoDispatcher(paths) 
server = wsgiserver.CherryPyWSGIServer(("127.0.0.1", 9191), dispatcher) 
server.start() 

Сервер Nginx пересылает запросы на CherryPy с помощью proxy_pass:

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:

$.ajax(requestURI).done(myRequestCallback); 

Если я запустил Firebug, тогда откройте журнал ошибок nginx, когда произойдет 502, я вижу следующее сообщение об ошибке:

(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" 

... где xxx.xxx.xxx.xxx является IP, с которого я тестирую приложение и Nginx слушает 9080.

Неудачные запросы не отображаются в файле журнала нашего приложения, и тот же ресурс и параметры действительны (запрос не прерывается при каждой попытке).

Я даже добавил следующие строки в мой файл nginx.conf (перезапуск затем оба сервера), чтобы попытаться решить эту проблему, но это не похоже, чтобы сделать ау разницу:

proxy_buffers 8 16k; 
proxy_buffer_size 32k; 

версии:

  • Firefox 21
  • Python 2.7.5
  • Nginx 1.2.0
  • CherryPy 3.2.2

Что может быть причиной ошибки?

ответ

0

Когда я видел это (не с CherryPy, но с Gunicorn/others), это произошло потому, что сервер перезагружается и Nginx не может подключиться к нему. Что-то еще происходит на сервере, который может вызвать перезагрузку CherryPy?

+0

Я запускаю WSGI-сервер из сценария, и если CherryPy не перезагрузит ни один из его компонентов, он не будет остановлен к моменту появления ошибки. То, что я нашел интригующим, это то, что я мог только воспроизвести его в Firefox ... Я также посмотрел на [этот вопрос] (http://stackoverflow.com/questions/3704626/nginx-502-bad-gateway-error-only -in-firefox), но это не та же ошибка в журнале. – Fernando

Смежные вопросы