文章目录

  • 一、前言
  • 二、nginx安装
  • 三、初识fastcgi


一、前言

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。

目前国内各大门户网站已经部署了nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了nginx,如六房间、酷6等。新近发现nginx 技术在国内日趋火热,越来越多的网站开始部署nginx。

相比apache、iis,nginx以轻量级、高性能、稳定、配置简单、资源占用少等优势广受欢迎。

在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是nginx的强项)。然后,nginx将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。

可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。

Linux的强项是用来做服务器,但是自己的项目是在windows7系统下完成的,索性就在windows系统下完成项目部署。

但是,uwsgi并没有适合Windows的安装版本。因为os.uname()这个function在Windows版本中是没有的,所以Windows中uwsgi目前应该是无法安装的。

在使用pip install uwsgi命令安装uwsgi时,出现了以下错误提示。

pip install uwsgi 安装不成功 提示 ‘module’ object has no attribute ‘uname’

python 部署到 nginx python apache nginx_python 部署到 nginx


遂决定使用下载安装包的方式进行安装。下载地址 选择下载的uwsgi版本为2.0.15。

下载完成后,进行解压。在Dos窗口切换至解压目录,然后执行python setup.py install命令。但是仍然出现了上面的错误信息,错误提示信息如下。

python 部署到 nginx python apache nginx_python 部署到 nginx_02

Python(python3.4.3)的文档中明确说明os.uname()只适用于Unix,并不适用于Windows,想安装uwsgi还是使用Linux吧。这下心塞了~

二、nginx安装

首先,到nginx官网上下载相应的安装包,下载完成后进行解压。自己下载的版本为1.12.0。

然后,进入window的cmd窗口,输入如下图所示的命令,进入到nginx目录,使用“start nginx.exe ”进行nginx的启动。若启动成功的话,会在任务管理器中看到“nginx.exe”进程,如下图所示:

python 部署到 nginx python apache nginx_apache_03

在浏览器地址栏输入:127.0.0.1(或localhost):8088,会看到如下图所示的nginx欢迎界面。

python 部署到 nginx python apache nginx_python 部署到 nginx_04


  注意,此时,我在浏览器中输入的是localhost:8066,因为我修改了其config目录下nginx.conf配置文件内容,修改后的内容如下:

python 部署到 nginx python apache nginx_django_05

相信大家看到配置文件之后,就会明白其具体配置含义了。这里不再进行详细介绍。

其他相应的命令:

nginx.exe -s stop                   //停止nginx
nginx.exe -s reload                //重新加载nginx
nginx.exe -s quit                  //退出nginx

注:以上的命令中,.exe可以去掉。

至此,nginx安装完成。

继续折腾,发现nginx+fastcgi是可行的,遂决定实践。

三、初识fastcgi

CGI全称是“公共网关接口”(Common Gateway Interface)。它可以用任意语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等,但它为人诟病的会在每次运行事前都要花费时间去fork-and-execute一次,所以便诞生了FastCGI组件,该组件由微软开发。FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要运行后不会每次都要花费时间去fork-and-execute,还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。下载地址 。很明显,使用fastcgi的话,就得使用iis的服务部署方式。似乎越来越有意思了。对于IIS的服务发布方式自己是不感兴趣的,遂决定使用Apache方式部署。

首先下载apache,下载地址。下载完成后,进行解压,然后打开相应解压目录下的config配置目录中的httpd.conf配置文件,这是apache服务器的配置文件。主要是将其中的文件目录修改为解压后存放的目录。

修改完成后,在Dos窗口切换至bin目录下,然后执行start httpd.exe命令,这时会打开apache的命令行窗口。

python 部署到 nginx python apache nginx_django_06

然后在浏览器访问 localhost就可以看到 It works!,证明apache正常工作。

python 部署到 nginx python apache nginx_apache_07


Apche服务器配置好之后,就需要部署项目了。但是后面的过程过于复杂。

经过以上折腾之后,感觉还是在Linux上部署Django比较靠谱,遇到的坑也会比较少。