如何使用mod_wsgi进行多域https?

时间:2012-09-06 11:53:23

标签: django apache https mod-wsgi

我是开发人员,有点像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>

工作得很漂亮。

1 个答案:

答案 0 :(得分:2)

这包括在:

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive

请参阅显示使用mod_rewrite和应用程序包装器的部分末尾的位来执行SCRIPT_NAME的修正。