参考:
http://wiki.woodpecker.org.cn/moin/NginxuWSGIPublishTrac
俺在公司内部配置发布的记要...
>>
>> tracd 只是测试用的哈,,,没人用这个来正式跑的哪?!
>> + trac 的动态内容看似很多,分析流量才发现 8成都是样式相关的 图片/CSS 什么的:
>> + 建议将/chrome /attachment 目录用 Nginx 静态文件发布并
>> + 我们以前一直用 Lighttpd+fcgi 带trac 的,配置2倍CPU数量的进程
>> 现在俺建议:
>> Nginx 0.8x + uWSGI
>> + Nginx 均衡+静态发布
>> + uWSGI 包装Trac 发布应用
>> + Nginx内置 uWSGI 模块代理发布 Trac 网站
>>
>> 以上,应该可以获得10倍以上的性能提升...
>> 参考:
>> TracModWSGI - The Trac Project
>> http://trac.edgewall.org/wiki/TracModWSGI
>> RunOnNginx - uWSGI
>> http://projects.unbit.it/uwsgi/wiki/RunOnNginx
>> Example - uWSGI
>> http://projects.unbit.it/uwsgi/wiki/Example
>> 配置Nginx+uwsgi更方便地部署python应用 | observer专栏杂记
>> http://obmem.info/?p=703
>
> 先看 http://obmem.info/?p=703
>
> 缺少网站部署知识,看的云里雾里的.
>
> 再到project目录建立myapp.py,使得application调用框架的wsgi接口,比如web.py就是
>
> ......
> app = web.application(urls, globals())
> application = app.wsgifunc()
>
> 我理解下面这句是 用uwsgi启动 myapp,把 myapp更换成为 tracd 吗?
> tracd启动要带参数呢,这下就不理解了.(上面的段落是tracd的配置吗?)
> 然后运行uwsgi监听9090,其中-w后跟模块名,也就是刚才配置的myapp
>
> uwsgi -s :9090 -w myapp
>
> 此文章名为: 配置Nginx+uwsgi更方便地部署python应用
>
> 但是我想知道如何 nginx + uwsgi 部署 tracd的应用.
> 再我眼里看来,tracd就是 httpd.
明白了,你的问题是没有理解 Nginx(或是其它HTTPD)和uWSGI/fcgi/cgi 以及 Trac/Tracd 的关系:
+ Nginx/Lighttpd/Apache/Tracd 都是 HTTPD 用来响应和解析 HTML 请求
+ Trac 是应用系统
+ WSGI/cgi/scgi/fcgi 是Web应用接口标准,本身没有什么代码,只是文档
+ uWSGI 是内置 WSGI 接口的全部精巧 HTTPD
+ mod_wsgi 是Nginx 天才的率先内置的 WSGI 接口,可以直接吃入吻合 WSGI 标准的应用响应
所以,
Nginx+mod_wsgi+uWSGI 发布 Trac
比
Lighttpd+fast-cgi swap+fast-cgi agent 发布 Trac 要少一级,所以,效率要高
又比:
Apache+mod_proxy+Tracd 发布 Trac 要高效一些,因为 Tracd 是纯Py 实现的HTTPD 效率比C实现的的确要差点儿...
但是不论哪种形式发布,都有个问题:
- Trac 本身要将 传票/维基等等中的 CSS/JS/图片,动态吐给 HTTPS
- 而且,这种静态文件的读取/输出,本身也不是 Py 的强项
- 統計上看,这种静态数据的动态输出量很大,占到整个 Trac 应用流量的 70% 左右!
所以,建议,对以下几个URL进行静态发布,以 Nginx 配置为示意:
location /trac/chrome {
alias /path/2/trac_chrome/htdocs/;
autoindex off;
}
location /trac/raw-attachment {
alias /path/2/trac/attachments/;
autoindex off;
}
location /trac/pygments {
alias /path/2/pygments;
autoindex off;
}
>
> 我来描述下我的应用吧.
> 我有两台机器.
> 一台机器是公司的 trac+svn. 是使用apache来做的.
> /etc/httpd/conf.d/trac.conf
> ......
> <Location /trac>
> SetHandler mod_python
> PythonHandler trac.web.modpython_frontend
> PythonInterpreter main_interpreter
> PythonOption TracEnvParentDir /var/scm/trac/
> PythonOption TracUriRoot /trac
> ..........
> 这种配置,但是我发现个问题,在我用trac中diff 一个100多k的源码中,发现
> tracd的CPU利用率及高,完毕后我再次diff这个文件,cpu还是及高,
> 所以我觉得 这个apache并没有给我带来多少性能的提升.
> 这是我在公司布置的机器,没性能就没性能吧,反正我不为了性能骂街,基本就没人了.我忍了.
> 但是我再米国买的VPS是 trac+subversion,没有采用apache.
> 我不想用apache,所以一直再用tracd来做应用,几个人连续提交几个ticket感觉要砸鼠标.... 启动方法 nohup tracd --port
> 8000 88f6281
> --basic-auth=*,/home/trac/ddnas-88f6281/trac/88f6281/conf/trac_passwd,* &
> stunnel /etc/stunnel/stunnel-tracd.conf 很土鳖吧....哈哈哈!!
> 今天终于忍无可忍的要弄下. 我看不懂 Nginx 0.8x + uWSGI , 尝试了下 Lighttpd+fcgi
> ,没有成功(关于lighttpd我也有个小问题,不过为了你说的性能,我觉得还是把 Nginx 0.8x + uWSGI
> 搞定了再去追lighttpd的问题)。
Lighttpd的fcgi 作得很好,很干净,我们也用这种方式跑了几年几十个 Trac,从来没有出过问题;
只是初期,没有将 sqlite 迁移到 pg 时,不时有 sqlite 锁死的现象;
然而去年, BDB 和 sqlite 深度合作后,并发响应的问题,估计也可以解决了,使用 sqlite 也更加没有问题了
> ( 先忽略我的这个问题,:) ,我还是先描述出来比较好.
> 我trac-admin 后的目录里面并没有trac.fcgi的东西,
> 而通过 KSPEG}LJ}廖杰/-2234 兄弟
> 1. 提取静态文件的方法:
> trac-admin /path/to/trac deploy /path/to/nginx/static
> 可以把trac和所有插件要用到的静态文件提取到指定目录。
>
> 2. attachment需要额外配置成静态文件发布。)
>
--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
开: http://code.ijinshan.com/
豆: http://www.douban.com/group/zoomquiet
书: http://code.google.com/p/openbookproject
蟒: http://code.google.com/p/kcpycamp/wiki/PythoniCamp
按照 http://wiki.woodpecker.org.cn/moin/NginxuWSGIPublishTrac
的方法.
菜鸟一只,请大家多帮忙.谢谢了.
先 解决 2 生成所有依赖目录信息:
要注意python的缩进. 要 table在 print "pythonpath=%s"%i
然后
运行 uWSGI 守护: 我是拿普通用户权限运行的. 我 uwsgi.ini配置如下:
[uwsgi]
uid=trac
gid=trac
socket=/home/trac/ddnas-88f6281/trac/tracs/cgi-bin/trac.sock
processes=5
pidfile=/home/trac/ddnas-88f6281/trac/tracs/cgi-bin/trac.uwsgi.pid
wsgi-file=/home/trac/ddnas-88f6281/trac/tracs/cgi-bintrac.wsgi
chmod-socket=666
harakiri=30
disable-logging=true
master=true
memory-report=true
profiler=true
single-interpreter=true //删除了这句,还是 报 2528那行 的错误
pythonpath=/usr/lib/python2.6/site-packages/flup-1.0.3.dev_20100525-
py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/docutils-0.7-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/epydoc-3.0.1-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/supervisor-3.0a9-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/meld3-0.6.7-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/Pygments-1.4-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/pytz-2010o-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/simplejson-2.1.2-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/Genshi-0.6-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/Babel-0.9.5-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/Trac-0.12.1-py2.6.egg
pythonpath=/usr/lib/python2.6/site-packages/chardet-1.0.1-py2.6.egg
pythonpath=/usr/lib/python26.zip
pythonpath=/usr/lib/python2.6
pythonpath=/usr/lib/python2.6/plat-linux2
pythonpath=/usr/lib/python2.6/lib-tk
pythonpath=/usr/lib/python2.6/lib-old
pythonpath=/usr/lib/python2.6/lib-dynload
pythonpath=/usr/lib/python2.6/site-packages
pythonpath=/usr/lib/python2.6/site-packages
uwsgi --ini uwsgi.ini -d log
trac@lueluevpn2:~/ddnas-88f6281/trac/tracs/cgi-bin [trac@lueluevpn2
cgi-bin]$ cat log
*** Starting uWSGI 0.9.6.5 (32bit) on [Sat Jan 8 05:33:57 2011] ***
compiled with version: 4.1.2 20080704 (Red Hat 4.1.2-48)
Python version: 2.6.5 (r265:79063, Jun 4 2010, 21:43:07)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)]
writing pidfile to /home/trac/ddnas-88f6281/trac/tracs/cgi-bin/
trac.uwsgi.pid
your memory page size is 4096 bytes
*** WARNING: you have enabled harakiri without post buffering. Slow
upload could be rejected on post-unbuffered webservers ***
allocated 412 bytes (0 KB) for 1 request's buffer.
binding on UNIX socket: /home/trac/ddnas-88f6281/trac/tracs/cgi-bin/
trac.sock
your server socket listen backlog is limited to 64 connections
added /usr/lib/python2.6/site-packages/flup-1.0.3.dev_20100525-
py2.6.egg to pythonpath.
added /usr/lib/python2.6/site-packages/docutils-0.7-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/epydoc-3.0.1-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/supervisor-3.0a9-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/meld3-0.6.7-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/Pygments-1.4-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/pytz-2010o-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/simplejson-2.1.2-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/Genshi-0.6-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/Babel-0.9.5-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/Trac-0.12.1-py2.6.egg to
pythonpath.
added /usr/lib/python2.6/site-packages/chardet-1.0.1-py2.6.egg to
pythonpath.
added /usr/lib/python26.zip to pythonpath.
added /usr/lib/python2.6 to pythonpath.
added /usr/lib/python2.6/plat-linux2 to pythonpath.
added /usr/lib/python2.6/lib-tk to pythonpath.
added /usr/lib/python2.6/lib-old to pythonpath.
added /usr/lib/python2.6/lib-dynload to pythonpath.
added /usr/lib/python2.6/site-packages to pythonpath.
added /usr/lib/python2.6/site-packages to pythonpath.
initializing hooks...done.
fopen(): No such file or directory [uwsgi.c line 2528]
=====================================================
=====================================================
http://projects.unbit.it/uwsgi/browser/uwsgi.c?rev=253:a9913cdc2427
2528的代码如下所示,我是搞不明白到底什么意思.
2505 void manage_opt(int i, char *optarg) {
2506
2507 switch (i) {
2508 #ifndef UNBIT
2509 case LONG_ARGS_PIDFILE:
2510 uwsgi.pidfile = optarg;
2511 break;
2512 case LONG_ARGS_UDP:
2513 uwsgi.udp_socket = optarg;
2514 uwsgi.master_process = 1;
2515 break;
2516 case LONG_ARGS_CHROOT:
2517 uwsgi.chroot = optarg;
2518 break;
2519 case LONG_ARGS_GID:
2520 uwsgi.gid = atoi (optarg);
2521 break;
2522 case LONG_ARGS_UID:
2523 uwsgi.uid = atoi (optarg);
2524 break;
2525 case LONG_ARGS_BINARY_PATH:
2526 uwsgi.binary_path = optarg;
2527 break;
2528 case LONG_ARGS_WSGI_FILE:
2529 uwsgi.single_interpreter = 1;
2530 uwsgi.wsgi_file = optarg;
2531 break;
On Jan 7, 3:44 pm, "Zoom.Quiet" <zoom.qu...@gmail.com> wrote:
> 在 2011年1月7日 下午3:26,sniperpr <snipe...@gmail.com> 写道:
>
> > 10年12月16日我发了个mail,标题是 对 Trac熟悉的哥们进来.请教一个关于性能方面的问题.
>
>
嗯嗯嗯,那一段是因为俺们的主机被无数SA 安裝过无数Py 版本,完全无法自动加载正确的模块了,
所以,才给出这种极端的配置来,
一般是不需要的,按照官方的建议配置先跑起来就好 ;-)
> --
> 邮件来自: Google 论坛“TraChinese”论坛。
> 发言: trach...@googlegroups.com
> 退订: trachinese-...@googlegroups.com
> 详细: http://groups.google.com/group/trachinese
> 工程: http://trac-hacks.org/wiki/TracChineseTranslation
socket 文件的权限问题?
不是吧,以前从来没有用 非 tracd 的方式发布过?
- 那么,用 lighttpd 带 fast-cgi 也很足够用的
- uWSGI 是个全新的 httpd ,不知道是否你编译的那个版本有小问题...
> 如果还不行,我就按照example来做.
> 还不行,把ssh交给你看下....... 只要求救大牛了...
这个,,,实在太危险了哪,,,最好是自个儿重新摸明白,比什么都靠谱 ;-)
>
> 在 2011年1月9日 上午12:27,Zoom.Quiet <zoom....@gmail.com>写道:
>>
>> 在 2011年1月9日 上午12:15,sniperpr <snip...@gmail.com> 写道:
>> > 是的,我精简到了 只剩下trac.但是我没搞定
>> > uwsgi --ini conf.ini -d log
>> > .........
>> > initializing hooks...done.
>> > fopen(): No such file or directory [uwsgi.c line 2528]
>>
>> socket 文件的权限问题?
>>
...
祝好运!
> 1 认证问题.
> 2 uwsgi+ NGINX 发布问题。 (静态发布)
>
> 问题 一
> 认证问题,我使用 htpass来创建密码.
htpasswd 命令哈,这是标准作法,但是仔细看文档,得用 指定的hash 算法的 ;-)
否则 Trac 不认识的,,,
> 登录即要认证,然而密码肯定正确,但是提示 . 而我用fastcgi发布的时候,也是这个样子.
> 但奇怪的是,我用fastcgi发布的时候,取消了密码认证,然后我刷新浏览器,竟然是登录为 admin(之前我输入admin为登录).
用 FF 的话,会记录之前认证的 cookie 的
> http://76.164.225.196/ 为我的页面地址,请点击看看。
最好有 域名绑定,因为是 VPN 服务,有太多应用在同一IP 中,不知道是否会有错乱现象?
>
> 500 Internal Server Error
一般 500 是Trac 本身崩潰了,否则应该是一个友好的认证失败的报告页面的 ;-)
>
> 问题 二
> 我已经正常填写了正确的发布地址,为何页面显示不全面?
> 我用fastcgi发布,就能够正常.
> 为何uwsgi不行呢? 配置文件在底部.
>
> server {
> listen 80;
> server_name trac.example.com;
> root /home/trac/ddnas88f6281/trac;
>
> location / {
> auth_basic "AUTH";
> auth_basic_user_file /home/trac/ddnas88f6281/auth/trac_passwd;
> include uwsgi_params;
> uwsgi_pass 127.0.0.1:9001;
建议使用 文件socket 方式,以便减少网卡的I/O
> uwsgi_param SCRIPT_NAME /;
> uwsgi_modifier1 30;
> }
明显的,你想发布 trac 为:
http://76.164.225.196/trac
所以,因为如下进行配置
location / {
root /data/app/www/;
index index.html index.php;
autoindex off;
if ($request_uri ~ "^\/?$") {
rewrite ^(.*) /trac redirect;
}
}
location /trac {
...
}
如果要发布 trac 为: http://76.164.225.196/
那么,以下的静态就都要发布成:
location /chrome
location /raw-attachment
location /pygments
...
可以看一下首页 trac 解析出的 html 就知道静态资源目录应该发布成什么路径了...
> location /trac/chrome/ {
> alias /home/trac/ddnas88f6281/tracs/htdocs/;
这里是否是完整的trac 实例的 html 资源目录?
> autoindex off;
> }
> location /trac/raw-attachment {
> alias /home/trac/ddnas88f6281/trac/attachments/;
> autoindex off;
> }
> location /trac/pygments {
> alias /home/trac/ddnas88f6281/trac/pygments;
> autoindex off;
> }
> }
> uwsgi.ini
> uid=root
> gid=root
> #socket=/home/trac/ddnas88f6281/tracs/trac.sock
> socket = 127.0.0.1:9001
> processes=2
> pidfile=/home/trac/ddnas88f6281/tracs/trac.uwsgi.pid
> wsgi-file=/home/trac/ddnas88f6281/tracs/cgi-bin/trac.wsgi
> chmod-socket=666
> harakiri=30
> disable-logging=true
> master=true
> memory-report=true
> profiler=true
> single-interpreter=true
有条件的话,使用 viretualenv 来部署你的Trac 吧,
方便以后的升迁,备份,测试,,,
> pythonpath=/usr/local/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg
> pythonpath=/usr/local/lib/python2.6/site-packages/Babel-0.9.5-py2.6.egg
> pythonpath=/usr/local/lib/python2.6/site-packages/Genshi-0.6-py2.6.egg
> pythonpath=/usr/local/lib/python2.6/site-packages/Trac-0.12.1-py2.6.egg
> pythonpath=/usr/local/lib/python2.6/site-packages/supervisor-3.0a9-py2.6.egg
> pythonpath=/usr/local/lib/python2.6/site-packages/meld3-0.6.7-py2.6.egg
> pythonpath=/usr/local/lib/python2.6/site-packages/virtualenv-1.5.1-py2.6.egg
> pythonpath=/usr/local/lib/python2.6/site-packages/TracGit-0.12.0.5dev-py2.6.egg
> pythonpath=/usr/local/lib/python26.zip
> pythonpath=/usr/local/lib/python2.6
> pythonpath=/usr/local/lib/python2.6/plat-linux2
> pythonpath=/usr/local/lib/python2.6/lib-tk
--
在 2011年1月13日 上午11:24,sniperpr <snip...@gmail.com> 写道:
...
>> > 1 认证问题.
>> > 2 uwsgi+ NGINX 发布问题。 (静态发布)
>> >
>> > 问题 一
>> > 认证问题,我使用 htpass来创建密码.
>> htpasswd 命令哈,这是标准作法,但是仔细看文档,得用 指定的hash 算法的 ;-)
>> 否则 Trac 不认识的,,,
>
> 我用tracd发布时候就用这个加密方式,我是让htpasswd默认生成,应该就是hash.
> 刚才我又尝试其他加密算法,还是依旧问题.
那应该就是配置文件,以及口令文件的权限问题了,
你得确保 httpd 运行的用户权限可以读写这个口令文件 ;-)
...
>> >
>> > 500 Internal Server Error
>> 一般 500 是Trac 本身崩潰了,否则应该是一个友好的认证失败的报告页面的 ;-)
>>
> 完全新手部署网页,连404都不太熟悉如何搞.... 我补下相关知识.
这个和 html 协议没有关系吧, 500 就是说应用服务挂了
...
>> > 问题 二
>> > 我已经正常填写了正确的发布地址,为何页面显示不全面?
>> > 我用fastcgi发布,就能够正常.
>> > 为何uwsgi不行呢? 配置文件在底部.
>> >
>> > server {
>> > listen 80;
>> > server_name trac.example.com;
>> > root /home/trac/ddnas88f6281/trac;
>> >
>> > location / {
>> > auth_basic "AUTH";
>> > auth_basic_user_file
>> > /home/trac/ddnas88f6281/auth/trac_passwd;
>> > include uwsgi_params;
>> > uwsgi_pass 127.0.0.1:9001;
>> 建议使用 文件socket 方式,以便减少网卡的I/O
>
> copy,我是先拿这个做测试,等正常工作再来.
>
>>
>> > uwsgi_param SCRIPT_NAME /;
>> > uwsgi_modifier1 30;
>> > }
>> 明显的,你想发布 trac 为:
>> http://76.164.225.196/trac
>> 所以,因为如下进行配置
>> location / {
>> root /data/app/www/;
>> index index.html index.php;
>> autoindex off;
>> if ($request_uri ~ "^\/?$") {
>> rewrite ^(.*) /trac redirect;
>
> 重定向 我理解,但是
> loation /trac {
> 。。。。。 这个是什么东东?里面放什么?
根据你的网站发布规划哪, 最终用户访问的 trac 如果是:
http://76.164.225.196/trac
那么 loation /trac { 就应该是真正的 Trac 应用发布的配置
> 放这些吗? include uwsgi_params;
> uwsgi_pass 127.0.0.1:9001;
> uwsgi_param SCRIPT_NAME /;
> uwsgi_modifier1 30;
> {
>
>>
>> }
>> }
>> location /trac {
>> ...
>> }
>> 如果要发布 trac 为: http://76.164.225.196/
>> 那么,以下的静态就都要发布成:
>> location /chrome
>> location /raw-attachment
>> location /pygments
>> ...
>>
>> 可以看一下首页 trac 解析出的 html 就知道静态资源目录应该发布成什么路径了...
>>
> 我用tracd 看看.
>
>>
>> > location /trac/chrome/ {
>> > alias /home/trac/ddnas88f6281/tracs/htdocs/;
>> 这里是否是完整的trac 实例的 html 资源目录?
>
> 是完整的资源.
>
>>
>> > autoindex off;
>> > }
>> > location /trac/raw-attachment {
>> > alias /home/trac/ddnas88f6281/trac/attachments/;
>> > autoindex off;
>> > }
>> > location /trac/pygments {
>> > alias /home/trac/ddnas88f6281/trac/pygments;
>> > autoindex off;
>> > }
>> > }
>>
>> > uwsgi.ini
...
>> 有条件的话,使用 viretualenv 来部署你的Trac 吧,
>> 方便以后的升迁,备份,测试,,,
>>
> 恩,放入日程中. :)
> 我是无论输入正确的密码还是错误的密码,都会有个 500 Internal Server Error.
要真正明白 500 是什么意思,
- 在出错后,用 ps 搜索一下,相关的 tracd/uWSGI 进程是否还存活?
- 出错后,立即回到首页,是否依然是 500 ?
>
>> >> >
>> >> > 500 Internal Server Error
>> >> 一般 500 是Trac 本身崩潰了,否则应该是一个友好的认证失败的报告页面的 ;-)
>> >>
>> > 完全新手部署网页,连404都不太熟悉如何搞.... 我补下相关知识.
>> 这个和 html 协议没有关系吧, 500 就是说应用服务挂了
>>
...
在 2011年1月13日 上午11:41,sniperpr <snip...@gmail.com> 写道:
再次提醒哪! 请回复到列表中,以便接收更加广泛的建议 ;-)
>>
>> >> > 2 uwsgi+ NGINX 发布问题。 (静态发布)
>> >> >- 呃,,,你得理解不论你的习惯是否好, Nginx 的习惯是好的哪!
>> >> > 问题 一
>> >> > 认证问题,我使用 htpass来创建密码.
>> >> htpasswd 命令哈,这是标准作法,但是仔细看文档,得用 指定的hash 算法的 ;-)
>> >> 否则 Trac 不认识的,,,
>> >
>> > 我用tracd发布时候就用这个加密方式,我是让htpasswd默认生成,应该就是hash.
>> > 刚才我又尝试其他加密算法,还是依旧问题.
>> 那应该就是配置文件,以及口令文件的权限问题了,
>> 你得确保 httpd 运行的用户权限可以读写这个口令文件 ;-)
>> ...
>>
> 肯定是有权限的,我是root,我承认,我再服务问题上习惯不好. :)
一般编译时建议将 Nginx 的运行期 user 指定为 www
所以,不是你的权限如何,而是 uWSGI/trac/nginx 运行起来后,相关的文件/目录,是否允许它们来读写?!
> 我是无论输入正确的密码还是错误的密码,都会有个 500 Internal Server Error.要真正明白 500 是什么意思,
- 在出错后,用 ps 搜索一下,相关的 tracd/uWSGI 进程是否还存活?
- 出错后,立即回到首页,是否依然是 500 ?
>
>> >> >
>> >> > 500 Internal Server Error
>> >> 一般 500 是Trac 本身崩潰了,否则应该是一个友好的认证失败的报告页面的 ;-)
>> >>
>> > 完全新手部署网页,连404都不太熟悉如何搞.... 我补下相关知识.
>> 这个和 html 协议没有关系吧, 500 就是说应用服务挂了
>>
在gmail 中使用 a 就好 ;-)
>>
>> >> 在 2011年1月13日 上午11:24,sniperpr <snip...@gmail.com> 写道:
>> >> ...
>> >> >> > 1 认证问题.
> 解决nginx认证,但是 trac的认证还不清楚概念.
>
嗯嗯嗯有进展就好,记得记录下来blog /wiki 分享哪!
>>
>> >> >> > 2 uwsgi+ NGINX 发布问题。 (静态发布)
>
> 解决发布问题.稍候奉上完整版本.
嗯嗯嗯,这个其实就是网站的部署理解,和配置文件无关;-)
Nginx 的配置很精简的,关键是自个儿要想明白要发布成什么样儿
...
>> >> >> > 认证问题,我使用 htpass来创建密码.
>> >> >> htpasswd 命令哈,这是标准作法,但是仔细看文档,得用 指定的hash 算法的 ;-)
>> >> >> 否则 Trac 不认识的,,,
>> >> >
>> >> > 我用tracd发布时候就用这个加密方式,我是让htpasswd默认生成,应该就是hash.
>> >> > 刚才我又尝试其他加密算法,还是依旧问题.
>> >> 那应该就是配置文件,以及口令文件的权限问题了,
>> >> 你得确保 httpd 运行的用户权限可以读写这个口令文件 ;-)
>> >> ...
>> >>
>> > 肯定是有权限的,我是root,我承认,我再服务问题上习惯不好. :)
>> - 呃,,,你得理解不论你的习惯是否好, Nginx 的习惯是好的哪!
>> 一般编译时建议将 Nginx 的运行期 user 指定为 www
>> 所以,不是你的权限如何,而是 uWSGI/trac/nginx 运行起来后,相关的文件/目录,是否允许它们来读写?!
>>
> 确实是权限问题 。我tall error.log后发现 提示没有权限.
> 怪我自己不仔细,nginx的 conf文件 是 nginx权限运行,肯定读不了 passwd(root权限).
>
>>
>> > 我是无论输入正确的密码还是错误的密码,都会有个 500 Internal Server Error.
>> 要真正明白 500 是什么意思,
>> - 在出错后,用 ps 搜索一下,相关的 tracd/uWSGI 进程是否还存活?
>> - 出错后,立即回到首页,是否依然是 500 ?
>>
> tracd ? 我没运行 tracd ,我只运行了 /usr/local/nginx/sbin/nginx ,uwsgi --ini
> uwsgi.ini -d log
> 这个500错误是由 passwd认证问题引起. 多看log,多看log... 基本的规则我都没搞明白!唉!!!
俺是说,可以先用 tracd 来快速进行调试,都KO 了,再用 Nginx 正式发布;
以免各种问题纠结在一起,阻碍问题的追踪...
...
> 前几天刚玩的时候,把404搞成和 推特的 鲸鱼界面一样了.....呵呵....
>>
咔咔咔,这也是 Nginx 有爱的地方哪,本身支持协议的自动转发指定页面的 ;-)
在 2011年1月13日 下午4:23,sniperpr <snip...@gmail.com> 写道:
>> 在 2011年1月13日 上午11:41,sniperpr <snip...@gmail.com> 写道:在gmail 中使用 a 就好 ;-)
>> 再次提醒哪! 请回复到列表中,以便接收更加广泛的建议 ;-)
> COPY,这个习惯我要建立起来.
>>嗯嗯嗯有进展就好,记得记录下来blog /wiki 分享哪!
>> >> 在 2011年1月13日 上午11:24,sniperpr <snip...@gmail.com> 写道:
>> >> ...
>> >> >> > 1 认证问题.
> 解决nginx认证,但是 trac的认证还不清楚概念.
>
>>嗯嗯嗯,这个其实就是网站的部署理解,和配置文件无关;-)
>> >> >> > 2 uwsgi+ NGINX 发布问题。 (静态发布)
>
> 解决发布问题.稍候奉上完整版本.
Nginx 的配置很精简的,关键是自个儿要想明白要发布成什么样儿
...
>> >> >> > 认证问题,我使用 htpass来创建密码.俺是说,可以先用 tracd 来快速进行调试,都KO 了,再用 Nginx 正式发布;
>> >> >> htpasswd 命令哈,这是标准作法,但是仔细看文档,得用 指定的hash 算法的 ;-)
>> >> >> 否则 Trac 不认识的,,,
>> >> >
>> >> > 我用tracd发布时候就用这个加密方式,我是让htpasswd默认生成,应该就是hash.
>> >> > 刚才我又尝试其他加密算法,还是依旧问题.
>> >> 那应该就是配置文件,以及口令文件的权限问题了,
>> >> 你得确保 httpd 运行的用户权限可以读写这个口令文件 ;-)
>> >> ...
>> >>
>> > 肯定是有权限的,我是root,我承认,我再服务问题上习惯不好. :)
>> - 呃,,,你得理解不论你的习惯是否好, Nginx 的习惯是好的哪!
>> 一般编译时建议将 Nginx 的运行期 user 指定为 www
>> 所以,不是你的权限如何,而是 uWSGI/trac/nginx 运行起来后,相关的文件/目录,是否允许它们来读写?!
>>
> 确实是权限问题 。我tall error.log后发现 提示没有权限.
> 怪我自己不仔细,nginx的 conf文件 是 nginx权限运行,肯定读不了 passwd(root权限).
>
>>
>> > 我是无论输入正确的密码还是错误的密码,都会有个 500 Internal Server Error.
>> 要真正明白 500 是什么意思,
>> - 在出错后,用 ps 搜索一下,相关的 tracd/uWSGI 进程是否还存活?
>> - 出错后,立即回到首页,是否依然是 500 ?
>>
> tracd ? 我没运行 tracd ,我只运行了 /usr/local/nginx/sbin/nginx ,uwsgi --ini
> uwsgi.ini -d log
> 这个500错误是由 passwd认证问题引起. 多看log,多看log... 基本的规则我都没搞明白!唉!!!
以免各种问题纠结在一起,阻碍问题的追踪...
...
> #location /login {
> # alias /home/trac/ddnas88f6281/trac/login;
FT! 这个文件或是目录有嘛?
- 用户访问的URL
- Nginx 发布的URL
- Trac 发布的URL
以上3个是完全的不同对象,表任意指代哪...
这里参考官方文档就好 ;-)
http://trac.edgewall.org/wiki/TracModWSGI
> # auth_basic "trac realm";
> # auth_basic_user_file /home/trac/ddnas88f6281/auth/trac_passwd;
> # autoindex off;
> #}
<Location "/trac/login"> AuthType Basic AuthName "Trac" AuthUserFile /somewhere/trac.htpasswd Require valid-user </Location>
TracGuide — Trac用户及管理员指南
> 则没有 error
> 可是我trac和 passwd文件的用户名是对称的阿.
...