用uwsgi和nginx来跑moinmoin
抽了点时间把Woodpecker的wiki放到了uWSGI和Nginx下来了,中间有一个小地方折腾了我好几趟,所以记一下。安装之类的就不说了。
在Nginx里配置了uwsgi_pass之后,访问wiki一直会多带过去/moin这个url_prefix,所以默认的设置对于wiki放在根下的人来说可能什么都不用动。我以为是uwsgi处理的时候是把/moin也当成一个页来处理的。所以就想着把/moin从$request_uri里直接拿掉,把后面的部分传给uwsgi。
if ( $request_uri ~ ^/moin(.*)?) {
set $wiki_uri $1;
}
uwsgi_param REQUEST_URI $wiki_uri;这条路不通啊。中间还试过其他的参数,跳开不说了,最后在uWSGI的wiki:RunOnNginx里有一句关键的话
The WSGI standard says that the SCRIPT_NAME is the var used to select a specific application. The “uwsgi_modifier1 30” option set the UWSGI_MODIFIER_MANAGE_PATH_INFO. This per-request modifier instructs the uWSGI server to rewrite the PATH_INFO value removing the SCRIPT_NAME from it.
所以直接在Nginx的conf里这样写
uwsgi_param SCRIPT_NAME /moin;
uwsgi_pass unix:///tmp/woodpecker.moin.sock;
uwsgi_modifier1 30;就可以了。这三句应该和Apache里的 WSGIScriptAlias /moin/ /path/to/moin.wsgi是一致的。
uWSGI的性能看起来不错,不过我还没有做什么测试,也没有数据佐证,凭感觉说一下而已。Nginx的文档里什么也没留下来,这一点很不好。不过Nginx的文档一直很烂。
Updating: 抽出了点时间看了一下,大概比apache+mod_wsgi快了1.5倍以上。下面是Moinmoin的timer数据。
|
|
在线阅读本文 Guixing's Jail https://blog.khsing.net/2010/10/run-moinmoin-under-uwsgi-and-nginx.html