nginx配合python_人生苦短我用python[0x02] nginx与python结合

原标题:人生苦短我用python[0x02] nginx与python结合

**文章内容为原创,欢迎转载请注明出处**

背景

nginx是一款高性能的http服务器,python是一门无论做系统开发还是业务逻辑开发都是非常不错的动态语言,现在流行微服务,微服务往往又以http协议居多,LAMP是一直以来比较受欢迎的技术组合,Apache+PHP,PHP确实也是一门用来做web开发不错的语言,如果涉及到一些系统方面的调用可能用上来就没有python那么顺手,apahce相对于nginx讲,在功能方面会比较全面,性能就有所落后,nginx显得更灵活和高效。今天我们要讲的是用nginx作为http服务的框架,用python来开发后端的逻辑实现,这样的组合很适合把一些系统接口包装成http接口对外提供服务。

nginx与python结合的姿势

通常http服务与后端对接往往用的是CGI(Common Gateway Interface)的方式对接,比如apache服务器可以对接一个用c语言编写的可执行文件,只要这个c语言编写的执行文件符合CGI的规范就可以处理并返回来自apache服务器的http请求。nginx与python对接,目前使用最为广泛的方式是WSGI(Web Server Gateway Interface),跟CGI类似,WSGI只是一个标准,他不是一种实现方式,目前开源项目uWSGI是大家用得比较多的实现,本文将会用uWSGI给大家讲解nginx与python的结合,并给出一些简单的例子说明python如何处理来自前端nginx的http请求,如何把处理结果返回给http调用者。

下载安装nginx

http://nginx.org/en/download.html

#到nginx官网下载最新版本的源码包到/opt目录

#解压后进入代码目录进行编译和安装

#如果configure过程提示没有pcre,则需要先安装pcre-devel库

./configure --prefix=/opt/nginx

make

make install

#一切顺利的话,nginx已经安装好在/opt/nginx目录下,我们先去安装uWSGI然后再回头设置nginx的配置文件

下载安装uWSGI

https://uwsgi-docs.readthedocs.io/en/latest/Download.html

#到uWSGI官网下载最新版本的源码包到/opt目录

#解压后进入代码目录进行编译

make

#编译顺利完成后,会在当前目录下看到uwsgi的可执行文件

#比如我们的目录是 /opt/uwsgi-2.0.8/uwsgi

准备python uWSGI脚本

#我们把所有uWSGI的python脚本都放在/opt/uwsgi目录下

mkdir /opt/uwsgi

cd /opt/uwsgi

#先建立一个uwsgi的软连接

ln -s /opt/uwsgi-2.0.8/uwsgi uwsgi

#写一个启动uWSGI进程的脚本

cat run_uwsgi.sh

#!/bin/sh

./uwsgi -s 127.0.0.1:3031 -M -p 16 #监听本机3031端口,16个子进程

--harakiri=120 #处理超时时间是120秒

--pythonpath /opt/uwsgi #python目录

--chdir /opt/uwsgi

--wsgi-file main.py #uWSGI的入口文件是main.py,下面会有main.py内容

--daemonize /var/log/uwsgi.log #日志输出文件

--touch-logreopen=/var/log/touch-uwsgi-logreopen #设置可以通知uWSGI重新打开日志文件

uWSGI入口文件 main.py

import web

import os

import json

from urllib import unquote

urls = ("/.*", "main")

class main:

def GET(self):

try:

#获取GET参数

query = unquote(web.ctx.env['QUERY_STRING'])

#返回内容就是nginx返回给http调用者的内容,这里只返回GET请求内容

return query

except Exception as e:

return e

def POST(self):

try:

#获取POST数据

post_data = json.loads(web.data())

#同GET一样,返回POST数据

return post_data

except Exception as e:

return e

app = web.application(urls, globals())

application = app.wsgifunc()

配置nginx.conf

#在nginx server,比如在80端口server块里面增加后端uWSGI信息

#增加一个/uwsgi/的子目录,专门用于处理uWSGI服务

