Python 使用Django和AngularJS的虚拟主机的Apache2和上下文路径

Python 使用Django和AngularJS的虚拟主机的Apache2和上下文路径,python,django,apache,virtualhost,Python,Django,Apache,Virtualhost,我有以下工作Django配置: WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py WSGIPythonPath /MyDjangoProjectFolder <Directory /MyDjangoProjectFolder/MyDjangoProject> <Files wsgi.py> Order deny,allow Require all gran

我有以下工作Django配置:

WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py
WSGIPythonPath /MyDjangoProjectFolder

<Directory /MyDjangoProjectFolder/MyDjangoProject>
   <Files wsgi.py>
        Order deny,allow
       Require all granted
   </Files>
</Directory>

Alias /base_context_path/static/ /MyDjangoProjectFolder/static/

<Directory /MyDjangoProjectFolder/static>
    Require all granted
</Directory>
WSGIScriptAlias//MyDjangoProjectFolder/MyDjangoProject/wsgi.py
WSGIPythonPath/MyDjangoProjectFolder
命令拒绝,允许
要求所有授权
别名/base\u上下文\u路径/static//MyDjangoProjectFolder/static/
要求所有授权
Django对
/base\u context\u path/rest
(用于前端调用的rest API)和
/base\u context\u path/admin
(用于管理,使用base\u context\u path/static)。 因此,Django所需的一切都在
/base\u context\u path/*

现在我需要在同一个Apache2上部署一个Angular开发的网站,所以我试图了解如何让它工作。我有这个网站的域名(mydomainname.org),但没有django应用程序的专用域名。当访问我的域名时,我希望我的网站出现

这是我对我的网站的尝试:

<VirtualHost *:80>
    ServerName mydomainname.org
    DocumentRoot /MyWebSiteFolder
    DirectoryIndex index.html
 <Directory "/MyWebSiteFolder">
# redirect rules for managing AngularJS
  </Directory>
</VirtualHost>

ServerName mydomainname.org
DocumentRoot/MyWebSiteFolder
DirectoryIndex.html
#用于管理AngularJS的重定向规则
它不工作(403)

对于我的Django应用程序,这是我创建的虚拟主机,它不能正常工作(403):


服务器名mydomainname
别名/base\u上下文\u路径/static//MyDjangoProjectFolder/static
WSGIScriptAlias//MyDjangoProjectFolder/MyDjangoProject/wsgi.py
WSGIDaemonProcess MyDjangoProject python path=/MyDjangoProjectFolder:/usr/local/lib/python2.7/site-packages
WSGIProcessGroup Mydjango项目
选项-索引
要求所有授权
所以我有点卡住了。

对于目录,您需要添加以下指令:

  Require all granted 
或者访问目录的一些等效项。Apache可能没有查看该目录的权限,或者配置为可以访问该目录。您还需要确保Apache具有读取、写入和执行的权限

还要检查apache日志,以获取有关正在发生的错误(403)的更多信息


我还建议像Aki003一样,使用nginx,因为它更易于配置和使用uwsgi。

要让您的Django应用程序在Apache下工作,您应该安装
mod_wsgi
(建议使用CMMI方法,以确保编译该方法时使用与创建虚拟环境相同的python版本)

如果您没有httpd.conf文件,请编辑/etc/apache2/apache2.conf并编写以下行:

Include/etc/apache2/httpd.conf

然后继续创建
httpd.conf
,并在其中添加以下内容:

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

WSGIPythonHome /some/path/where/is/an/empty/venv

Alias /static/ /MyDjangoProjectFolder/MyDjangoProject/static/

<Directory /MyDjangoProjectFolder/MyDjangoProject/static>
    Require all granted
</Directory>

WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py process-group=MyDjangoProject

<Directory /MyDjangoProjectFolder/MyDjangoProject>
<Files wsgi.py>
    Require all granted
</Files>
</Directory>

您的VirtualHost文件应如下所示:

<VirtualHost *>
    WSGIDaemonProcess MyDjangoProject 
    WSGIProcessGroup MyDjangoProject

    WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py 

    <Directory /MyDjangoProjectFolder/MyDjangoProject>
        Require all granted
    </Directory>
<VirtualHost>

因此,当mod_wsgi解析此文件时,要激活所有依赖项所在的虚拟环境,以便正常运行

另外,在同一个文件(
wsgi.py
)中,将django项目的路径添加到sys path:

导入系统 sys.path.append('/path/to/the/MyDjangoProjectFolder') 另外,不要忘记设置
DEBUG=False
并编辑
允许的\u HOSTS=['.mydomainname.org']

这是我每次用于Apache2的设置模板

    Apache2:
    sudo apt-get install apache2 libapache2-mod-wsgi-py3
    cd /etc/apache2/sites-available/

    sudo nano 000-default.conf

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

        ErrorLog /home/user/site/logs/error.log
        CustomLog /home/user/site/access.log combined

        ServerName website.com
            ServerAlias www.website.com

        Alias /static /home/user/django_project/static
        <Directory /home/user/django_project/static>
            require all granted
        </Directory>

        Alias /media /home/user/django_project/media
        <Directory /home/user/django_project/media>
            require all granted
        </Directory>

        Alias /images /home/user/django_project/images
        <Directory /home/user/django_project/images>
            require all granted
        </Directory>

        <Directory /home/user/django_project/folder_containing_settings>
            <files wsgi.py>
                require all granted
            </files>
        </Directory>
        
        WSGIDaemonProcess django_project python-path=/home/user/django_project python-home=/home/user/django_project/env
        WSGIProcessGroup django_project
        WSGIScriptAlias / /home/user/django_project/folder_containing_settings/wsgi.py


    </VirtualHost><span style="font-weight: 400;">


        
    sudo apachectl configtest
Apache2:
sudo apt get安装apache2 libapache2-mod-wsgi-py3
cd/etc/apache2/可用站点/
sudo nano 000-default.conf
服务器管理员webmaster@localhost
DocumentRoot/var/www/html
ErrorLog/home/user/site/logs/error.log
CustomLog/home/user/site/access.log组合
服务器名网站
服务器别名www.website.com
别名/static/home/user/django_项目/static
要求所有授权
别名/media/home/user/django_项目/media
要求所有授权
别名/images/home/user/django_项目/images
要求所有授权
要求所有授权
WSGIDaemonProcess django_项目python path=/home/user/django_项目python home=/home/user/django_项目/env
WSGIProcessGroup django_项目
WSGIScriptAlias//home/user/django_项目/folder_包含_设置/wsgi.py
sudo apachectl configtest

您必须创建两个配置文件,一个用于django应用程序,另一个用于前端应用程序

首先,您可以按域和子域进行设置 frontendexample.com 后端api.example.com

或者你改变 WSGIScriptAlias/到WSGIScriptAlias/base\u context\u路径


默认情况下,fronted将

我建议将nginx与django/uwsgi一起使用。如果您想尝试查看一下,这是django virtualhost配置中的服务器名输入错误吗?我希望它是您的完全限定域名…(我假设您也关闭了virtualhost标记。)
<VirtualHost *>
    WSGIDaemonProcess MyDjangoProject 
    WSGIProcessGroup MyDjangoProject

    WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py 

    <Directory /MyDjangoProjectFolder/MyDjangoProject>
        Require all granted
    </Directory>
<VirtualHost>

    Apache2:
    sudo apt-get install apache2 libapache2-mod-wsgi-py3
    cd /etc/apache2/sites-available/

    sudo nano 000-default.conf

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

        ErrorLog /home/user/site/logs/error.log
        CustomLog /home/user/site/access.log combined

        ServerName website.com
            ServerAlias www.website.com

        Alias /static /home/user/django_project/static
        <Directory /home/user/django_project/static>
            require all granted
        </Directory>

        Alias /media /home/user/django_project/media
        <Directory /home/user/django_project/media>
            require all granted
        </Directory>

        Alias /images /home/user/django_project/images
        <Directory /home/user/django_project/images>
            require all granted
        </Directory>

        <Directory /home/user/django_project/folder_containing_settings>
            <files wsgi.py>
                require all granted
            </files>
        </Directory>
        
        WSGIDaemonProcess django_project python-path=/home/user/django_project python-home=/home/user/django_project/env
        WSGIProcessGroup django_project
        WSGIScriptAlias / /home/user/django_project/folder_containing_settings/wsgi.py


    </VirtualHost><span style="font-weight: 400;">


        
    sudo apachectl configtest