>  기사  >  백엔드 개발  >  nginx+gunicorn+장고

nginx+gunicorn+장고

WBOY
WBOY원래의
2016-08-08 09:30:071586검색

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">官方地址:http://gunicorn.org/</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">                  http://docs.gunicorn.org/en/19.2/</span>

참조 주소: http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html

                                                                                       .com/1030776/1276364

1. 소개

WSGI 서버란 무엇입니까?
예를 들어 Flask, webpy, Django 및 CherryPy는 모두 WSGI 서버와 함께 제공됩니다. 물론 성능은 좋지 않습니다. 내장된 웹 서버는 테스트에 더 적합합니다. 온라인에 게시할 때는 고성능 wsgi 서버를 사용하거나 nginx와 결합하여 uwsgi를 수행합니다.

2. gunicorn 설치

~$ sudo pip install gunicorn

Gunicorn이 비동기 작업자를 지원하도록 하려면 Python 패키지 3개를 설치해야 합니다. 🎜>

~$ sudo pip install greenlet

~$ sudo pip install eventlet

~$ sudo pip install gevent

참고: Greenlet 설치에 실패하면 Python 헤더를 설치해야 합니다


~$ sudo apt-get install python-dev

gunicorn 버전을 확인할 수 있습니다

~$ gunicorn -- version

Gunicorn(버전 19.1.1)

2. gunicorn 명령 사용

gunicorn을 성공적으로 설치한 후 다음 세 가지 명령을 직접 사용하여 gunicorn을 시작하고 wsgi 응용 프로그램 또는 wsgi를 실행할 수 있습니다. 프레임워크.

1. gunicorn

Gunicorn 서버의 가장 기본적인 명령으로, 가장 기본적인 wsgi 애플리케이션을 직접 실행하는데 사용됩니다.

사용법: gunicorn [OPTIONS] APP_MODULE

OPTIONS 선택적 매개변수 gunicorn 실행을 위한 구성 옵션에 대해서는 나중에 설명합니다.

APP_MODULE은 wsgi 애플리케이션 파일을 $(MODULE_NAME):$(VARIABLE_NAME) 형식으로 지정합니다. 그 중 module_name은 실행할 wsgi 응용프로그램 파일을 지정하는데 사용되지만 완전한 장식 이름이다.

예를 들어 Python 패키지 gunicorn_app이 있고, 현재 디렉터리 MyApp 디렉터리 아래 gunicorn_app 패키지에는 WSGI 응용 프로그램 파일 test.py가 있습니다.

그러면 module_name을 gunicorn_app.test로 직접 작성할 수 있습니다.

Variable_name은 module_name 파일에서 호출할 객체(WSGI 호출 가능, 함수일 수 있음)의 이름을 나타냅니다.

위의 예에 따르면 현재 디렉터리는 /home/workspace/myapp이고 myapp에 gunicorn_app 패키지가 있습니다. test.py 코드는 다음과 같습니다.

.py에서 테스트 앱

def app(environ, start_response):
    """Simplest possible application object"""
    data = 'Hello, World!\n'
    status = '200 OK'
    response_headers = [
        ('Content-type','text/plain'),
        ('Content-Length', str(len(data)))
    ]
    start_response(status, response_headers)
    return iter([data])

을 실행하겠습니다. gunicorn gunicorn_app.test:app

2. gunicorn_django

guniorn_django 명령은 Django 앱을 배포하는 데 사용됩니다. 건니콘 서버.

실제로는 매우 간단합니다. gunicorn_django를 Django에 더 적합하도록 특수 처리했다는 점만 빼면 원리는 gunicorn과 같습니다.

기본 사용법: gunicorn_django [OPTIONS] [SETTINGS_PATH]

OPTIONS는 이전에 언급되었습니다.

SETTINGS_PATH django 앱의 settings.py 파일이 있는 디렉터리입니다. 작성하지 않으면 기본적으로 현재 디렉터리에서 검색됩니다.


