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无论如何都无法访问我项目的根目录 不知道是不是这样,但我注意到您在<Directory>
中有/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 无法打开:权限被拒绝