我的开发环境是Windows,这意味着Apache MPM只能'winnt'。在这里,我发现了一件奇怪的事情:
1 即可。 Apache只侦听8080并且我没有设置虚拟主机,但在错误日志中,为什么它为'myhost.com创建了两个解释器:8080 |'和'myhost.com |'?它假设只有8080一个。
access.log:
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/
error.log:
[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解释器,我该怎么做?
答案 0 :(得分:1)
默认情况下,对端口80和443的请求将在同一个子解释器中处理。对任何其他端口的请求在不同的解释器中处理。这在mod_wsgi文档中有记录。
http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIApplicationGroup
至于你为何看到我不知道的原因,因为你在以前在另外的问题中提出这个问题时从未跟进过问题:
Variable will be instantiated more than once
StackOverflow不是试图调试配置导致问题的原因的正确论坛。使用mod_wsgi邮件列表然后可以指向适当的文档,该文档告诉您如何向WSGI应用程序脚本添加调试以确定与端口80关联的虚假请求来自何处。
http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Asking_Your_Questions
文档很清楚,如果你想要mod_wsgi的帮助,你应该总是使用邮件列表而不是StackOverflow。 StackOverflow是调试内容的绝望场所,不是论坛。只有在有人知道确切答案的情况下才有用。