0

我是一名开发人员,有点 apache 新手,我正在尝试将我们的一堆 Django https 服务器转换为以前使用 mod_python 的 mod_wsgi:

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

我找不到与目标是file-path<Directory>时等效的指令(可以在内部使用),就像我们用于非 https 站点一样:WSGIScriptAlias

<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前缀)。

是否可以摆脱bar.wsgihttps url 中的部分?

[解决方案:](基于@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>

效果很好。

4

1 回答 1

2

这包括在:

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

请参阅本节末尾的位,其中显示了使用 mod_rewrite 和应用程序包装器来修复 SCRIPT_NAME。

于 2012-09-07T02:06:17.173 回答