AliyunOS 에 Flask + uWSGI + Nginx 배치
uWSGI 가 뭐 예요?
Flask 개발 에서 웹 서버 를 자체 적 으로 가 져 왔 습 니 다. Werkzeug 를 통 해 우 리 는 WSGI 서 비 스 를 구축 하고 우리 의 사 이 트 를 운영 할 수 있 습 니 다. 그러나 Flask 는 웹 프레임 워 크 입 니 다. 웹 서버 가 아니 라 웹 서버 입 니 다. 비록 Werkzeug 가 강하 지만 개발 에 만 사용 할 수 있 고 생산 에 사용 할 수 없습니다. 웹 서버 에 대해 우 리 는 더욱 전문 적 인 선택 이 있 습 니 다. 그것 이 바로 uWSGI 입 니 다.uWSGI 는 응용 서버 (다양한 프로 그래 밍 언어 지원), 프 록 시, 프로 세 스 관리자, 모니터 를 실현 하 는 전역 식 위탁 관리 서비스 입 니 다.uWSGI 라 는 이름 을 지은 것 은 Python 언어의 WSGI 가 최초 로 실현 되 었 기 때문이다.uwSGI 는 C 언어 로 작 성 된 것 으로 성능 이 비교적 높다.uwSGI 는 네 부분 을 포함한다.
Nginx 가 뭐 예요?
Nginx 는 효율 적 인 웹 서버 와 리 버스 프 록 시 서버 로, 부하 균형 (n 명의 사용자 가 서버 에 접근 할 경우 분류 가 가능 하고 서버 의 압력 을 분담 할 수 있 음) 으로 사용 할 수 있 으 며, 보안 필터 링, 디 도스 공격 방지 등 이 가능 하 다.Apache 에 비해 Nginx 는 높 은 병발 을 지원 하고 백만 개의 TCP 연결 을 지원 할 수 있 으 며 10 만 개의 병발 연결 을 지원 할 수 있 으 며 배치 가 간단 하고 메모리 소모 가 적 으 며 원가 가 낮 지만 Nginx 의 모듈 은 Apache 가 풍부 하지 않다.Nginx 는 uWSGI 의 uwsgi 프로 토 콜 을 지원 하기 때문에 우 리 는 Nginx 와 uWSGI 를 결합 시 킬 수 있 습 니 다. Nginx 는 uwsgi 를 통 해pass 는 동적 내용 을 uWSGI 에 맡 깁 니 다.
uWSGI 가 있 으 면 Nginx?
가장 보편적 인 표현 은 Nginx 가 정적 파일 을 처리 하 는 데 유리 하고 성능 이 좋다 는 것 이다.사실 작은 사이트 라면 정적 파일 을 처리 할 필요 가 없고 uWSGI 만 사용 해도 됩 니 다. 그러나 Nginx 라 는 층 을 더 하면 장점 은 구체 적 입 니 다. 운영 에 있어 서 편리 합 니 다. 만약 에 서버 가 특정한 IP 에 공격 을 받 으 면 Nginx 설정 파일 블랙리스트 에 이 IP 를 추가 하면 됩 니 다. 만약 에 uWSGI 만 사용 하면 코드 에서 수정 해 야 합 니 다.다른 한편, Nginx 는 백전백승 의 웹 서버 로 표현 에 있어 서 uWSGI 가 더욱 전문 적 으로 보인다. 예 를 들 어 uWSGI 는 초기 버 전에 서 https 를 지원 하지 않 았 기 때문에 Nginx 가 더욱 안전 하 다 고 할 수 있다.Nginx 의 특징 은 부하 균형 과 HTTP 캐 시 를 만 들 수 있다 는 것 입 니 다. 한 대의 서버 가 아니라면 Nginx 는 기본적으로 필수 옵션 입 니 다. Nginx 를 통 해 자원 을 서로 다른 서버 노드 에 배분 할 수 있 고 한 대의 서버 만 있 으 며 성능 도 잘 향상 시 킬 수 있 습 니 다. Nginx 는 headers 의 Expires or E - Tag, gzip 압축 등 방식 으로 정적 자원 을 잘 처리 할 수 있 기 때 문 입 니 다.C 언어 로 작 성 된 것 이기 때문에 native 함 수 를 호출 하여 I / O 를 최적화 시 켰 습 니 다. 동적 자원 에 있어 Nginx 는 캐 시 기능 을 실현 하고 CDN 최적화 와 결합 할 수 있 습 니 다 (이것 은 uWSGI 가 할 수 없 는 것 입 니 다).Nginx 는 epoll / kqueue 등 효율 적 인 네트워크 라 이브 러 리 를 지원 하여 높 은 병렬 연결 요청 을 잘 처리 할 수 있 으 며, 성능 이 uwSGI 보다 어디 까지 높 은 지 모른다.서버 호스트 에서 PHP, Python 등 언어 로 작 성 된 여러 애플 리 케 이 션 을 실행 하려 면 80 포트 를 감청 해 야 합 니 다. 이 럴 때 Nginx 는 필수 옵션 입 니 다.리 트 윗 서비스 가 필요 해서 요.그 러 니까 Nginx 도 기본적으로 필수 옵션 이다.그래서 uWSGI 자체 가 웹 서비스 이지 만 여기 서 Nginx 를 다시 도입 한 것 은 Nginx 를 역방향 대리 로 하기 위해 서 이다. 그러면 일부 이미지, js 등 정적 자원 은 Nginx 로 서 비 스 를 제공 할 수 있 고 다른 것 은 uWSGI 에 전달 하 는 것 도 우리 의 이 배치 구조의 최종 목적 이다.
조작 하 다.
기본 경로
프로젝트 경로
/var/www/py3env/project
가상 파 이 썬 환경 경로
/var/www/py3env/venv
프로젝트 구조
├── config.py
├── exts.py
├── main.py
├── models.py
uwsgi 프로필 추가 uwsgi. ini
본인 은
/var/www/py3env
아래 uwsgi.ini
에 두 고 자신의 파일 보관 상황 에 따라 설정 하면 됩 니 다.[uwsgi]
# uwsgi
socket = 127.0.0.1:8000
#
chdir = /var/www/py3env/project
# python
wsgi-file = main.py
# python application
callable = app
#
threads = 2
매개 변수 설명:
socket
: 소켓 통신 포트 는 외부 에 uWSGI 서버 의 인 터 페 이 스 를 남 겨 놓 고 Nginx 와 통신 하 는 것 과 같 지만 socket 은 http 를 통 해 직접 접근 할 수 없 음 을 주의 하 십시오.pythonpath
: 프로젝트 목록.module
: 프로젝트 시작 스 크 립 트 이름 을 지정 합 니 다. 로 컬 에서 python run. py 로 flask 프로젝트 를 시작 할 수 있 습 니 다 callable
: 프로그램 에서 사용 하 는 application 변수 이름 은 일반적으로 app = Flask (name) 이기 때문에 여 기 는 app 입 니 다.stats
: uwsgi 통계 정 보 를 얻 는 서비스 주소 daemonize
: uWSGI 프로 세 스 를 배경 에서 실행 시 키 고 로 그 를 지정 한 로그 파일 이나 udp 서버 에 기록 합 니 다. processes
: 프로세서 개수.threads
: 스 레 드 수.processes 와 threads 는 uwsgi 서버 를 시작 한 후에 서버 는 몇 개의 병렬 프로 세 스 를 엽 니 다. 모든 프로 세 스 는 몇 개의 스 레 드 를 열 어 처리 요청 을 기다 리 고 있 습 니 다. 이 숫자 는 합 리 적 이 어야 합 니 다. 너무 작 으 면 처리 성능 이 좋 지 않 고 너무 크 면 서버 자체 에 큰 부담 을 줄 수 있 습 니 다.
uWSGI 시작
uwsgi uwsgi.ini
uWSGI 프로필 을 사용 하지 않 고 명령 으로 실행 합 니 다.
uwsgi --socket 127.0.0.1:8008 --wsgi-file run.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
Nginx 를 사용 하면 uWSGI 가 socket 을 사용 하여 Nginx 와 통신 하도록 설정 할 수 있 습 니 다.즉, Nginx 가 uWSGI 이전에 에이전트 가 있 으 면 socket 을 맞 춰 야 하고, 요청 을 uWSGI 에 게 직접 떨 어 뜨리 려 면 http 를 맞 춰 야 한 다 는 것 이다.uWSGI 프로필 을 사용 하지 않 고 명령 으로 실행 합 니 다.
uwsgi --http :8008 --wsgi-file run.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
Nginx 서버 설정
설정 파일 의 경로 가 다 릅 니 다. centos 에서 yum 으로 설치 할 때 일반 설정 파일 은
/etc/nginx/nginx.conf
다음 부분 만 수정: server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 121.196.210.237;
charset utf-8;
#root /var/www/webroot;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
uwsgi_param UWSGI_PYTHON /var/www/py3env/venv/;
uwsgi_param UWSGI_CHDIR /var/www/py3env/project/;
uwsgi_param UWSGI_SCRIPRT main:app;
}
}
매개 변수 설명:
listen
: 감청 포트 server_name
: 서버 이름 또는 IP charset
: 문자 집합 access_log
: Nginx 서버 에서 받 은 요청 로그 입 니 다. 디 렉 터 리 를 만 들 필요 가 없 으 면 Nginx 오류 error_log
: Nginx 서버 에 기 록 된 오류 로그 include
: 가 져 온 uWSGI 설정 uwsgi_pass
: uWSGI 설정 파일 에 있 는 socket 항목 의 주소 와 같 아야 합 니 다. 그렇지 않 으 면 uWSGI 가 요청 을 받 을 수 없습니다.uwsgi_param UWSGI_PYHOME
: python 의 위치 (가상 환경 에서) uwsgi_param UWSGI_CHDIR
: 프로젝트 루트 디 렉 터 리 uwsgi_param UWSGI_SCRIPT
: 프로젝트 를 시작 하 는 메 인 프로그램 (로 컬 에서 이 메 인 프로그램 을 실행 하면 fllask 내 장 된 서버 에서 프로젝트 를 방문 할 수 있 습 니 다) nginx 서버 다시 시작:
systemctl restart nginx.service
Python 가상 환경 에서:
uwsgi uwsgi.ini
그리고 주소 표시 줄 에 접근:
http:// ip
접근 효과
터미널 디 스 플레이
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.