我有以下工作Django配置:
<ip>/base_context_path/rest
Django响应<ip>/base_context_path/admin
(对于前端调用的其他API)和<ip>/base_context_path/*
(对于使用base_context_path / static的管理)。
所以Django所需的一切都在<VirtualHost *:80>
ServerName mydomainname.org
DocumentRoot /MyWebSiteFolder
DirectoryIndex index.html
<Directory "/MyWebSiteFolder">
# redirect rules for managing AngularJS
</Directory>
</VirtualHost>
。
现在我需要在同一个Apache2上部署一个在Angular上开发的网站,所以我试图了解如何使它工作。我有这个网站的域名(mydomainname.org),但不是django应用程序的专用域名。访问我的域名时,我希望我的网站能够出现。
这是我对我网站的尝试:
<VirtualHost *:80>
ServerName mydomainname
Alias /base_context_path/static/ /MyDjangoProjectFolder/static
WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py
WSGIDaemonProcess MyDjangoProject python-path=/MyDjangoProjectFolder:/usr/local/lib/python2.7/site-packages
WSGIProcessGroup MyDjangoProject
<Directory /MyDjangoProjectFolder/static>
Options -Indexes
Require all granted
</Directory>
不起作用(403)。
对于我的Django应用程序,这是我创建的虚拟主机,它不能正常工作(403):
{{1}}
所以我有点卡住了。
答案 0 :(得分:0)
对于目录,您需要添加以下指令:
Require all granted
或某些等效的访问目录。 Apache可能无权查看该目录或被配置为可以访问该目录。您还需要确保Apache具有读,写和执行权限。
另请查看 apache 日志,以获取有关正在发生的错误(403)的其他信息。
我也建议像Aki003一样,使用 nginx ,因为它更容易配置和使用uwsgi。
答案 1 :(得分:0)
要使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>
(旁注):您可能还希望在此处包括安全标头:
Header set X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection 1;mode=block
Header set X-Content-Type-Options nosniff
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
您的VirtualHost文件应如下所示:
<VirtualHost *>
WSGIDaemonProcess MyDjangoProject
WSGIProcessGroup MyDjangoProject
WSGIScriptAlias / /MyDjangoProjectFolder/MyDjangoProject/wsgi.py
<Directory /MyDjangoProjectFolder/MyDjangoProject>
Require all granted
</Directory>
<VirtualHost>
根据mod_wsgi
文档,这是用于多个应用程序使用守护程序模式的配置(您可能要添加或测试其他应用程序,因此这是一个很好的准备)。
/some/path/where/is/an/empty/venv
是您要创建一个空虚拟环境的路径(使用virtualenv
!!以便您可以访问activate_this.py
脚本!!)
确保在django项目中创建并激活另一个虚拟环境,在该环境中将安装所有依赖项。
您可能需要这样做,因为从WSGI文件中激活虚拟环境时,仅使用了python虚拟环境中的site-packages目录。
如果您偶然地从requirements.txt
安装了一个软件包,但是这些软件包安装在主要的python安装中,那么将从那里使用它们,如果版本错误或具有不同的依赖关系,则可能会出现一些错误
下一步是修改wsgi.py
,方法是先添加这些行(在任何导入之前):
python_home='/path/to/the/MyDjangoProjectFolder/venv'
activate_this=python_home+'/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
以便在mod_wsgi解析此文件时,激活所有依赖项所在的虚拟环境,以使其正常运行。
此外,在同一文件(wsgi.py
)中,将django项目的路径添加到sys路径:
import sys
sys.path.append('/path/to/the/MyDjangoProjectFolder')
此外,不要忘记设置
DEBUG = False
并编辑ALLOWED_HOSTS = ['.mydomainname.org']
答案 2 :(得分:0)
这是我每次用于 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
答案 3 :(得分:0)
您必须创建两个配置文件,一个用于 django 应用程序,另一个用于前端应用程序
首先你可以通过域和子域进行 前端example.com 后端 api.example.com
或者你改变 WSGIScriptAlias / 到 WSGIScriptAlias /base_context_path
默认为前置