mod_wsgi是否为每个端口创建解释器
我的开发环境是Windows,这意味着Apache的MPM只能是'winnt'。我发现了一个奇怪的事情:
1。Apache只监听8080端口,我没有设置任何虚拟主机,但在错误日志中,为什么它会为'myhost.com:8080|'和'myhost.com|'创建两个解释器?按理说应该只有8080的那个。
访问日志:
124.237.78.181 - - [20/Dec/2011:16:36:18 +0800] "GET http://www.baidu.com/ HTTP/1.1" 404 29
这个请求会导致Apache创建80个解释器(请注意时间)。我不知道这是什么原因(可能是代理检测?)。不过我可以通过telnet来模拟这个情况。
telnet myhost.com 8080
GET http://www.baidu.com/
错误日志:
[Tue Dec 20 15:50:14 2011] [info] mod_wsgi (pid=1008): Create interpreter 'myhost.com:8080|'.
[Tue Dec 20 15:50:14 2011] [info] mod_wsgi (pid=1008): Adding 'E:/eclipse workspace/SubscriptionServer/src' to path.
[Tue Dec 20 15:50:14 2011] [info] [client 66.220.151.121] mod_wsgi (pid=1008, process='', application='myhost.com:8080|'): Loading WSGI script 'E:/eclipse workspace/SubscriptionServer/src/business/dispatcher.py'.
[Tue Dec 20 16:36:19 2011] [info] mod_wsgi (pid=1008): Create interpreter 'myhost.com|'.
[Tue Dec 20 16:36:19 2011] [info] mod_wsgi (pid=1008): Adding 'E:/eclipse workspace/SubscriptionServer/src' to path.
[Tue Dec 20 16:36:19 2011] [info] [client 124.237.78.181] mod_wsgi (pid=1008, process='', application='myhost.com|'): Loading WSGI script 'E:/eclipse workspace/SubscriptionServer/src/business/dispatcher.py'.
2。当我关闭Apache时,不管它创建了多少个解释器,它只会销毁8080的那个解释器。
[Sun Dec 25 15:49:08 2011] [info] mod_wsgi (pid=4288): Destroying interpreters.
[Sun Dec 25 15:49:08 2011] [info] mod_wsgi (pid=4288): Destroy interpreter 'myhost.com:8080|'.
我想让Apache只创建8080的解释器,我该怎么做呢?
1 个回答
默认情况下,针对80和443端口的请求会在同一个子解释器中处理。而针对其他端口的请求则会在不同的解释器中处理。这一点在mod_wsgi的文档中有说明。
http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIApplicationGroup
至于你为什么会看到两者并存,我就不太清楚了,因为你之前在另一个问题中提到这个时并没有进一步跟进。
其实,StackOverflow并不是解决你配置问题的合适地方。你应该使用mod_wsgi的邮件列表,那里的专家可以指引你找到合适的文档,教你如何在WSGI应用脚本中添加调试信息,以找出与80端口相关的多余请求是从哪里来的。
http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Asking_Your_Questions
文档中很清楚地说明,如果你想要关于mod_wsgi的帮助,最好使用邮件列表,而不是StackOverflow。StackOverflow在调试方面并不靠谱,那里并不是一个讨论论坛,只有在有人知道确切答案时才有用。