2014-11-19 3 views
3

그래서 Python/Flask 문서에서 Flask 웹 서버를 생산 웹 서버로 실행하지 않는 것이 좋습니다. 내 질문은, 그때 나는 Nginx 서버 위에 플라스크 응용 프로그램을 실행할 수 있습니까? 왜 인터넷상의 모든 가이드가 uWSGI, Tornado 또는 다른 WSGI 서버에서 Flask를 배치 할 것을 권장합니까? WSGI가되는 것이 무엇을 의미합니까? 플라스크 WGSI를 준수하지 않습니까?Nginx로 Flask를 실행하는 데 WSGI 래퍼가 필요한 이유는 무엇입니까?

나는 특히 분실하고 here, 최초의 응답 상태로 인해 :

아파치와 Nginx에 둘 HTTP servers.They (.JPG .html과 파일) 또는 동적 페이지와 같은 정적 파일을 제공 할 수 있습니다 (같은 Wordpress 블로그 또는 PHP 또는 Python과 같은 언어로 작성된 포럼).

그러나 this 후 상태 :

Nginx는 웹 서버입니다. 정적 파일을 제공하지만, Python 응용 프로그램을 실행하고 호스트 할 수 없습니다. UWSGI는 그 차이를 채 웁니다.

내 응용 프로그램이 서버 (예 : uWSGI)와 다른 서버 (예 : Nginx)로 처리되는 것은 비효율적 인 것처럼 보입니다.

답변

9

Nginx는 웹 서버이며 파이썬 프로그램을 실행하는 방법이 아닌 웹 서버와 관련이 있습니다. uWSGI는 응용 프로그램 서버이며 Python (및 다른 언어)으로 WSGI를 사용하는 방법을 알고 있습니다. Nginx와 uWSGI는 UNIX 소켓에 비해 효율적인 프로토콜 인 uWSGI 프로토콜을 사용합니다.

Nginx는 외부 세계의 http 요청/응답 (아마도로드 균형 조정, 캐싱 등)을 처리합니다. Flask 응용 프로그램은 WSGI 요청/응답을 처리합니다. uWSGI는 (다중 처리 및/또는 스레딩을 통해) 응용 프로그램을 시작하는 방법을 알고 HTTP와 WSGI 간의 갭을 줄입니다.

이 설정은 reverse proxy으로 알려져 있습니다. 이를 통해 각 도구는 프로세스의 다른 부분에 대해 신경 쓰지 않고 잘 수행 할 수 있습니다. 당신이 진정한 비늘을 얻을 때까지 그것에 대해 특별히 비효율적 인 것은 없습니다.

1

WSGI는 파이썬 응용 프로그램과 웹 서버 간의 인터페이스 사양입니다. uWSGI는 C/C++로 작성된이 스펙의 실현입니다. 이런 식으로 실행 한 후

def application(env, start_response): 
    start_response('200 OK', [('Content-Type','text/html')]) 
    return ["Hello World"] 

과 :

uwsgi --http :9090 --wsgi-file file_with_the_code_above.py 

당신은 당신이 원하는 무엇이든을 반환 할 수 있습니다 당신은 진입 점을 제공함으로써 (nginx를 같이) "심각한"웹 서버에 거의 모든 응용 프로그램을 실행할 수 있습니다 물론 "[Hello World]"대신에. 자세한 내용은 http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html을 참조하십시오.