网站首页 > 技术文章 正文
明天会分享一下关于如何制作U盘里的linux,以及多功能的U盘启动,实现linux,window等引导。感兴趣的朋友可以关注一波!
昨天我们讲到了关于nginx如何响应php程序的方法。而作为运维工程师的必备技能之一——python。是我们今天要讲的重点,python的功能非常多,其中一个就是作为web开发,那么用python实现的web程序,我们怎么用,web服务器apache或者nginx怎么去解析python。接下来我就分别介绍一下apache和nginx是如何实现python解析的。
开班第三十二天:
今天的课程大纲:
apache实现解析python web程序
nginx实现解析python web程序
详细讲解:
apache实现解析python web程序
apache实现功能,一般都是通过加载模块实现的,那么apache实现python解析的模块是啥,这个模块叫:mode_wsgi。下面是我实现apache解析python的主要步骤:
1.下载模块,安装模块,这里我已经下载好了。直接安装,由于是源码,所以我进行源码安装。在安装之前,这个模块需要我们系统的几个依赖,httpd-devel,python-devel。
2.解压之后,cd进来,然后执行./configure,执行成功之后再执行make && make install,结束后出现下面的输出就表示安装成功了。
3.安装好之后,为了清晰明了,我直接单独写一个配置文件来加载wsgi这个模块。
执行vim
/etc/httpd/conf.d/wsgi.conf。第一行表示加载这个模块,第二行表示套接字我单独放在一个目录中,要不然会出现访问错误。
4.编写一个python web程序,最简单的。这个程序你可以放在任何地方,但是注意的是,别人应该能够有权限进入这个目录。
5.修改apache的配置文件,这里需要注意的是,我之前定义了www.libin.it这个域名,但是是定义在虚拟主机中的,但是wsgi是不支持虚拟主机的,所以我把这个配置单独写在了一个配置文件中。
WSGIScriptAlias表示当我们访问/的时候,会执行/opt/test.py这个程序。下面的配置就是把这个wsgi放到后台运行,产生两个进程,三个线程。
6.重启apache服务,测试。测试成功,正常显示python输出。
nginx实现解析python web程序
apache实现了python,那么现在就看看nginx是如何实现python解析的,首先你要做的是把apache的服务停止,把nginx的服务启动。nginx实现python解析需要一个工具叫做uwsgi,这个工具可以指定我启动多少个进程来实现响应这个python请求。
1.安装uwsgi,我这里有安装包,解压,cd到目录中,只需要执行make就可以了,看到下面输出就是安装成功了。
2.为了方便,我们把目录中产生了命令uwsgi拷贝到/usr/local/bin中。使用命令:uwsgi -M -s /tmp/uwsgi.sock -p 3 --wsgi-file /opt/test.py --uid=nginx。
但这个是前台运行的,不方便,所以我们一般把这个程序放到后台运行,加上-d 日志名。
uwsgi -M -s /tmp/uwsgi.sock -p 3 --wsgi-file /opt/test.py --uid=nginx -d /var/log/uwsgi.log
3.程序安装好了,那么我们怎么配置nginx呢,编写下面的配置文件。但这里我们需要注意的是,在工作中,我们一般不会把所有的请求都教给uwsgi,只是希望把动态的交给uwsgi,静态数据自己处理就行了。那么我们可以这样实现。用try_files实现动静分离,当访问根目录或根文件的时候,首先在自己nginx目录找,如果没有找到,那么交给@uwsgi,这样就可以解析python了。
4.重启nginx服务,访问www.libin.it www.libin.it/test.py,如果是不同的页面,那么我们的成功了。
5.现在又出现一个问题,如果我们关机开机之后,我们是不是又要输入那么一大串代码来启动uwsgi,所以我们可以把uwsgi交给一个进程管理器,之前我们讲到过一个supervisor,这个来管理就非常适合了,同时也满足后台运行了。编辑supervisor配置文件vim /etc/supervisord.conf,添加下面几行,command就是你开启uwsgi的命令,注意写绝对路径,而且需要特别注意的是,不许要加上-d了,因为supervisor就已经把uwsgi后台运行了,而且还单独指定了日志文件。
6.重启supervisor服务/etc/init.d/supervisord restart。输入supervisorctl进入进程管理器界面,查看uwsgi是否运行。这里可以看到uwsgi已经运行了。
总结:
今天主要的任务就是实现web服务器对python程序的解析,如果对python用做web开发感兴趣的,可以多去学习一下python关于web的模块。
头条号:爱家人爱老婆的IT男
QQ群:145252709,我会上传资源,同时会有很多大神跟你们讨论学习分享
微信公众号:程序猿的野生香蕉
猜你喜欢
- 2025-06-23 python3实现线程和进程的状态转换的模块及应用示例
- 2025-06-23 原来Python的协程有2种实现方式(python协程gevent)
- 2025-06-23 python线程start、run方法本质和区别
- 2025-06-23 Python模块datetime、calendar、logging、argparse、re用法
- 2025-06-23 Python常见模块机os、sys、pickle、json、time用法
- 2025-06-23 python类库configparser(python class库)
- 2025-06-23 python字典常用初始化方式、增加元素及遍历
- 2025-06-23 python运算符重载和上下文管理(python重载加号)
- 2025-06-23 Linux面试题Python(linux面试题大全)
- 2025-06-23 ZooKeeper分布式服务框架在python开发中常见的应用案例
- 06-23python3实现线程和进程的状态转换的模块及应用示例
- 06-23原来Python的协程有2种实现方式(python协程gevent)
- 06-23python线程start、run方法本质和区别
- 06-23Python模块datetime、calendar、logging、argparse、re用法
- 06-23Python常见模块机os、sys、pickle、json、time用法
- 06-23python类库configparser(python class库)
- 06-23python字典常用初始化方式、增加元素及遍历
- 06-23python运算符重载和上下文管理(python重载加号)
- 270℃Python短文,Python中的嵌套条件语句(六)
- 268℃python笔记:for循环嵌套。end=""的作用,图形打印
- 266℃PythonNet:实现Python与.Net代码相互调用!
- 262℃Python实现字符串小写转大写并写入文件
- 260℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 120℃原来2025是完美的平方年,一起探索六种平方的算吧
- 101℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 95℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- python3实现线程和进程的状态转换的模块及应用示例
- 原来Python的协程有2种实现方式(python协程gevent)
- python线程start、run方法本质和区别
- Python模块datetime、calendar、logging、argparse、re用法
- Python常见模块机os、sys、pickle、json、time用法
- python类库configparser(python class库)
- python字典常用初始化方式、增加元素及遍历
- python运算符重载和上下文管理(python重载加号)
- 《第32天》运维工程师分享:web服务器如何解析python
- Linux面试题Python(linux面试题大全)
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)