使用Apache的mod_proxy_uwsgi
我想在Apache 2.4上运行moinmoin,但遇到了一些问题,所以做了一些笔记。
准备Apache
要使用Apache中的mod_proxy_uwsgi,需要加载mod_proxy和mod_proxy_uwsgi。
由于mod_proxy_uwsgi通常不包含在标准中,所以需要适当安装它。
例如,在ArchLinux中可以通过软件包管理系统来安装。
在Apache的配置文件中写入所需的模块。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
应用程序的准备工作
下载运行在uWSGI上的应用程序,可以通过软件包管理系统进行安装来准备环境。然后,通过uwsgi.ini文件对uWSGI进行配置。
我这次尝试运行了moinmoin,这里举个例子。将moinmoin所需的文件放置在/var/lib/moin下,并创建如下uwsgi.ini文件。
[uwsgi]
uid = http
gid = http
socket = 127.0.0.1:50000
# mod_proxy_uwsgiでunix domain socketがうまく使えなかったのでTCPを使う
#socket = /run/uwsgi/moin.sock
#chmod-socket = 660
plugin = python2
chdir = /var/lib/moin/
wsgi-file = /var/lib/moin/server/moin.wsgi
master = True
workers = 2
max-requests = 200
#harakiri = 60
daemonize=/var/log/httpd/uwsgi-moin.log
目前只是处于起步阶段,所以没有进行详细的调整。如果追求性能,我认为应该进行更多的调整。如果是其他环境,显然需要适当修改chdir和wsgi-file。
当准备好以上事项后,启动uwsgi。
$ /usr/bin/uwsgi --ini /var/lib/moin/uwsgi.ini
使用刚刚设定的uwsgi.ini文件来启动。
httpd.conf的配置
在设定文件的适当位置,以以下方式写入。
ProxyPass /hogehoge uwsgi://127.0.0.1:50000/
如果希望将/hogehoge用作任选内容,或者作为子域名使用,可以按照以下方式操作。当然,有些应用程序可能需要额外配置才能指定子目录(例如在moinmoin中)。
似乎也可以使用unix域套接字,但当我尝试使用时无法成功访问uwsgi。现在想到了也许应该用双引号括起参数,但我现在并不想确认,所以不确定。
另外,最近的Apache已经支持http/2,但是在启用ProxyPass的地方启用http/2时,由于uwsgi不支持http/2,会产生IOError,导致无法正常通信。