2015-10-12 29 views
0

我有一個Flask應用程序,它使用單獨的socket.io服務器實時應用程序。我在不同的端口上運行它們,並使用nginx在同一端口上測試它們。錯誤:[Errno 32]當在本地主機上運行帶有nginx的燒瓶時出現故障

upstream httpapp { 
    ip_hash; 
    server 127.0.0.1:7777; 
} 
upstream socketioapp { 
    ip_hash; 
    server 127.0.0.1:5555; 
} 
server { 
    listen  5000; 
    server_name localhost; 
     location/{ 
       proxy_pass http://httpapp; 
       proxy_http_version 1.1; 
       proxy_set_header Host $host; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection "upgrade"; 
     } 
     location /socket.io { 
       proxy_pass http://socketioapp; 
       proxy_http_version 1.1; 
       proxy_set_header Host $host; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection "upgrade"; 
     } 
} 

此設置一直罰款一年的發展後半段,直到有一天,我不斷收到此錯誤沒有明顯的理由。這是我訪問localhost:5000時得到的錯誤。

127.0.0.1 - - [13/Oct/2015 07:58:08] "GET /static/js/main.js HTTP/1.1" 200 - 
---------------------------------------- 
Exception happened during processing of request from ('127.0.0.1', 53388) 
Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock 
    self.process_request(request, client_address) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 321, in process_request 
    self.finish_request(request, client_address) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 657, in __init__ 
    self.finish() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 716, in finish 
    self.wfile.close() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 283, in close 
    self.flush() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 307, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 32] Broken pipe 
---------------------------------------- 

錯誤僅發生在2.4MB靜態JavaScript文件,這是在開發環境未壓縮的大小。我知道靜態文件是巨大的,但它以前工作得很好。

最重要的觀察 - 訪問本地主機:7777是完全有效的。但是,它不適合測試應用程序,因爲它需要實時功能。這個想法是將燒瓶應用程序和實時應用程序放在同一個端口上,並使用默認的socket.io init。 我還沒有嘗試過的一件事是將socket.io設置更改爲localhost:5555。

我正在運行使用python manage.py runserver和flask_script樣式配置的燒瓶,因爲它將所有用途作爲開發環境進行服務。 (我沒有觸及EC2的生產環境,因爲它運行良好,我不想惹惱這個業務。)導致這種情況的唯一行動是我已經將端口號從5000改爲80,然後運行nginx使用sudo。這聽起來毫不相關,但它真的讓我感到吃驚。

互聯網研究的小時數只解釋了錯誤的定義,而不是解決方案。爲了解決這個問題,我採取了哪些行動來解決問題?

+0

我想這裏有一段時間了。更可能是Nginx - > Flask。如果您使用的是開發服務器,這也可能導致問題。什麼是Nginx日誌說?請記住,dev服務器不是多線程的,因此可能會導致這樣一個大文件的問題。 –

回答

相關問題