标题:Centos5.4+Nginx-0.8.50+UWSGI-0.9.6.2+Django-1.2.3搭建高性能WEB服务器[原创] 出处:运维进行时 时间:Wed, 13 Oct 2010 20:42:30 +0000 作者:刘天斯 地址:https://blog.liuts.com/post/216/ 内容: 之前一直使用Nginx+Fastcgi来搭建python web服务器,本文介绍Nginx+UWSGI组合来实现。uWSGI 是一个快速的、纯C语言开发的、自维护的、对开发者友好的WSGI服务器,旨在提供专业的 Python web应用发布和开发。它更符合python web的标准协议,速度要比Fastcgi要快、性能更加稳定。 一、安装平台 1、安装pcre 引用 cd /home mkdir -p /home/install/nginx && cd /home/install/nginx wget http://ftp.exim.llorien.org/pcre/pcre-8.00.tar.gz tar -zxvf pcre-8.00.tar.gz cd pcre-8.00 ./configure make && make install cd .. 2、安装Nginx 引用 wget http://nginx.org/download/nginx-0.8.50.tar.gz tar -zxvf nginx-0.8.50.tar.gz cd nginx-0.8.50/ ./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-cc-opt='-O3' --with-cpu-opt=opteron make && make install cd .. 3、安装python&Mysql-python 引用 wget http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tgz tar -zxvf Python-2.5.1.tgz cd Python-2.5.1 ./configure && make && make install echo "export PATH=\$PATH:/usr/local/bin" >> /etc/profile source /etc/profile 4、安装MySql-python 引用 cd ../ wget http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.2/MySQL-python-1.2.2.tar.gz?r=&ts=1285248455&use_mirror=nchc cd MySQL-python-1.2.2 python setup.py install 5、安装Django 引用 wget http://www.djangoproject.com/download/1.2.3/tarball/ tar -zxvf Django-1.2.3.tar.gz cd Django-1.2.3 python setup.py install cd .. 6、安装uWSGI 引用 wget http://projects.unbit.it/downloads/uwsgi-0.9.6.2.tar.gz tar -zxvf uwsgi-0.9.6.2.tar.gz cd uwsgi-0.9.6.2 make cp uwsgi /usr/bin 二、平台配置 1、平台环境说明 1.1、项目位置:/opt/www/Purgesys 创建项目方法: 引用 cd /opt/www django-admin.py startproject Purgesys 1.2、查看项目(出现以下文件结构说明项目已创建成功) #tree Purgesys 引用 Purgesys |-- __init__.py |-- manage.py |-- settings.py `-- urls.py 2、Nginx相关配置 #cd /usr/local/nginx/conf #vi django_uwsgi.conf # Django project server { listen 80; server_name purgesys.domain.com; location / { uwsgi_pass 127.0.0.1:9000; include uwsgi_params; access_log off; } location ^~ /static { root /opt/www/Purgesys; } location ^~ /admin/ { uwsgi_pass 127.0.0.1:9000; include uwsgi_params; access_log off; } location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ { root /opt/www/Purgesys/static; access_log off; } } *Nginx-0.8.50默认已添加uwsgi输出头支持 include uwsgi_params; #vi nginx.conf 追加子配置文件django_uwsgi.conf http{ ........ include django_uwsgi.conf; } 3、UWSGI配置 #mkdir -p /home/uwsgi;cd /home/uwsgi #mkdir -p /opt/www/logs #echo "" > /opt/www/logs/django.log #vi uwsgi.xml 127.0.0.1:9000 200 true /usr/local/nginx/uwsgi.pid 8 /opt/www/Purgesys /opt/www/ django_wsgi true true true true 6048 /opt/www/logs/django.log 4、创建应用模块 cd /opt/www/Purgesys vi django_wsgi.py import os os.environ['DJANGO_SETTINGS_MODULE'] = 'Purgesys.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 5、启动服务 #/usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml #/usr/local/nginx/sbin/nginx 6、查看进程 #[liuts@webserver nginx]# ps -ef|grep uwsgi|grep -v grep 引用 root 21652 1 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml root 21653 21652 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml root 21654 21652 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml root 21655 21652 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml root 21656 21652 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml root 21657 21652 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml root 21658 21652 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml root 21659 21652 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml root 21660 21652 0 17:12 ? 00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml 7、监听端口 #[liuts@webserver nginx]# netstat -an|grep 9000 引用 tcp 0 127.0.0.1:9000 0.0.0.0:* LISTEN 8、访问测试 输入http://serverip/ 点击在新窗口中浏览此图片 https://blog.liuts.com/attachment.php?fid=216 大功告成! *附uwsgi启动脚本 #cd /home/uwsgi #vi uwsgiserver.sh #!/bin/bash if [ $1 = start ];then psid=`ps aux|grep "uwsgi"|grep -v "grep"|wc -l` if [ $psid -gt 2 ];then echo "uwsgi is running!" exit 0 else /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml fi echo "Start uwsgi service [OK]" elif [ $1 = stop ];then killall -9 uwsgi echo "Stop uwsgi service [OK]" elif [ $1 = restart ];then killall -9 uwsgi /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml echo "Restart uwsgi service [OK]" else echo "Usages: sh uwsgiserver.sh [start|stop|restart]" fi #sh uwsgiserver.sh start [uWSGI] parsing config file /home/uwsgi/uwsgi.xml Start uwsgi service [OK] 如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu Generated by Bo-blog 2.1.1 Release