>  기사  >  운영 및 유지보수  >  Nginx 및 uWSGI를 사용하여 Python 웹 프로젝트를 구성하는 방법

Nginx 및 uWSGI를 사용하여 Python 웹 프로젝트를 구성하는 방법

WBOY
WBOY앞으로
2023-05-17 20:52:041630검색

Python의 웹 프로젝트를 기반으로 하는 일반적인 배포 방법은 다음과 같습니다.

  • FCGI: 각 프로젝트에 대한 모니터링 프로세스를 생성한 다음 HTTP 서비스와 상호 작용하기 위해 SPAWN-FCGI 또는 프레임워크에서 구축한 도구입니다.

  •   wsgi: http 서비스의 mod_wsgi 모듈을 사용하여 다양한 프로젝트를 실행합니다.

그러나 wsgi 프로토콜이나 fcgi 프로토콜을 사용하지 않는 uwsgi도 있습니다. 대신에 저자에 따르면 이 프로토콜은 fcgi 프로토콜보다 약 10배 빠릅니다. uwsgi의 주요 기능은 다음과 같습니다:

  •             초고속 성능.

  • 낮은 메모리 사용량(apache2 mod_wsgi의 약 절반으로 측정됨).

  • 다중 앱 관리.

  • 자세한 로깅 기능(앱 성능 및 병목 현상을 분석하는 데 사용할 수 있음)

  • 고도로 맞춤설정 가능합니다(메모리 크기 제한, 특정 서비스 횟수 이후 다시 시작 등).

환경 우분투 12.04 ip:10.1.6.79

nginx 설치

apt-get install nginx-full nginx-common

nginx 구성/etc/nginx/sites-enabled/example

server {
    listen     80;
    server_name   10.1.6.79;
    access_log   /var/log/nginx/example_access.log;
    error_log    /var/log/nginx/example_error.log;
    root      /var/www/example;
    location / {
      uwsgi_pass   127.0.0.1:9001;
      include     uwsgi_params;
      uwsgi_param   uwsgi_scheme $scheme;
      uwsgi_param   server_software  nginx/$nginx_version;
    }
}

uwsgi 설치

apt-get install uwsgi uwsgi-plugin-python

uwsgi를 모두 설치하고 싶다면 플러그인을 사용하면 uwsgi-plugin-all 소프트웨어 패키지를 설치할 수 있습니다

uwsgi 구성/etc/uwsgi/apps-enabled/default.xml

<uwsgi>
  <plugin>python</plugin>
  <socket>127.0.0.1:9001</socket>
  <pythonpath>/var/www/example/app/</pythonpath>
  <app mountpoint="/">
    <script>wsgi_configuration_module</script>
  </app>
  <master/>
  <processes>4</processes>
  <reload-mercy>8</reload-mercy>
  <cpu-affinity>1</cpu-affinity>
  <max-requests>2000</max-requests>
  <limit-as>512</limit-as>
  <reload-on-as>256</reload-on-as>
  <reload-on-rss>192</reload-on-rss>
  <no-orphans/>
  <vacuum/>
</uwsgi>

uwsgi 구성 파일의 매개변수는 uwsgi 명령을 통해 지정할 수도 있습니다 xml을 제외한 구성 파일 형식 외에도 ini 형식으로 작성할 수도 있습니다. 소프트웨어 패키지가 설치된 후 /usr/share/doc/에 xml 및 ini 형식 구성 파일의 몇 가지 예가 있습니다. uwsgi/examples/conffile 디렉토리.

wsgi_configuration_module.py 스크립트 내용

#!/usr/bin/python
import os
import sys
sys.path.append(&#39;/var/www/example/app&#39;)
os.environ[&#39;python_egg_cache&#39;] = &#39;/var/www/example/.python-egg&#39;
def application(environ, start_response):
  status = &#39;200 ok&#39;
  output = &#39;hello world!&#39;
  response_headers = [(&#39;content-type&#39;, &#39;text/plain&#39;),
          (&#39;content-length&#39;, str(len(output)))]
  start_response(status, response_headers)
  return [output]

uwsgi 시작을 위한 매개변수

uwsgi -x /etc/uwsgi/apps-enabled/default.xml --daemonize /var/log/uwsgi/app/default.log

uwsgi:

-m은 마스터 프로세스를 시작합니다.
-p 4는 4개의 프로세스를 시작합니다.
-s 사용된 포트 또는 소켓 주소
-d 사용 da emon의 실행 모드입니다. -d를 사용한 후에는 -d /var/log/uwsgi.log
와 같은 로그 파일 주소를 추가해야 합니다. -r 10000 10,000개의 프로세스를 시작한 후 자동으로 다시 생성됩니다
-t 30 시간 초과를 30초로 설정합니다. 시간 초과 후 링크는 자동으로 삭제됩니다
-limit-as 32 프로세스의 총 메모리를 32m으로 제어합니다
-x 프로필 모드 사용

4개 스레드를 동시에 사용


uwsgi -s :9090 -w myapp -p 4

주 제어 스레드 + 스레드 4개


uwsgi -s :9090 -w myapp -m -p 4

30초 이상 실행되는 클라이언트는 바로 폐기됩니다


uwsgi -s :9090 -w myapp -m -p 4 -t 30

메모리 공간은 128m로 제한됩니다


uwsgi -s :9090 -w myapp -m -p 4 -t 30 --limit-as 128

reqs가 10,000개 이상인 서비스는 자동으로 다시 생성됩니다


uwsgi -s :9090 -w myapp -m -p 4 -t 30 --limit-as 128 -r 10000

백그라운드 실행 등


uwsgi -s :9090 -w myapp -m -p 4 -t 30 --limit-as 128 -r 10000 -d uwsgi.log

uwsgi 명령으로 직접 시작하는 것 외에도 init.d 아래의 스크립트가 시작되지만 먼저 /etc/default/u wsgi에서 기본 구성 파일의 경로를 수정한 다음 사용할 수도 있습니다. /etc/init.d/uwsgi start

#inherited_config=/usr/share/uwsgi/conf/default.ini
inherited_config=/etc/uwsgi/apps-enabled/default.xml

Start nginx

/etc/init.d/nginx start

효과는 다음과 같습니다.

브라우저 입력 IP: 포트: 192.168.1.99:9090
"축하합니다!!! uwsgi 테스트 OK!!!"를 볼 수 있습니다.

위 내용은 Nginx 및 uWSGI를 사용하여 Python 웹 프로젝트를 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제