我是一个开发商和一个有点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>
精美的作品。
我没有完全遵循,但是这不是什么VirtualHosts? –
这就是你在非https设置中使用VirtualHosts的原因,是的,但是这对https不起作用,因为SSL握手发生在服务器看到HTTP/1.1主机头之前(因此不知道要提供哪个证书) 。 – thebjorn
这就是为什么SSL您应该有SSL站点的唯一IP。 –