apache部署django出现403Forbidden错误怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache部署django出现403Forbidden错误怎么解决相关的知识,希望对你有一定的参考价值。

参考技术A

两种解决方式:

    修改httpd.conf文件,中里面添加声明,开放django所在目录位置的访问权限;

    将django部署到apache的hotdocs目录中;

本回答被提问者和网友采纳
参考技术B 因为你的django工程目录没有访问权限,你需要在httpd.conf文件中开放目录权限;
或者把这个工程放到apache的htdoc目录中,重新配置部署

Apache24 上的 DJango 部署不起作用

【中文标题】Apache24 上的 DJango 部署不起作用【英文标题】:DJango deployment on Apache24 not working 【发布时间】:2021-09-12 21:40:32 【问题描述】:

我是 Web 框架的新手,我使用 DJango-3.1.7 设计了小型网站。

我正在尝试在 Windows 10 平台的 Apache 服务器上部署 DJango 网站,但似乎有些不正确,或者我错过了它。如果有人能帮忙,我们对我来说很珍贵。

我已经为这个应用程序配置了虚拟环境

问题:

出现错误 PYTHONHOME = (not set) PYTHONPATH = (not set)

错误日志

Python path configuration:
  PYTHONHOME = (not set)
  PYTHONPATH = (not set)
  program name = 'python'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = 'C:\\Apache24\\bin\\httpd.exe'
  sys.base_prefix = 'C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python38'
  sys.base_exec_prefix = 'C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python38'
  sys.executable = 'C:\\Apache24\\bin\\httpd.exe'
  sys.prefix = 'C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python38'
  sys.exec_prefix = 'C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python38'
  sys.path = [
    'C:\\Users\\Hp\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip',
    '.\\DLLs',
    '.\\lib',
    'C:\\Apache24\\bin',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00002838 (most recent call first):
<no Python frame>
[Sat Jun 26 21:56:47.558067 2021] [mpm_winnt:crit] [pid 5344:tid 780] AH00419: master_main: create child process failed. Exiting.

等/主机

127.0.0.2    stack-hack.com

httpd.conf

    LoadFile "c:/users/hp/appdata/local/programs/python/python38/python38.dll"
    LoadModule wsgi_module "e:/Code-Stack/stack-hack/lib/site-packages/mod_wsgi/server/mod_wsgi.cp38-win_amd64.pyd"
    WSGIPythonHome "e:/Code-Stack/stack-hack"
    WSGIPythonPath "e:/Code-Stack/stack-hack/Lib/site-packages"

    <VirtualHost *:80>
    ServerAlias www.stack-hack.com
    ServerName stack-hack.com
    ServerAdmin info@admin.com
    WSGIScriptAlias / "E:/Code-Stack/Stack-Hack/src/stackhack/wsgi.py"
    <Directory "E:/Code-Stack/Stack-Hack/src/stackhack">
        <Files wsgi.py>
        Require all granted
        </Files>
    </Directory>

    Alias /static/ "E:/Code-Stack/Stack-Hack/src/static/"
    <Directory "E:/Code-Stack/Stack-Hack/src/static">
        Require all granted
    </Directory>

    ErrorLog "E:/Code-Stack/Stack-Hack/logs/apache.error.log"
    CustomLog "E:/Code-Stack/Stack-Hack/logs/apache.custom.log" common
    </VirtualHost>

wsgi.py

    import os
    import sys
    from django.core.wsgi import get_wsgi_application
    from pathlib import Path

    path_home = str(Path(__file__).parents[1])
    if path_home not in sys.path:
        sys.path.append(path_home)

    os.environ['DJANGO_SETTINGS_MODULE'] = 'main.settings'

    application = get_wsgi_application()

项目结构

Stack-Hack  [Virtual env]
- Lib
- Scripts
+ src
  - home
  - media
  + stackhack
    - asgi.py
    - settings.py
    - urls.py
    - wsgi.py
  - static
  - manage.py
- pyvenv.cfg

我做的解决方法:


所有其他 django 设置都可以并且工作正常。我关注了各种博客文章来配置 Apache 服务器

    https://montesariel.com/blog/post-3 https://www.codementor.io/@aswinmurugesh/deploying-a-django-application-in-windows-with-apache-and-mod_wsgi-uhl2xq09e

【问题讨论】:

您是否尝试在系统环境变量中添加 PYTHONHOME 和 PYTHONPATH。这对我有用。 【参考方案1】:

为提供的引用文件中存在的每个错误找到可能的修复方法,以下是我发现可能有帮助的方法:

这个错误:

Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized

已在this 帖子中讨论过,可行的解决方案是:

我看到你的 PYTHONHOME 设置为 PYTHONHOME = '/home/env3/edu'。尝试检查它是否真的存在。

我的解决方案是删除 PYTHONHOME 环境变量。对您来说,可以是这样,或者将该变量设置为另一个值。

另一个可能的解决方案来自reddit here:

我遇到了同样的错误,但是当我将我的 python 虚拟环境的完整路径更改为对我有用的相对路径时,尝试更改它

virtualenv = /home/env3/%(projectname)

virtualenv = your_env

在你的 uwsgi.ini 文件中


这个错误:

ModuleNotFoundError: No module named 'encodings'

已在this 帖子中讨论过,可行的解决方案是:

对于 Python-3,请尝试删除虚拟环境文件。并重新设置。

rm -rf venv
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r requirements.txt

这个错误:

AH00419: master_main: create child process failed. Exiting.

已在this 帖子中讨论过,可行的解决方案是

我在 httpd.conf 中添加了以下几行

WSGIPythonPath "C:/Python33/Lib;C:/Python33/Lib/site-packages;C:/Python33/DLLs" WSGIPythonHome "C:/Python33"

然后 Apache 开始正常工作。

【讨论】:

【参考方案2】:

试试这个

unset PYTHONPATH

unset PYTHONHOME

基于此solution

【讨论】:

以上是关于apache部署django出现403Forbidden错误怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

Apache mod_wsgi 在部署 Django 项目时抛出错误“403 Forbidden”

c语言电脑上下载word时出现403forbiddwn怎么办

django web 服务器中的 403 禁止错误

关于在 Apache + mod_python 上部署 Django 项目

Apache 上的 Django 与 mod_wsgi (Linux) - 403 Forbidden

Apache 上的 Django 与 mod_wsgi (Linux) - 403 Forbidden