Apache2:为什么我会收到 403 Forbidden 错误?

Apache2:为什么我会收到 403 Forbidden 错误?

我已经搞砸了好几天了:(

为什么我在 example.com/contact 收到 403 Forbidden 错误?

这是文件/文件夹权限、Apache 用户、虚拟主机还是 Python 问题?

我正在尝试在 /contact 运行 Django 应用程序,但第一个问题是 403 错误。

  • 我正在运行 Ubuntu 20.04.3 LTS
  • Apache 2.4.41 已安装并正在运行
  • 已安装 Python 3.8 和 Django
  • libapache2-mod-wsgi-py3 已安装并启用
  • apachectl configtest语法正确
  • 所有文件均归www-data:www-data
  • 目录 chmod +x
  • example.com/index.html 有效

/var/log/apache2/access.log是空的

/var/log/apache2/error.log包含:

[mpm_prefork:notice] [pid 69090] AH00163:Apache/2.4.41 (Ubuntu) OpenSSL/1.1.1k mod_wsgi/4.6.8 Python/3.8 已配置 - 恢复正常操作

[core:notice] [pid 69090] AH00094:命令行:'/usr/sbin/apache2'

根目录中的 .htaccess 文件有

 RewriteEngine on
 ServerSignature Off
 Options All -Indexes

这是我的 public_html 文件结构:

在此处输入图片描述

/etc/apache2/sites-available/default-ssl.conf:

  <IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
    
        DocumentRoot /var/www/html
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    
        SSLEngine on
    
        SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                    SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                    SSLOptions +StdEnvVars
        </Directory>
    
    
    Alias /static /var/www/html/example.com/public_html/contact/static
    Alias /media /var/www/html/example.com/public_html/contact/media

    <Directory /var/www/html/example.com/public_html/contact/static>
        Require all granted
    </Directory>

    <Directory /var/www/html/example.com/public_html/contact/media>
        Require all granted
    </Directory>

    WSGIScriptAlias /contact/contact /var/www/html/example.com/public_html/contact/contact/wsgi.py

    WSGIDaemonProcess contact python-home=/var/www/html/example.com/public_html/contact/contact

    WSGIProcessGroup contact

    WSGISocketPrefix run/wsgi

    <Directory /var/www/html/example.com/public_html/contact/contact>
        <Files wsgi.py>
            Require all granted
            AllowOverride None
            Allow from all
        </Files>
    </Directory>

        </VirtualHost>
</IfModule>

答案1

当目录中没有 Indexdocument 时,Apache httpd 无法显示任何内容。Apache 的典型替代方法是显示目录列表,但已通过设置禁用-选项中的索引。

相关内容