nginx location 을 사용할 때 정규식을 사용하려면 ~ 를 넣어야 했다.
location ~ ^/admin/[^.]*$ {
alias /admin/dist/;
}

~   는 case-sensitive RE match  이고 
~* 는 case-insensitive RE match 이다. 

nginx.viraptor.info/ 에서 URL 을 넣어 어떤  location 에 걸리는지 테스트 해 볼 수 있다. 
그리고 github.com/nginxinc/NGINX-Demos/tree/master/nginx-regex-tester 이런 프로젝트도 있다. (언젠가는 위 링크가 동작하지 않을 때 유용할 것이다. ) 

 

 일반적으로  uwsgi 를 사용할 경우 하나의 server(flask 나 django) 만 돌리거나 동일한 버전 python 의 다른 virtualenv 환경의 server 를 돌리기 마련이다. 오늘은 python 3.6.5 와 python3.9.4 를 한 서버에 올릴 일이 있었다.

 대상 서버는 테스트 서버인지라 온갖 테스트 서비스들이 동작하고 있다. 이미 python3.6.5 버전의 테스트 서버가 올라가 있는데, 여기에 요즘 작업중인 서버를 올릴려고 했는데, 단순히 virtualenv 설정으로는 동작하지 않았다. 

내 테스트 서버는 Ubuntu 16.04 이다. (이 것도 이제 업데이트 시켜야 하는데....) 

 우선 pip 를 이용해서 설치 uwsgi 하는 라이브러리의 경우 다른 버전의 파이썬 서비스를 동작시키는데 문제가 있었다. 이 경우 uwsgi 를 컴파일 해서 설치해야 한다. 그리고 사용하는 파이썬 버전은 pyenv 를 통해 동작시킬 때 이상동작을 했다. sudo add-apt-repository ppa : deadsnakes / ppa 같은 것을 이용해서 python 패키지가 설치 되어야한다. 그리고 해당 버전에 맞는 python-dev 버전 설치도 필수다. (내 경우  python3.6-dev  와 python3.9-dev 설치도 필요하다. )

uwsgi 컴파일 
참고 : stackoverflow.com/a/62681907/6652082 (Install uWSGI from source and build python plugins 이후 부분부터)

# 필요한 패키지 설치
apt install libpcre3 libpcre3-dev

# 소스다운로드 후 컴파일 (X.X.X.X 는 최신 버전에 맞게 수정)
cd /usr/local/src
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar vzxf uwsgi-latest.tar.gz
cd uwsgi-X.X.X.X/
make PROFILE=nolang

# symbolic 링크 생성
ln -s /usr/local/src/uwsgi-X.X.X.X  /usr/local/src/uwsgi
ln -s /usr/local/src/uwsgi-X.X.X.X/uwsgi  /usr/local/bin

 

uwsgi 용 plugin 생성
uwsgi 가 기본적으로 plugin 을 이용해서 다양한 언어를 지원한다. 우리 case 의 경우 파이썬 버전별로 plugin 을 만들 수 있다. python 버전별 (우리 case 의 경우 3.6 과 3.9 가 필요하다. 컴파일 도중 python.h 파일이 없다고 에러난다면 python-dev 패키지가 없는 것이다. )

# uwsgi 소스 디렉토리로 이동
cd /usr/local/src/uwsgi-x.x.x.x


virtualenv 파이썬 경로는 . active 한 후 which python 했을 경우 나오는 python 실행파일 경로이다. 

# python 3.6 버전 플러그인 생성
PYTHON=virtualenv파이썬 경로  ./uwsgi --build-plugin "/usr/local/src/uwsgi/plugins/python python36"
# so 파일 이동
mv python36_plugin.so /usr/lib/uwsgi/plugins/python36_plugin.so
chmod 644 /usr/lib/uwsgi/plugins/python36_plugin.so


# python 3.9 버전 플러그인 생성
PYTHON=virtualenv파이썬 경로  ./uwsgi --build-plugin "/usr/local/src/uwsgi/plugins/python python39"
# so 파일 이동
mv python39_plugin.so /usr/lib/uwsgi/plugins/python39_plugin.so
chmod 644 /usr/lib/uwsgi/plugins/python39_plugin.so


uwsgi 설정

일반적인 uwsgi 설정에서 하나 달라지는 것이 있다.
ini 파일을 사용한다면 

plugin-dir = /usr/lib/uwsgi/plugins
plugin = python36

위 와 같이 so 파일이 들어 있는 디렉토리 경로와 plugin 이름 (여기서는 python36 과 python39) 을 추가해 줘야 한다. 


이렇게 해서 테스트 해 봤는데, 두 버전 다 동작하는 것을 확인 했다. 

 Rust 프로그램을 짜는데 디버깅하다가 vscode 디버거가 오류를 발생시키면서 동작하지 않았다. 도저히 나 혼자의 힘으로는 고치지 못할 것 같아서 질문을 해야 겠다는 생각이 들었다. Facebook 그룹에 글을 올릴까 하닥 이건 한국사람중에 아는 사람이 없을 것 같아서, stackoverflow 에 문의를 올렸다. 

구글 번역기의 힘을 이용했는데, 내 의견이 제대로 전달될지 모르겠다. 너무 희귀한 문제라 보는 사람이 있는지 조차 좀 의심스럽긴 하다. 만일 답변이 달리지 않는다면 다시는 stackoverflow 에 질문하지 않을 것 같다. 

stackoverflow.com/questions/66764603/error-occurs-when-debugging-rust-program-with-vscode-windows-only