当我尝试访问我的网站时出现以下错误:
Forbidden. You don't have permission to access / on this server.
我的虚拟主机文件如下所示:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static ~/myproject/static
<Directory ~/myproject/static>
Require all granted
</Directory>
<Directory ~/myproject/myprojectapi>
Order allow,deny
Require all granted
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
我的apache2.conf
是默认文件。我正在使用Django 1.9 with Python 2.7 on Ubuntu 14.04
我确实尝试了大多数(如果不是全部)网站上找到的解决方案,但没有一个因某些原因而起作用。我按照this教程获得了这些权限:
chmod 664 ~/myproject/db.sqlite3
sudo chown :www-data ~/myproject/db.sqlite3
sudo chown :www-data ~/myproject
我也是root
用户。
如果您需要任何其他信息,请告诉我们;我将非常乐意提供它。任何帮助将不胜感激。
以下是WSGI项目:
WSGIDaemonProcess goggest python-path=~/myproject:/usr/lib/python2.7/dist-packages
WSGIProcessGroup goggest
WSGIScriptAlias / ~/myproject/myprojectapi/wsgi.py
答案 0 :(得分:2)
以下是我修复(有很多帮助)问题的方法。 这个答案假设您有以下项目结构:
~/myproject
- myproject
- ...
- settings.py
- wsgi.py
- myapp
- ...
- static
- myapp
- ...
题外话
我遇到的问题是我的apahce error.log
中出现错误,表示无法找到settings
。此问题很可能是由python-path中的错误引起的。此部分假定您正在使用守护程序方法(由docs推荐)。
wsgi.py
文件并确保myproject.settings
代替settings
中的os.environ.setdefault(" ... ", " ... ")
WSGIDaemonProcess [any-name] python-path=/home/[username]/myproject:/usr/lib/python2.7/site-packages
这可以解决问题(至少它对我有用)。
修复403禁止(或至少绕过它)
以下是为我完成工作的conf
。 不 apache2.conf
并且apache2.conf
中没有新,它仍然是默认值。以下内容属于apache2/sites-available/000-default.conf
。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
DocumentRoot /home/[username]/myproject # (1)
Alias /static path/to/your/static_root # (2)
<Directory path/to/your/static_root>
Require all granted
</Directory>
<Directory /home/[username]/myproject/myproject>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
<Directory /home/[username]/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess [any-name] python-path=/home/[username]/myproject:/usr/lib/python2.7/site-packages
WSGIProcessGroup [any-name]
WSGIScriptAlias / /home/[username]/[myproject]/[myproject]/wsgi.py
WSGIApplicationGroup %{GLOBAL}
</VirtualHost>
RE:积分(1),(2)
(1)。将文档根目录更改为包含django项目文件的目录的头部。在这种情况下,我将其更改为/home/[username]/myproject
。 不使用~/
作为参考。我试过了,它似乎没有成功。
(2)。如果您要从同一服务器提供静态文件,请确保在STATIC_ROOT
文件中设置了STATIC_URL
和settings.py
。就我而言,我将STATIC_URL
设置为/static/
,将STATIC_ROOT
设置为/var/www/[any-name]/static/
。当您决定部署时,您必须运行sudo python manage.py collectstatic
。
另请注意,它应为Alias /static
而不是Alias /static/
(请注意尾部斜杠)。文档显示/static/
,但这是不正确的,当您尝试提供静态文件时不起作用(apache无法完成路径)。
就是这样。所有这些步骤都使我的服务器启动并运行。如果您有任何问题,请随时发表评论,我会尽力帮忙。祝你好运!