之前我们提到,通过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应用
Tagged on:             

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注