资讯专栏INFORMATION COLUMN

基于Linux环境搭建Nginx+uWSGI+Python框架方法介绍

spacewander / 2772人阅读

摘要:目前在和平台下使用最广泛的免费服务器有和。涉及到普通用户执行命令时权限不足的问题,可在命令前增加指令解决。是基于二进制的线路协议,与协议作用相同,但属于服务器自有协议是服务器,它实现了协议等协议安装。

前言

浏览器上网的过程简单来说即是浏览器从服务器中获取网站信息,经过渲染后将效果呈现给用户。这里侧重介绍下在幕后默默工作着的服务器。
Web服务器是运行在物理服务器上的一个程序,永久地等待客户端(主要是浏览器,比如Chrome,Firefox等)发送请求。Web服务器通过HTTP协议与客户端通信,当收到请求之后,如果是静态文件的话Web服务器可直接返回,如果不是静态文件的话需要有一个Web应用服务器根据不同的请求处理对应的业务逻辑生成相应的响应,如下图所示。

目前在UNIX和LINUX平台下使用最广泛的免费Web服务器有Apache和Nginx。Nginx是高效的Web服务器和反向代理服务器,可以用作负载均衡,与Apache相比,Nginx支持高并发,可以支持百万级的TCP连接,十万级别的并发连接,部署简单,内存消耗少,成本低,虽然动态请求处理没有Apache丰富,但Nginx支持uWSGI的uwsgi协议,可将动态请求传递至uWSGI处理。

这里选择使用Nginx和uWSGI相结合的应用,由于Nginx是反向代理服务器,因此需要网络上的Web应用服务器uWSGI负责具体的应用逻辑处理,虽然uWSGI也可以作为Web服务器应用在小规模网站,但配合Nginx使用可以更好的利用Nginx在缓存、并发处理,安全防护,日志等方面的强大功能。

下面就来介绍下如何搭建Nginx+uWSGI环境来运行Python应用。


Nginx服务器部署

下载源码库。Nginx服务器的安装依托于openssl、zlib、pcre库的支持,在安装Nginx之前需要对这三个库进行安装,以下提供各个源码库的下载地址:
(1)openssl-fips-2.0.2.tar.gz(安全通讯库)https://www.openssl.org/source/
(2)zlib-1.2.7.tar.gz(数据压缩库)http://www.zlib.net/
(3)pcre-8.21.tar.gz(正则表达式库)http://www.pcre.org
(4)nginx-1.2.6.tar.gz http://nginx.org/en/download....

安装源码库。在Shell终端界面中输入Linux命令执行安装。涉及到普通用户执行root命令时权限不足的问题,可在命令前增加sudo指令解决。执行安装分为以下几步:
(1)解压文件。tar zxvf openssl-fips-2.0.2.tar.gz
(2)进入至存储的文件夹路径。cd openssl-fips-2.0.2
(3)运行shell配置脚本检测运行环境,生成makefile文件。./configure(Nginx的配置脚本需要结合依托库运行:./configure --with-pcre=../pcre-8.21 --with-zlib=../zlib-1.2.7 --with-openssl=../openssl-fips-2.0.2)

若运行环境不满足,如运行pcre配置文件时提示“configure: error: You need a C++ compiler for C++ support”,即缺少C++编译器,那么需要安装C++编译器“sudo apt-get install g++”

(4)编译源码库:make
(5)安装源码库:make instal

执行测试命令:./nginx -t(在/usr/local/nginx/sbin路径下执行),出现如下提示表示已经安装成功

启动/停止服务器

(1)执行启动命令:./nginx。启动后在浏览器输入http://localhost:80监听本机80端口,出现如下图所示内容,表示已经成功启动nginx服务器

(2)执行查看端口命令:netstat -ntlp

(3)筛选出nginx进程并打印:ps -ef|grep nginx

(4)Kill进程ID方式退出nginx进程:kill -QUIT


uWSGI服务器部署

在介绍uWSGI服务器部署前,先梳理uwsgi、uWSGI、WSGI的区别:

WSGI(Web Server Gateway Interface)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口协议,只要web服务器和 web应用都遵守WSGI协议,那么两者之间就可以任意组合。
uwsgi是基于二进制的线路协议,与WSGI协议作用相同,但属于uWSGI服务器自有协议
uWSGI是Web服务器,它实现了WSGI协议、uwsgi、http等协议

安装uWSGI。此处通过pip安装,也可以下载源码进行安装。

pip install uwsgi

Python编写应用程序server.py,在网页上显示“Hello World”,代码如下:

