如何使django呈现默认主页而不是apache

时间:2017-09-28 15:48:58

标签: django apache mod-wsgi

众所周知,在通过Web Explorer发出具有唯一IP或服务器名称的请求后,apache会将其默认静态主页返回给资源管理器。我使用django和apache和mod_wsgi来部署我的站点(即apache web服务器上的django app)。如何将处理路由到views.py中定义的django映射规则,以便在我向运行apache的服务器发出请求时动态生成该站点的主页(即索引页)?提前谢谢!

我在主Apache' httpd.conf'中添加了以下配置:

<VirtualHost 127.0.0.1:80>

    ServerName 127.0.0.1
    ServerAlias example.com
    ServerAdmin webmaster@example.com

    DocumentRoot /usr/local/www/documents

    Alias /robots.txt /usr/local/www/documents/robots.txt
    Alias /favicon.ico /usr/local/www/documents/favicon.ico

    Alias /media/ /usr/local/www/documents/media/

    <Directory /usr/local/www/documents>
    Require all granted
    </Directory>

    WSGIDaemonProcess 127.0.0.1 processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup 127.0.0.1

    WSGIScriptAlias / /usr/local/www/wsgi-scripts/myapp.wsgi

    <Directory /usr/local/www/wsgi-scripts>
    Order allow,deny
    Allow from all
    </Directory>

</VirtualHost>

myapp.wsgi中的代码:

def application(environ, start_response):
    status = '200 OK'
    output = b'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

然后我发布了127.0.0.1,浏览器显示“它有效!”这是apache生成的默认页面,而不是我想要的&#39; Hello world!&#39;在这种情况下返回。我只是想在刚刚发布IP或站点地址时,生成默认主页的工作直接委托给django来动态处理而不是通过Apache返回静态index.html。虽然我配置了WSGIScriptAlias / /usr/local/www/wsgi-scripts/myapp.wsgi,但这似乎仍无效。

1 个答案:

答案 0 :(得分:0)

对于127.0.0.1,虚拟主机不能以这种方式工作,因为它有点特殊。除非那是您配置中唯一的VirtualHost,否则将会发生的事情是Apache将回退到使用它找到的第一个VirtualHost定义,通常是默认站点。

通常你会有:

<VirtualHost *:80>
    ServerName my.fqdn.host.name
    ...
</VirtualHost>

也就是说,VirtualHost指令和ServerName中没有IP是URL中显示的实际主机名,而不是IP地址。

VirtualHost中是否有httpd.conf或包括extra/httpd-vhosts.conf在内是否包含VirtualHost会导致NotificationCenter取代此{?}}?