当前位置: 首页 > Linux

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

时间:2023-04-06 23:51:03 Linux

前言浏览器上网的过程简单来说就是浏览器从服务器获取网站信息,渲染后呈现给用户。这里我们重点关注在幕后默默工作的服务器。Web服务器是运行在物理服务器上的程序,永久等待客户端(主要是浏览器,如Chrome、Firefox等)发送请求。Web服务器通过HTTP协议与客户端通信。web服务器收到请求后,如果是静态文件,可以直接返回。如果不是静态文件,Web应用服务器需要根据不同的请求处理相应的业务逻辑,生成相应的响应,如下图所示。Apache和Nginx是目前UNIX和LINUX平台下使用最广泛的免费Web服务器。Nginx是一种高效的Web服务器和反向代理服务器,可用作负载均衡器。与Apache相比,Nginx支持高并发,可以支持百万级别的TCP连接,十万级别的并发连接。它易于部署并且消耗更少的内存,低成本,虽然动态请求处理不如Apache丰富,但是Nginx支持uWSGI的uwsgi协议,可以将动态请求传递给uWSGI进行处理。这里我们选择使用Nginx和uWSGI的组合。由于Nginx是一个反向代理服务器,需要网络上的web应用服务器uWSGI负责具体的应用逻辑处理。虽然uWSGI在小型网站中也可以作为web服务器使用,但是配合Nginx的使用可以更好的利用Nginx在缓存、并发处理、安全防护、日志等方面的强大功能。下面介绍一下如何搭建用于运行Python应用程序的Nginx+uWSGI环境。Nginx服务器部署并下载源码仓库。Nginx服务器的安装依赖于openssl、zlib和pcre库的支持。安装Nginx前需要先安装这三个库。各源码库的下载地址如下:(1)openssl-fips-2.0.2.tar。gz(安全通信库)https://www.openssl.org/source/(2)zlib-1.2.7.ta??r.gz(数据压缩库)http://www.zlib.net/(3)pcre-8.21.tar.gz(正则表达式库)http://www.pcre.org(4)nginx-1.2.6.tar.gzhttp://nginx.org/en/download....安装源码库.在Shell终端界面输入Linux命令执行安装。普通用户执行root命令时权限不足的问题,可以通过在命令前加上sudo命令来解决。安装的执行分为以下几个步骤:(1)解压缩文件。tarzxvfopenssl-fips-2.0.2.tar.gz(2)输入文件夹路径进行存储。cdopenssl-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:YouneedaC++compilerforC++support”,即,缺少C++编译器,那么需要安装C++编译器"sudoapt-getinstallg++"(4)编译源码库:make(5)安装源码库:makeinstall执行测试命令:./nginx-t(在/usr/local/nginx/sbin路径下执行),出现如下提示说明服务器已经安装成功。启动/停止服务器(1)执行启动命令:./nginx。启动后在浏览器中输入http://localhost:80监听本机80端口,出现下图所示内容,说明nginx服务器已经启动成功(2)执行命令查看port:netstat-ntlp(3)过滤掉nginx进程并打印:ps-ef|grepnginx(4)kill掉进程ID退出nginx进程:kill-QUITuWSGIserverdeployment在介绍uWSGIserverdeployment之前,先梳理一下uwsgi、uWSGI和WSGI之间的区别:WSGI(WebServerGatewayInterface)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单通用的接口协议。只要web服务器和web应用都遵守WSGI协议,两者可以任意组合。uwsgi是一个基于二进制的线路协议,其功能与WSGI协议相同,但属于uWSGI服务器自身的协议。uWSGI是一个web服务器,它实现了WSGI协议,uwsgi、http等协议来安装uWSGI。这里可以通过pip安装,也可以下载源码安装。pipinstalluwsgiPythonwriteapplicationserver.py,在网页上显示“HelloWorld”,代码如下:defapplication(environ,start_response):status='200OK'output='HelloWorld!'response_headers=[('Content-type','text/plain'),('Content-Length',str(len(output)))]start_response(status,response_headers)return[output]启动uWSGI服务器。可以通过命令启动uWSGI,也可以将参数写入配置文件(inixmljsonyaml),指定配置文件启动uWSGI(命令“uwsgimyapp.ini”)。sudouwsgi--http-socket:8001--pluginpython--wsgi-fileserver.py--master--processes4--threads2--stats127.0.0.1:9191--http-socket参数指定HTTP监听地址和端口,--wsgi-file参数指定WSGI应用入口,uWSGI会自动搜索名为“application”的应用对象并调用它。--pluginpython参数指定uWSGI使用python插件解析文件--master参数配置主进程--processes参数配置多进程--threads参数配置多线程--stats参数配置指定访问状态信息地址,如下图“127.0.0.1:9191”获取JSON格式的运行信息配置文件如下:[uwsgi]http-socket=:8001plugins=pythonwsgi-file=server.pymaster=trueprocesses=4threads=2stats=127.0.0.1:9191浏览器URL输入“http://localhost:8001”,可以访问server.py执行结果“HelloWorld!”关于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:3031plugins=pythonwsgi-file=server.pymaster=trueprocesses=4threads=2stats=127.0.0.1:9191配置Nginx。打开Nginx配置文件nginx.conf(Ubuntu路径为“/usr/local/nginx/conf”),需要执行“sudochmod-R777nginx.conf”降低配置文件权限来配置服务器-相关属性配置代码如下:server{listen80;服务器名称本地主机;位置/{#roothtml;#indexindex.htmlindex.htm;包括uwsgi_params;#loaduWSGI配置参数uwsgi_pass127.0.0.1:3031;#requestforwardedto"127.0.0.3031端口,即uWSGI服务器}}}启动uWSGI服务器和nginx服务器,再次访问"http://localhost:80"时,会看到python应用程序返回“HelloWorld!”,说明nginx服务器已经完成了uWSGI服务器的反向代理功能sudo/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.confsudo服务nginx重新启动$uwsgimyapp.ini