하지만 이 사용법은 Django1.4 이전에도 적용됩니다. Django1.4 이상 버전에서는 gunicorn 명령을 사용하는 것이 좋습니다.

3. gunicorn_paster

이 명령에 관심이 있다면 공식 문서에서 학습할 수 있습니다.

3. Gunicorn 구성

Gunicorn은 세 곳에서 구성 정보를 읽습니다.

첫 번째: 프레임워크에서 정의한 구성 정보를 읽습니다. 현재는 Paster 프레임워크에만 유효합니다.

두 번째 장소: 명령줄에 정의됩니다. 명령줄에 정의된 구성 정보는 프레임워크에 정의된 동일한 매개변수 이름의 값을 덮어씁니다.

세 번째: 구성 파일을 생성하고 파일에 구성 정보를 씁니다(파이썬 소스 파일이므로 파이썬 코드 작성과 같습니다).

gunicorn -h를 통해 모든 명령 구성 정보를 봅니다.

공식 문서를 통해 더 자세한 정보를 볼 수도 있습니다: http://docs.gunicorn.org/en/19.2/

예를 들어 위의 myapp 예시를 기반으로

gunicorn --workers=4 --bind=127.0.0.1:8000 myapp.gunicorn_app.test:app

위 명령은 4개의 워커를 시작하고 127.0.0.1:8000

에 바인딩합니다. 또는 구성 파일을 사용할 수 있습니다. 다음은 config.py 구성 파일 소스 코드입니다.

gunicorn --config=config.py myapp.gunicorn_app.test:app

import multiprocessing

bind = "127.0.0.1:8001"
workers = multiprocessing.cpu_count() * 2 + 1
4. gunicorn 프레임워크 소개

     Gunicorn是基于pre-fork模型的。也就意味着有一个中心管理进程(master process)用来管理worker进程集合。Master从不知道任何关于客户端的信息。所有请求

和响应处理都是由worker进程来处理的。

     Master(管理者)

     主程序是一个简单的循环,监听各种信号以及相应的响应进程。master管理着正在运行的worker集合。

     Worker类型

     1. Sync Workers

         最基本的也是默认的worker type。

         一个同步的worker class,同一时间只能控制一个request请求。

     2. Async Workers

        异步workers的使用是基于Greenlets(通过Eventlet和Gevent)。所以使用此worker type之前一定要安装好python对应的包。

        Greenlets是python多线程协作的一个实现。

     3. Tornado Workers  

         这是一个Tornado worker class。

     

五、Gunicorn部署

       使用Gunicorn必须基于一个代理服务器。

       1. Nginx Configuration

           虽然有很多HTTP代理可以使用,但是我们还是强烈推荐Nginx。如果你选择了其他代理服务器,你需要确认,当你使用默认的Gunicorn workers时,它能够buffers slow clients。没有buffering Gunicorn将很容易受 denial of service attacks的影响。也可使用 slowloris 去核实你的代理服务器是否工作良好。

         如下是一个nginx配置文件实例(假设127.0.0.1:8888端口已经被gunicorn绑定监听):

server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6
        listen 80;
        client_max_body_size 4G;
        server_name www.android_stat.com

        keepalive_timeout 5;



        location / {
                try_files $uri @proxy_to_app;
        }

        location @proxy_to_app {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://127.0.0.1:8888;
        }
六、监控Gunicorn

       注意:要监控Gunicorn的时候,Gunicorn不能启动daemon模式,如果使用daemon模式会fork出一个进程,这样监控工具就没法监控这个进程。

       我在这只介绍supervisor

      1. Supervisor

          Supervisor可以用来监控进程,下面是一个简单的supervisor的配置文件:

[program:gunicorn]
command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py
directory=/path/to/project
user=nobody
autostart=true
autorestart=true
redirect_stderr=true

       

    

以上就介绍了nginx+gunicorn+django,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.