之前我们提到,通过nginx+uwsgi搭建uwsgi应用的教程,nginx提供了原生的uwsgi协议的支持,这是目前的黄金组合;但是有时候,我们需要Apache搭建这类应用,这时候就需要mod_proxy_uwsgi模块了,这也是目前官方推荐的Apache跑uwsgi的方式。
我们的环境为一台CentOS7服务器,IP:192.168.1.200,hostname:centos,
首先,我们需要安装epel仓库。
yum install epel-release
安装必要的组件:
yum install mod_proxy_uwsgi uwsgi-plugin-python
以上两个组件会因为依赖,把httpd和uwsgi安装上去,所以就不用单独安装了。
把相关服务启动,并设置为自启动
systemctl enable uwsgi.service systemctl enable httpd.service systemctl start uwsgi.service systemctl start httpd.service
我们以flask程序为例,进行测试,先安装flask。
yum install python-flask
创建文档目录:
mkdir /srv/demo
在上面的目录中,创建一个flask程序test.py:
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "<h1 style='color:blue'>This is demo site!</h1>" if __name__ == "__main__": app.run(host='0.0.0.0')
改下文件权限:
chown -R uwsgi:uwsgi /srv/demo semanage fcontext -a -t httpd_sys_rw_content_t "/srv/demo(/.*)?" restorecon -Rv /srv/demo/
Apache启用模块:
vim /etc/httpd/conf.modules.d/00-uwsgi.conf
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
配置下uwsgi:
vim /etc/uwsgi.d/demo.ini
[uwsgi] plugin = python base = /srv/demo chdir = /srv/demo module = test pythonpath = %(base) socket = %(base)/%n.sock chmod-socket = 666 callable = app logto = /var/log/%n.log
别忘记更改下用户属主:
chown uwsgi:uwsgi demo.ini
创建下uwsgi日志文件:
touch /var/log/demo.log chown uwsgi:uwsgi /var/log/demo.log
最后创建下Apache正式的文档目录配置文件:
vim /etc/httpd/conf.d/uwsgi.conf
ProxyPass / unix:/srv/demo/demo.sock|uwsgi://demo/
注意,后面的uwsgi://demo/是为了区分多个uwsgi用的,多个应用需要用不同的名称区分,仅仅采用不同的unix socket是无法工作的。另外,通过添加虚拟主机,可以采用不同的域名,或者通过不同的端口号来让多个uwsgi应用一起工作。
最后重启下服务:
systemctl restart uwsgi.service systemctl restart httpd.service
访问http://192.168.1.200/ ,此时应该能工作了。
CentOS7下用Apache mod_proxy_uwsgi模块搭建uwsgi应用