+ Nginx 와 WSGI(Web Server Gateway Interface)/ASGI(Asynchronous Server Gateway Interface)를 같이 사용하는 이유
- Nginx은 비동기로 외부의 작업연산(요청)을 listen하여 WSGI/ASGI로 전달 (nonblocking to, 더 많은 연산을 빠르게 처리)
(Apache는 연산 작업을 책임지고 수행(blocking io)하여 연산을 더 안정적으로 처리)
- WSGI/ASGI가 요청을 수행 (Event Driven)
- 이벤트 생성, 소비의 주체 분리 (Producer-Counsumer Pattern)
- Nginx가 Event loop에 등록한 작업연산(요청)들을 WSGI(ASGI)가 처리하고 결과를 응답하면 Nginx가 클라이언트에 결과 전달
+ Nginx와 WSGI를 같이 사용해야 하는 이유
- reverse proxy로 이용
ㄴ 웹 서버의 실체 보호 및 보안상 이점
ㄴ 실제 클라이언트의 요청 근원지는 Nginx만 확인 가능
ㄴ 프록시 정보가 아닌 실제 클라이언트 정보를 알기 위해서는 임의의 헤더 정보를 통해 전달 필요
- nginx의 다양한 성능 튜닝
ㄴ 아키텍처 측면에서의 효율성 극대화 가능
ㄴ 로드밸런서, 로드분배 알고리즘 채택 가능
ㄴ proxy 활용 가능
+ 요청 및 응답 전달 프로세스
- 요청: 클라이언트 > Nginx -- 프록시/숨김 > WSGI
- 응답: WSGI > Nginx -- 프록시/숨김 > 클라이언트
1. FastAPI 와 ASGI(Asynchronous Server Gateway Interface)인 Uvicorn 설치
pip install fastapi
pip install uvicorn
2. FastAPI 구동 테스트를 위한 main.py 작성
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {'Hello':'World!'}
3. Uvicorn 으로 FastAPI 구동 확인
uvicorn main:app --reload
4. 브라우저에서 http://127.0.0.1:8000/에 접속 시 {'Hello':'World!'} JSON 응답 확인 가능
5. https://127.0.0.1:8000/docs(Swagger UI), https://127.0.0.1:8000/redoc(ReDoc UI) 를 통해 API 문서 확인 가능
6. Uvicorn Deploy 를 위한 Nginx 설치
apt-get install nginx
7. FastAPI 와 Nginx 연동을 위한 Nginx config 파일 작성
# /etc/nginx/sitest-available/fastapi.conf
server {
listen 80;
server_name <your_ip/domain>
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000; # FastAPI 기본 포트 8000으로 proxy 연결
}
}
8. sites-availabe 의 fastapi.conf 파일을 sites-enabled 에 심볼릭 링크 생성
- 실제 서버 구동 파일은 sites-enable 로 이동 필요하여 심볼릭 링크 통해서 연결
# 심볼릭 링크 생성
sudo ln -s /etc/nginx/sites-available/fastapi.conf /etc/nginx/sitest-enabled/fastapi.conf
9. Nginx configuration 테스트
nginx -t
10. Nginx 서비스 시작
sudo systemctl start nginx
11. uvicon 서비스 시작
uvicorn main:app -reload
'개발 > Python' 카테고리의 다른 글
sqlalchemy 2013: Lost connection to MySQL server during query 이슈 해결 (0) | 2022.11.24 |
---|---|
BeautifulSoup 4 (0) | 2020.08.07 |
Selenium Locating Elements (0) | 2020.08.04 |