我是开发人员,有点像apache新手,我正在尝试将一堆Django https服务器转换为mod_wsgi,之前使用的是mod_python:
<VirtualHost *:443>
ServerName *.example.com
SSLEngine On
SSLCertificateFile /etc/ssl/star_example_com.crt
SSLCertificateKeyFile /etc/ssl/star_example_com.key
SSLCertificateChainFile /etc/ssl/DigiCertCA.crt
UseCanonicalName Off
VirtualDocumentRoot /var/www/%0
<Directory "/var/www/foo.example.com">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE example.foo.settings
PythonPath "['/home/django'] + sys.path"
PythonDebug on
</Directory>
<Directory "/var/www/bar.example.com">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE example.bar.settings
PythonPath "['/home/django'] + sys.path"
PythonDebug on
</Directory>
</VirtualHost>
这允许我们在同一物理服务器(ip)上运行多个https站点。添加新的https主机只需添加新的<Directory>
部分,并在/var/www/
下创建相应的目录。
我最接近的是使用
<Directory "/var/www/bar.example.com">
SetHandler wsgi-script
Options ExecCGI
</Directory>
并创建/var/www/bar.example.com/bar.wsgi
,然后我可以访问https://bar.example.com/bar.wsgi/...rest..of..path..
当目标是文件路径时,我无法找到等同于<Directory>
的指令(可在WSGIScriptAlias
内使用),就像我们用于非https网站一样:
<VirtualHost *:80>
ServerName bar.example.com
WSGIScriptAlias / /home/venv/upgrade/example/bar/bar.wsgi
<Directory "/var/www/bar/">
Order deny,allow
allow from all
</Directory>
</VirtualHost>
这允许我们转到http://bar.example.com/...rest..of..path..
(即没有bar.wsgi
前缀)。
是否可以摆脱https网址中的bar.wsgi
部分?
[解决方案:] (基于@ GrahamDumpleton的链接):
<Directory /var/www/bar.example.com/>
Options ExecCGI Indexes FollowSymlinks
AddHandler wsgi-script .wsgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /bar.wsgi/$1 [QSA,PT,L]
Order allow,deny
Allow from all
</Directory>
工作得很漂亮。
答案 0 :(得分:2)
这包括在:
http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive
请参阅显示使用mod_rewrite和应用程序包装器的部分末尾的位来执行SCRIPT_NAME的修正。