我有以下 Apache 配置。每个端口上有以下服务:
8022 - Apache。测试端口,长期来看将是端口 80。
8002 -西地那非,一个位于许多其他服务前端的主题代理。
8202 -追踪,基于 Python 的错误跟踪器,这是 xdv 需要置于其前面的服务之一,因此将其分离。
8082 -克隆CMS。未在 apache 中显示。XDV 将请求代理给它。
这个想法是,所有请求都通过 Apache(8022)通过 xdv 代理(8002)发送,该代理将主题应用于每个内容源(8082 和 8202)
然而,我注意到在测试期间,如果我通过 8202 访问 Trac 站点,8022 站点将会出现错误,RuntimeError: instance.__dict__ not accessible in restricted mode
并且在 Apache 重新启动之前不会再工作。无论 8022 是否出现错误或被访问,8202 仍然可以工作。
这似乎与这个 Trac 错误。但是我没有使用 mod_python 并且 WSGIProcessGroup 和 WSGIApplicationGroup 是相同的值。
为什么会发生这种情况?有没有更好的方法来设置 Apache?即 wsgi 元素?
在之前的迭代中,此设置位于 8022 主机内,但这意味着它也从此端口提供服务并避免了代理
<VirtualHost foo.bar.com:8022>
ServerName foo.bar.com
ServerAlias foo.bar.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^/(.*) http://0.0.0.0:8002/$1 [P]
</VirtualHost>
<VirtualHost foo.bar.com:8202>
ServerName foo.bar.com
ServerAlias foo.bar.com
<Directory "/home/web/foo/parts/trac/tracwsgi/cgi-bin">
WSGIDaemonProcess trac stack-size=524288 python-path=/usr/lib/python2.5/site-packages
WSGIScriptAlias /trac /home/web/foo/parts/trac/tracwsgi/cgi-bin/trac.wsgi
WSGIProcessGroup %{GLOBAL}
WSGIApplicationGroup %{GLOBAL}
Options +Indexes FollowSymLinks
AllowOverride None
Allow from all
Order allow,deny
</Directory>
<Location "/trac">
AuthBasicProvider ldap
AuthType Basic
AuthzLDAPAuthoritative off
AuthName "Login"
AuthLDAPURL "ldap://127.0.0.1:389/dc=foo-bar,dc=org?uid"
AuthLDAPBindDN "cn=admin, dc=foo-bar, dc=org"
AuthLDAPBindPassword secretword
require valid-user
</Location>
</VirtualHost>
答案1
首先,你应该具备:
WSGIProcessGroup trac
而不是像您那样的 %{GLOBAL}。
您拥有它的方式仍然以嵌入模式运行,并且一些其他 Apache 模块或嵌入式 WSGI 应用程序可能会产生干扰。