location ~ /uwsgi/(.*) {

include uwsgi_params;

uwsgi_send_timeout 120s; #设置超时时间

uwsgi_read_timeout 120s;

uwsgi_pass 127.0.0.1:3031; #跟uWSGI服务端口一致

运行uWSGI和nginx

#启动uWSGI服务

sh /opt/uwsgi/run_uwsgi.sh

#检查uwsgi是否启动成功监听服务端口

netstat -lnp|grep uwsgi

#启动nginx

/opt/nginx/sbin/nginx

#测试uWSGI GET

curl "http://127.0.0.1/uwsgi/?arg1=123&arg2=abc"

#测试uWSGI POST

curl -d "hello" "http://127.0.0.1/uwsgi/"

下期预告

人生苦短我用python[0x06] list分片与推导返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 文件颜色含义

目录文件:蓝色 一般文件:白色 符号链接:紫色 设备文件:黄色 可执行文件:绿色 链接文件:青色 图片文件:粉红色 压缩文件:红色 其它文件:灰色 链接文件&#xff1…

Mysql索引使用情况_介绍mysql索引失效的情况

mysql视频教程栏目索引失效的情况。索引对于MySQL而言,是非常重要的篇章。索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来先来聊聊哪些情况下会导致索引失效。图片总结版相关免费学习推荐:mysql视频教程…

java8根据某个id删选_Java 8可选

java8根据某个id删选在编程时,我们都面临着(最) 臭名昭著的NullPointerException 。 而且我相信我们所有人都同意,遇到NullPointerException也是一种痛苦。 为了使读者了解最新情况,著名的计算机科学家Tony Hoare引入了…

emacs python ide_Emacs Python IDE win7 x64

安装平台 win7 x64 ,emacs 23.3.1snippet工具,可自定义一些模板:.emacs 配置如下(add-to-list load-path "~/.emacs.d/yasnippet")(require yasnippet) ;; not yasnippet-bundle(yas/global-mode 1)自动完成工具,其实只…

解决阿里云 ssh 远程连接短时间没操作就会断掉的问题

在本地主机(例如:你自己的 MacBook)中打开 sshd 的配置文件,命令语句如下: sudo vim /etc/ssh/sshd_config注意:使用用户 root 编辑配置文件,否则会报错。 找到下面这个两行(/Clie…

oracle查看jdk文档_Oracle JDK 9 Early Access文档已更新

oracle查看jdk文档Raymond Gallardo于2017年4月4日发布的针对Oracle JDK 9的抢先 访问文档已更新,今天宣布对Oracle JDK9文档的抢先访问页面进行了更新。 Gallardo重点介绍了一些更新的部分,包括Oracle JDK 9的新增功能 , Oracle JDK 9迁移指…

python3 selenium_Python3+Selenium3自动化测试-(准备)

Python3Selenium3自动化测试-(准备)最近在学习selenium自动化测试相关的内容,所以将实际准备情况做一记录,# 系统:win10(64位)# 浏览器:Chrome(67.0)、Firefox(61.0)、IE# python版本:3.6.5# Selenium:3.13…

MacBook如何通过键盘快捷键输入特殊字符_特殊符号

符号快捷键说明–[ Option ][ - ]破折号[ Option ] [ / ]除号≠[ Option ][ ]不等号≤[ Option ][ < ]≥[ Option ][ > ][ Option ][ \ ]左指双角引号[ Option ][ ’ ]拉丁文小写字母AE…[ Option ][ ; ]水平省略号≈[ Option ][ X ]约等于Ω[ Option ][ Z ]希腊文大写…

java 类 null_深入理解java中的null“类型”

本文研究的主要是java中的null“类型”的相关实例&#xff0c;具体介绍如下。先给出一道简单的null相关的题目&#xff0c;引发我们对null的探讨,后面会根据官方语言手册对null“类型”进行解读。题目&#xff1a;下面程序能正确运行吗&#xff1f;解析&#xff1a;输出应该为 …

wcg总决赛_关于总决赛

wcg总决赛可以将变量声明为final。 最终变量只能分配一次。 如果分配了最终变量&#xff0c;则将导致编译时错误&#xff0c;除非在分配前立即将其明确取消分配。 分配任何最终变量后&#xff0c;将永远无法对其进行更改。 如果变量引用任何对象的任何实例&#xff0c;它将继续…

python dump函数用法_Python中json库的load和dump函数

相信很多朋友都对python里面的json库非常熟悉&#xff0c;json这个东西简明易懂&#xff0c;还能储存数据&#xff0c;实在是非常方便。我一开始使用json是从爬虫接触的&#xff0c;那个时候只知道json.loads和json.dumps&#xff0c;当时ide确实会自动填充load函数和dump函数&…

如何彻底禁用Chrome浏览器的缓存功能

禁止Chrome浏览器的缓存功能有几种方式&#xff1a; 使用Shift F5强制刷新缓存。实际使用中我们发现&#xff0c;这种方法对于部分网页的更改并不能做到释放缓存的作用&#xff0c;尤其是无法释放DNS缓存。 使用隐身模式Shift Control N. 这种方法只能在打开的页面上消除之…

java int integer内存_java中一个integer对象的内存占用是多少?可以通过java方法输出吗?...

今天翻记录看到了自己15年3月份提的问题&#xff0c;现在已经18年6月份了&#xff1b;去年线上项目出现内存瓶颈&#xff0c;原因是缓存的玩家角色数据过多&#xff0c;在长时间不停服的情况下&#xff0c;导致数据越来越膨胀&#xff0c;之前没有清除无用缓存的机制&#xff0…

Linux命令行中的特殊符号_特殊字符

常用的特殊符号 符号说明#1.表示注释&#xff1b;2.命令提示符~表示用户主目录。切换到用户主目录下&#xff1a;cd ~&#xff0c;切换到用户主目录下的bin目录&#xff1a;cd ~/bin~表示当前目录。切换到当前目录下wwwroot目录&#xff1a;cd ~/wwwroot~-表示上次的工作目录。…

微信小程序css 华文琥珀_琥珀项目:较小的,面向生产力的Java语言功能

微信小程序css 华文琥珀Brian Goetz最近的消息欢迎来到琥珀&#xff01; 介绍Project Amber &#xff08; OpenJDK的一部分&#xff0c; 最初于1月提出 &#xff09;。 Goetz通过介绍“欢迎使用Amber项目&#xff0c;这是我们面向特定生产力的Java语言JEP的孵化场”的介绍打开了…

windows查看器无法打开图片_关于windows微软商城无法打开 错误代码0x80004003问题...

我本来是商城可以进 但是一打开里面的东西就无法打开 按下面的刷新就闪退 如下图操作桌面winr 运行 services.msc然后找到windows update打开就行 但是开启了系统会自动更新若是修改时显示拒绝访问桌面winr 输入regedit打开注册表 注册表找到HKEY_LOCAL_MACHINESYSTEMCurrentCo…

win10 java 反编译_win10下对.java源文件进行编译和反编译的步骤

1、先写好代码&#xff0c;如下找了个示例代码&#xff0c;文件名是Mutex.java&#xff1a;package com.huangshiyi.concurrent.cha04;import java.util.concurrent.TimeUnit;public class Mutex {private final static Object MUTEX new Object();public void accessResource…

Linux 删除指定目录下的文件/删除文件

文章目录删除当前目录下的所有类型的文件删除指定目录下的所有类型的文件用 find 命令在当前目录下查找普通文件并删除用 find 命令在指定目录下查找普通文件并删除用 find 命令的处理动作将当前目录及其子目录下的普通文件删除用 find 命令的处理动作将指定目录及其子目录下的…

电容屏物体识别_相比传统的触摸屏,电容式触摸屏的优势

点击蓝字&#xff0c;轻松关注今日话题 如今&#xff0c;我们的身边有着许多电子产品&#xff0c;主要是因为它便于我们的生活&#xff0c;所以我们的身边出现了许多触摸屏。对于电子产品&#xff0c;我们使用之前要了解清楚它的使用性能&#xff0c;掌握多点信息&#xff0c;这…

gatling的环境配置_将Gatling集成到Gradle构建中–了解SourceSet和配置

gatling的环境配置我最近在一个项目中工作&#xff0c;我们不得不将出色的负载测试工具Gatling集成到基于Gradle的版本中。 有可用的gradle插件使此操作变得容易&#xff0c;其中有两个是this和this &#xff0c;但是对于大多数需求而言&#xff0c;只需简单执行命令行工具本身…