如何使用 Django 修复 apache 服务器上禁止的 403?

Jee*_*hah 3 python apache django ubuntu

当我尝试访问我的网站时出现以下错误:

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>
Run Code Online (Sandbox Code Playgroud)

而 myapache2.conf是默认文件。我在用Django 1.9 with Python 2.7 on Ubuntu 14.04

我已经尝试了大多数(如果不是全部)在站点上找到的解决方案,但由于某种原因,它们都不起作用。我遵循了教程并授予了以下权限:

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
Run Code Online (Sandbox Code Playgroud)

Jee*_*hah 6

以下是我解决(在很多帮助下)问题的方法。此答案假设您具有以下项目结构:

~/myproject
    - myproject
      - ...
      - settings.py
      - wsgi.py
    - myapp
      - ...
      - static
        - myapp
          - ...
Run Code Online (Sandbox Code Playgroud)

题外话

我面临的问题是我的 apahce 出现错误,error.log说它找不到settings. 这个问题很可能是由你的 python-path 中的错误引起的。这部分假设您正在使用守护进程方法(文档推荐)。

  1. 检查您的wsgi.py文件并确保它显示myproject.settings而不是settingsinos.environ.setdefault(" ... ", " ... ")
  2. 检查并仔细检查你的 python-path 应该是这样的 WSGIDaemonProcess [any-name] python-path=/home/[username]/myproject:/usr/lib/python2.7/site-packages

这应该可以解决问题(至少对我来说是这样)。

修复 403 Forbidden(或至少绕过它)

以下是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>
Run Code Online (Sandbox Code Playgroud)

回复:点 (1), (2)

(1). 将文档根目录更改为包含 django 项目文件的目录的头部。在这种情况下,我将其更改为/home/[username]/myproject. 不要使用~/参考。我试过了,它似乎没有成功。

(2). 如果您从同一台服务器提供静态文件,请确保在您的文件中设置了STATIC_ROOT和。就我而言,我将要和到。当您决定部署时,您必须运行.STATIC_URLsettings.pySTATIC_URL/static/STATIC_ROOT/var/www/[any-name]/static/sudo python manage.py collectstatic

另外请注意,它应该是Alias /static没有Alias /static/(注意斜线)。文档显示/static/但这是不正确的,并且在您尝试提供静态文件时不起作用(apache 没有完成路径)。

就是这样。所有这些步骤都使我的服务器启动并运行。如果您有任何问题,请随时发表评论,我会尽力提供帮助。祝你好运!