在Apache2服务器上使用WSGI部署Django应用程序出错

时间:2015-12-24 12:05:41

标签: python django apache2 django-wsgi django-deployment

我正在尝试使用Ubuntu在Apache2服务器上设置Django应用程序。 我使用以下教程来完成基本要素 https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-ubuntu-14-04

我也使用了以下解决方案,但它对我不起作用 Django (wsgi) and Wordpress coexisting in Apache virtualhost

其他参考文献:
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/

我的apache2配置文件如下。

<VirtualHost *:80>

    Alias /static /home/ubuntu/test_pfi_app/static
    #Alias /media /home/ubuntu/test_pfi_app/media

    #DocumentRoot /var/www/html

    <Directory /home/ubuntu/test_pfi_app/static>
        Require all granted
    </Directory>

    WSGIDaemonProcess myproject python-path=/home/ubuntu/test_pfi_app:/usr/local/lib/python2.7/site-packages
    WSGIProcessGroup myproject
    WSGIScriptAlias /django /home/ubuntu/test_pfi_app/myproject/wsgi.py process-group=myproject
    #WSGIScriptAliasMatch /django /home/ubuntu/test_pfi_app/myproject/wsgi.py

    <Directory /home/ubuntu/test_pfi_app/myproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
ServerName app1.example.co.in
DocumentRoot /var/www/html/ocdemo
</VirtualHost>

<VirtualHost *:80>
ServerName app2.example.co.in
DocumentRoot /var/www/html/echosuat
</VirtualHost>

<VirtualHost *:80>
ServerName task.example.co.in
DocumentRoot /var/www/html/tasks
</VirtualHost>

我可以使用IP/django访问django应用,但访问服务器的根目录会重定向到/var/www网址,如下图所示。

enter image description here

所有其他应用都可以从IP/html/app_name访问,而应该可以从IP/app_name访问

我无法在配置文件中进行正确的配置。

另外,我无法看到欢迎来到django&#34;访问IP/django的页面。它反而给出了&#34; 页面未找到(404)&#34;

访问IP/django时未获取默认的django页面。
enter image description here

访问IP/django 获取此页面 虽然,IP/django/admin工作正常。
enter image description here

2 个答案:

答案 0 :(得分:0)

您已经特别要求Apache在/django处为您的Django应用程序提供服务,方法是将该路径作为WSGIScriptAlias。如果您想要/,这是正常的事情,那么您应该在那里使用/

答案 1 :(得分:0)

在阅读了有关配置文档的更多信息后,我终于找到了解决方案。

<VirtualHost *:80>

    Alias /static /home/ubuntu/app/static
    Alias /media /home/ubuntu/app/media

    DocumentRoot /var/www/html

    <Directory /home/ubuntu/app/static>
        Require all granted
    </Directory>

    WSGIDaemonProcess app python-path=/home/ubuntu/app:/usr/local/lib/python2.7/site-packages
    WSGIProcessGroup app
    WSGIScriptAlias /django /home/ubuntu/app/app/wsgi.py process-group=app

    <Directory /home/ubuntu/app/app>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
ServerName ocdemo.example.co.in
DocumentRoot /var/www/html/ocdemo
</VirtualHost>

<VirtualHost *:80>
ServerName echosuat.example.co.in
DocumentRoot /var/www/html/echosuat
</VirtualHost>

<VirtualHost *:80>
ServerName task.example.co.in
DocumentRoot /var/www/html/tasks
</VirtualHost>

我需要改变的是在django应用程序的配置中添加DocumentRoot。