def application(environ, start_response):
    status = "200 OK"
    output = "Hello World!"

    response_headers = [("Content-type", "text/plain"),
                        ("Content-Length", str(len(output)))]
    start_response(status, response_headers)
    return [output]

启动uWSGI服务器。可通过命令方式启动uWSGI,也可以将参数写在配置文件中(inixmljsonyaml),指定配置文件来启动uWSGI(命令“uwsgi myapp.ini”)。

sudo uwsgi --http-socket :8001 --plugin python --wsgi-file server.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
--http-socket参数指定了HTTP监听地址和端口,
--wsgi-file参数指定了WSGI应用程序入口,uWSGI会自动搜寻名为”application”的应用对象并调用它。
--plugin python参数指定uWSGI 使用 python 插件去解析文件
--master 参数配置主进程
--processes 参数配置多进程
--threads参数配置多线程
--stats 参数配置在指定地址访问状态信息,如下图在”127.0.0.1:9191″获取JSON格式的运行信息

配置文件内容如下:
[uwsgi]
http-socket=:8001
plugins = python
wsgi-file=server.py
master=true
processes=4
threads=2
stats=127.0.0.1:9191

浏览器URL输入”http://localhost:8001″,可以访问到server.py执行的结果”Hello World!”

更多关于uWSGI的介绍可参考官网文档:http://uwsgi-docs.readthedocs...

Nginx+uWSGI反向代理

Ngx_http_uwsgi_module模块起到Nginx服务器与uWSGI服务器交互作用,通过对uwsgi_pass设置服务器地址和协议,可将动态内容传递至uWSGI处理。

配置uWSGI。将uWSGI的HTTP端口监听改为socket端口监听,即配置文件中的“http-socket”项改为“socket”项。

[uwsgi]
socket=127.0.0.1:3031
plugins = python
wsgi-file=server.py
master=true
processes=4
threads=2
stats=127.0.0.1:9191

配置Nginx。打开Nginx的配置文件nginx.conf(Ubuntu上路径“/usr/local/nginx/conf”),需要执行“sudo chmod -R 777 nginx.conf”降低配置文件权限才可对服务器相关属性进行配置

配置代码如下:
    server {  
        listen       80;  
        server_name  localhost;  
        location / {  
    #root   html;
    #index  index.html index.htm;
        include uwsgi_params;#加载uWSGI配置参数
        uwsgi_pass 127.0.0.1:3031;#请求转发至”127.0.0.1:3031″端口上,即uWSGI服务器
               }  
        }  

启动uWSGI服务器和nginx服务器,再次访问”http://localhost:80”时会看到python应用程序返回“Hello World!”,表示已经完成nginx服务器对uWSGI服务器的反向代理功能。

 sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
 sudo service nginx restart$ uwsgi myapp.ini

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41285.html

相关文章

  • 基于Linux环境搭建Nginx+uWSGI+Python框架方法介绍

    摘要:目前在和平台下使用最广泛的免费服务器有和。涉及到普通用户执行命令时权限不足的问题,可在命令前增加指令解决。是基于二进制的线路协议,与协议作用相同,但属于服务器自有协议是服务器,它实现了协议等协议安装。 前言 浏览器上网的过程简单来说即是浏览器从服务器中获取网站信息,经过渲染后将效果呈现给用户。这里侧重介绍下在幕后默默工作着的服务器。Web服务器是运行在物理服务器上的一个程序,永久地等待...

    whataa 评论0 收藏0
  • CentOS 下用 Nginxuwsgi 部署 flask 项目

    摘要:服务器上部署项目说白了就是让你的项目在这台服务器上运行并且做到可以在公网上访问你的项目。可以解决项目与项目之间对同一个包的不同版本的依赖问题。有可能会报的错是项目相关模块的引入路径不对,修改一下便可。 前一阵自己用flask框架写了一个博客程序,写完之后想部署到服务器上,因为是小白,所以自己google了好些资料,讲的零零碎碎而且有些地方只是告诉你怎么配置,但具体为什么这样配却没有说明...

    shuibo 评论0 收藏0
  • CentOS 下用 Nginxuwsgi 部署 flask 项目

    摘要:服务器上部署项目说白了就是让你的项目在这台服务器上运行并且做到可以在公网上访问你的项目。可以解决项目与项目之间对同一个包的不同版本的依赖问题。有可能会报的错是项目相关模块的引入路径不对,修改一下便可。 前一阵自己用flask框架写了一个博客程序,写完之后想部署到服务器上,因为是小白,所以自己google了好些资料,讲的零零碎碎而且有些地方只是告诉你怎么配置,但具体为什么这样配却没有说明...

    wanghui 评论0 收藏0

发表评论

0条评论

spacewander

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<