2012-09-06 23 views
0

我是一个开发商和一个有点Apache的新手,我试图转型一堆我们的Django的HTTPS服务器来的mod_wsgi,而此前使用的mod_python:如何使用mod_wsgi进行多域https?

<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> 

这使我们能够运行多个HTTPS站点在相同的物理服务器(IP)上。添加新的https主机只需添加一个新的<Directory>部分,并在/var/www/下创建相应的目录。

我已经得到的最接近的是使用

<Directory "/var/www/bar.example.com"> 
    SetHandler wsgi-script 
    Options ExecCGI 
</Directory> 

,创造/var/www/bar.example.com/bar.wsgi,那么我可以访问的URL像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> 

这使我们可以去​​(即。没有bar.wsgi前缀)。

是否有可能摆脱https url中的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

我没有完全遵循,但是这不是什么VirtualHosts? –

+0

这就是你在非https设置中使用VirtualHosts的原因,是的,但是这对https不起作用,因为SSL握手发生在服务器看到HTTP/1.1主机头之前(因此不知道要提供哪个证书) 。 – thebjorn

+0

这就是为什么SSL您应该有SSL站点的唯一IP。 –

回答

相关问题