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

Python 在Apache2服务器上使用WSGI部署Django应用程序时出错,python,django,apache2,django-wsgi,django-deployment,Python,Django,Apache2,Django Wsgi,Django Deployment,我正在用Ubuntu在Apache2服务器上安装Django应用程序。 我使用了以下教程来完成要点。 我也使用了以下解决方案,但对我无效。 其他参考资料: 我的apache2配置文件如下所示 <VirtualHost *:80> Alias /static /home/ubuntu/test_pfi_app/static #Alias /media /home/ubuntu/test_pfi_app/media #DocumentRoot /var/

我正在用Ubuntu在Apache2服务器上安装Django应用程序。 我使用了以下教程来完成要点。

我也使用了以下解决方案,但对我无效。

其他参考资料:

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

别名/static/home/ubuntu/test\u pfi\u app/static
#别名/media/home/ubuntu/test\u pfi\u app/media
#DocumentRoot/var/www/html
要求所有授权
WSGIDaemonProcess myproject python path=/home/ubuntu/test\u pfi\u app:/usr/local/lib/python2.7/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias/django/home/ubuntu/test_pfi_app/myproject/wsgi.py进程组=myproject
#WSGIScriptAliasMatch/django/home/ubuntu/test\u pfi\u app/myproject/wsgi.py
要求所有授权
服务器管理员webmaster@localhost
DocumentRoot/var/www/html
ErrorLog${APACHE_LOG_DIR}/error.LOG
CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
ServerName app1.example.co.in
DocumentRoot/var/www/html/ocdemo
ServerName app2.example.co.in
DocumentRoot/var/www/html/echosuat
ServerName task.example.co.in
DocumentRoot/var/www/html/tasks
我可以使用
IP/django
访问django应用程序,但是访问服务器的根目录会重定向到
/var/www
url,如下图所示

所有其他应用程序都可以从
IP/html/app\u name
访问,而它们应该可以从
IP/app\u name

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

此外,我无法看到访问
IP/django
的“欢迎来到django”页面。它给出了一个“未找到页面(404)

在访问
IP/django

访问
IP/django

不过,
IP/django/admin
工作正常。


您已经明确要求Apache在
/Django
为您的Django应用程序提供服务,将该路径作为WSGIScriptAlias。如果您希望它位于
/
,这是正常的操作,您应该在那里使用
/

您已经明确要求Apache将该路径作为WSGIScriptAlias,在
/Django
为您的Django应用程序提供服务。如果您想在
/
上使用它,这是正常的做法,您应该在那里使用
/

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

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

别名/static/home/ubuntu/app/static
别名/media/home/ubuntu/app/media
DocumentRoot/var/www/html
要求所有授权
WSGIDaemonProcess app python path=/home/ubuntu/app:/usr/local/lib/python2.7/site-packages
WSGIProcessGroup应用程序
WSGIScriptAlias/django/home/ubuntu/app/app/wsgi.py进程组=app
要求所有授权
服务器管理员webmaster@localhost
DocumentRoot/var/www/html
ErrorLog${APACHE_LOG_DIR}/error.LOG
CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
ServerName ocdemo.example.co.in
DocumentRoot/var/www/html/ocdemo
ServerName echosuat.example.co.in
DocumentRoot/var/www/html/echosuat
ServerName task.example.co.in
DocumentRoot/var/www/html/tasks

我所需要更改的只是在django应用程序的配置中添加DocumentRoot

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

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

别名/static/home/ubuntu/app/static
别名/media/home/ubuntu/app/media
DocumentRoot/var/www/html
要求所有授权
WSGIDaemonProcess app python path=/home/ubuntu/app:/usr/local/lib/python2.7/site-packages
WSGIProcessGroup应用程序
WSGIScriptAlias/django/home/ubuntu/app/app/wsgi.py进程组=app
要求所有授权
服务器管理员webmaster@localhost
DocumentRoot/var/www/html
ErrorLog${APACHE_LOG_DIR}/error.LOG
CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
ServerName ocdemo.example.co.in
DocumentRoot/var/www/html/ocdemo
ServerName echosuat.example.co.in
DocumentRoot/var/www/html/echosuat
ServerName task.example.co.in
DocumentRoot/var/www/html/tasks

我所需要更改的只是在django应用程序的配置中添加DocumentRoot

你有可以共享的Apache日志文件吗?我明天会添加它们。我看了一下日志,发现它们没有多大用处。你有可以共享的Apache日志文件吗?我明天会添加它们。我看了一下日志,发现它们没有多大用处。这正是我想做的。问题是php应用程序无法正确访问。我希望可以使用
/app\u name
访问它们,但现在可以使用
/html/app\u name
访问它们。是的。这正是我想做的。问题是php应用程序无法正确访问。我希望可以使用
/app\u name
访问它们,但现在可以使用
/html/app\u name
访问它们。