Apache 说打开文件读取时出错:权限被拒绝

Posted

技术标签:

【中文标题】Apache 说打开文件读取时出错:权限被拒绝【英文标题】:Apache says Error opening file for reading: Permission Denied 【发布时间】:2014-02-02 13:22:33 【问题描述】:

我正在尝试使用 apache (2.2.22) 和 mod_wsgi (3.4) 运行 django (1.6) 项目。我的python是2.7.3,ubuntu 12.04默认。我已将所有内容设置为 chmod 777 从 /var/www 到向下。不幸的是它给了我

打开文件读取时出错:权限被拒绝 然后 脚本头过早结束:wsgi.py

谁能告诉我我做错了什么? 我在这里发布我的error.log

root@whq-4:/var/www/Imse_dev2/Imse/Imse# tail -f /var/log/apache2/error.log 
[Tue Jan 14 14:16:04 2014] [notice] caught SIGTERM, shutting down
[Tue Jan 14 14:16:08 2014] [notice] Apache/2.2.22 (Ubuntu) mod_wsgi/3.4 Python/2.7.3      configured -- resuming normal operations
[Tue Jan 14 14:16:28 2014] [error] /var/www/Imse_dev2/Imse
Error opening file for reading: Permission denied
[Tue Jan 14 14:21:32 2014] [error] [client 127.0.0.1] Premature end of script headers:   wsgi.py
[Tue Jan 14 14:29:13 2014] [notice] caught SIGTERM, shutting down
[Tue Jan 14 14:29:13 2014] [notice] Apache/2.2.22 (Ubuntu) mod_wsgi/3.4 Python/2.7.3  configured -- resuming normal operations
[Tue Jan 14 14:29:17 2014] [error] /var/www/Imse_dev2/Imse
Error opening file for reading: Permission denied
[Tue Jan 14 14:34:21 2014] [error] [client 127.0.0.1] Premature end of script headers:  wsgi.py

还有我的 httpd.conf 文件

#LimitRequestLine 200475
#LimitRequestFieldSize 200475

WSGIDaemonProcess imse_dev2_wsgi python-path=/var/www/Imse_dev2/Imse/Imse


#LoadModule deflate_module modules/mod_deflate.so
#LoadModule headers_module modules/mod_headers.so

<VirtualHost *:80>
    ServerName whq-4
    DocumentRoot /var/www/
    #Header set Access-Control-Allow-Origin "*"
    Alias /static /var/www/Imse_dev2/Imse/static
    Alias /favicon.ico /var/www/favicon.ico
#       Header set Access-Control-Allow-Origin "*"


    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>


    WSGIScriptAlias /imse_dev2 /var/www/Imse_dev2/Imse/Imse/wsgi.py
    <Directory /var/www/Imse_dev2/Imse/Imse>
            WSGIProcessGroup imse_dev2_wsgi
            <Files wsgi.py>
                    Order deny,allow
                    Allow from all
            </Files>
    </Directory>

    <IfModule mod_headers.c>
             Header set Access-Control-Allow-Origin "*"
    </IfModule>

</VirtualHost>

【问题讨论】:

我认为对于 apache 2.2 你应该使用 mod_wsgi 3.3 好的,那我试试…… 完全不知道,这可能是一个微不足道的问题,但我很挣扎 我找了很多但还是没有解决,apache2无论如何都无法访问我项目的根目录 不知道是不是这样,但我注意到您在&lt;Directory&gt; 中有/var/www/Imse_dev2/Imse/Imse,但错误是针对/var/www/Imse_dev2/Imse(少一个Imse)。如果第一个路径是正确的,那么它可能不应该尝试将/var/www/Imse_dev2/Imse 作为文件打开,因为它似乎是一个目录。 【参考方案1】:

查看你的 httpd.conf 和相应的错误信息,看起来像目录

/var/www/Imse_dev2/Imse/Imse

要么 可供 apache 用户(“拥有” apache 进程)读取,要么该目录不能被 apache 用户执行。使该目录对所有用户可见可以这样完成:

chmod 755 /var/www/Imse_dev2/Imse/Imse

但我怀疑在您的 apache 文档根目录下还有其他无法读取的目录。我可能会在您的文档根目录下创建 apache 用户拥有的所有文件和目录,除非您有特定的理由不这样做,如下所示:

chown -R apache /var/www/Imse_dev2

【讨论】:

【参考方案2】:

问题是,Django 不允许您访问应用程序所在目录之外的文件。因此,例如,如果您的应用程序在 /var/www/project 上运行,并且您要访问的文件在 /var/www/foo 上,则 Django 将引发您遇到的异常。

解决方案是将您尝试访问的目录移动到项目目录中。

【讨论】:

我认为 Django 本身并没有对你可以访问哪些文件施加任何限制......你的意思是 Apache 可能吗? 嗨,马克,不,我的意思是 Django 本身。它用于检查您是否尝试访问项目路径之外的内容...我自己之前遇到过这个问题,但我无法确认当前版本中是否仍然存在此检查...但您可以参考 Google看看它过去多久发生一次:google.com.br/… 好的,这是真的,对于上传的文件,它会检查目录。我认为 Django 会根据 MEDIA_ROOT 而不是 Apache conf 进行检查。我很确定这不是这里的问题(没有提到正在上传的文件),但这是一个很好的说明,可能会导致类似的问题。

以上是关于Apache 说打开文件读取时出错:权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

读取 CPU 使用率时出错:/proc/stat(权限被拒绝)

Laravel 5:laravel.log 无法打开:权限被拒绝

Apache上传文件/tmp权限被拒绝

使用 PHP 打开或创建文件时权限被拒绝

Apache spark:上传到作业暂存目录的文件的权限被拒绝

无法打开流:权限被拒绝[上传照片]