У меня указанная ниже конфигурация Apache. На каждом порту есть следующие службы:
8022 - Apache. Тестируем порт, в конечном итоге это будет порт 80.
8002 - XDV, прокси-сервер для создания тем, который находится перед рядом других служб.
8202 - Trac, Трекер ошибок на основе Python, который является одной из служб, перед которыми должен располагаться xdv, отсюда и разделение.
8082 - Plone CMS. Не отображается в apache. XDV отправляет ему запросы.
Идея состоит в том, что все запросы поступают через Apache (8022) через прокси xdv (8002), который применяет тему к каждому из источников контента (8082 и 8202)
Однако я заметил, что во время тестирования, если я захожу на сайт Trac через 8202, на сайте 8022 появляется ошибка RuntimeError: instance.__dict__ not accessible in restricted mode
и не будет работать, пока не будет перезапущен Apache. 8202 по-прежнему работает независимо от того, является ли 8022 ошибочным или выполняется доступ.
Это похоже на эта ошибка 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>
Для начала вам понадобится:
WSGIProcessGroup trac
а не% {GLOBAL}, как у вас.
То, как оно у вас есть, все еще работает во встроенном режиме, и некоторые другие модули Apache или встроенное приложение WSGI могут мешать.