Title:
uwsgi
|
edited by
Youngrok Pak
at
11 years, 2 months ago.
<p>현재 가장 성능이 뛰어난 것으로 알려진 wsgi 컨테이너. <a>http://uwsgi-docs.readthedocs.org/en/latest/index.html</a> wsgi 외에도 Rack, PSGI, CGI, PHP 등도 지원한다.</p>
<p>wsgi 프로젝트 설정을 할 때 개별적으로 하기보다는 <a href="http://uwsgi-docs.readthedocs.org/en/latest/Emperor.html">http://uwsgi-docs.readthedocs.org/en/latest/Emperor.html</a>를 이용하면 편리하다.</p>
<h2><a href="우분투">우분투</a> 설정</h2>
<p>apt-get의 패키지는 오래된 것이므로 pip로 설치한다.</p>
<pre>sudo pip install uwsgi</pre>
<p><a href="http://upstart.ubuntu.com/">upstart</a> 스크립트를 만든다.</p>
<p><code>/etc/init/uwsgi.conf </code></p>
<pre># Emperor uWSGI script<br><br>description "uWSGI Emperor"<br>start on runlevel [2345]<br>stop on runlevel [06]<br><br>exec sudo -uubuntu uwsgi --master --die-on-term --emperor /etc/uwsgi</pre>
<p>그러면 이제 다음 명령으로 uwsgi 서버를 시작/중단/재시작 할 수 있다.</p>
<pre>sudo start uwsgi<br>sudo stop uwsgi<br>sudo restart uwsgi</pre>
<p>그리고 연동할 프로젝트를 설정한다. <a href="Django">Django</a>를 예로 들면 다음과 같다. 물론 그냥 wsgi 파일을 연결시켜도 된다.</p>
<pre>[uwsgi]<br>thread=3<br>master=1<br>env = DJANGO_SETTINGS_MODULE=myproj.production<br>module = django.core.handlers.wsgi:WSGIHandler()<br>chdir = /home/ubuntu/myproj<br>virtualenv = /home/ubuntu/venv<br>socket = 127.0.0.1:3031<br>logto = /home/ubuntu/logs/uwsgi-myproj.log<br>buffer-size=32768</pre>
<p><code>buffer-size</code>는 지정하지 않으면 request의 사이즈가 클 때 에러가 난다. <a href="페이스북">페이스북</a> 로그인 연동을 할 때처럼 URL이 길어지면 에러를 볼 수 있다. <span style="text-decoration: line-through;">이 정도는 디폴트값으로 해줘야 되는 거 아냐?</span></p>
<p>여기까지 하면 uwsgi 서버는 작동한다. 그럼 이제 <code>socket</code>에 지정한 대로 <a href="nginx">nginx</a>에서 연결시켜주면 된다. 우분투 패키지의 nginx는 uwsgi_params를 이미 갖고 있어서 설정만 해주면 된다.</p>
<pre>server {<br> listen 80;<br> listen [::]:80 ipv6only=on default_server;<br> server_name mydomain.com;<br> location /static {<br> alias /path/to/static;<br> }<br> location / {<br> uwsgi_pass 127.0.0.1:3031;<br> include uwsgi_params;<br> }<br>}</pre>
<p> </p>