抽了点时间把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数据。
item apache+wsgi nginx+uwsgi
Page.execute 1.933 0.807
Page.execute|1 1.808 0.732
Page.execute|2 1.047 0.446
getPageList 0.251 0.014
init 0.048 0.006
load_multi_cfg 0.031 0
run 2.481 0.981
send_page 2.462 0.972
send_page_content 1.938 0.813
send_page_content|1 1.834 0.762
send_page_content|2 1.096 0.501
send_page|1 1.847 0.773
send_page|2 1.119 0.522
total 2.529 0.988
Last modified on 2010-10-26