我就是搞不懂。我在 Ubuntu 10.04 i386 服务器上运行 apache2。每当我在浏览器中访问我的服务器(有一个 IP 地址,并且通过静态 IP xxx.xxx.xxx.xxx 连接到互联网,所以这不是问题)时,我的子域名(此处重命名),我得到以下信息:
Forbidden
You don't have permission to access /index.html on this server
apache2 错误日志证实了这一点:
[Mon Apr 18 02:38:20 2011] [error] [client zzz.zzz.zzz.zzz] (13)Permission denied: access to / denied
我将尽力在下面提供所有必要的信息:
1)/etc/apache2/httpd.conf 的内容
DirectoryIndex index.html index.php
2)/etc/apache2/sites-available/default 的内容
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /home/myusername/htdocs
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/home/myusername/htdocs/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
order allow,deny
allow from all
DirectoryIndex index.html index.php
Satisfy any
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
ServerName mysub.domain.edu
</VirtualHost>
3)/etc/apache2/sites-enabled/000-default 的内容
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /home/myusername/htdocs
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/home/myusername/htdocs/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
order allow,deny
allow from all
DirectoryIndex index.html index.php
Satisfy any
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
ServerName mysub.domain.edu
</VirtualHost>
4) ls -l 的结果(当我使用 sudo -i 以 root 身份运行):
root@myserver:/home/myusername# ls -l
total 4
drwxr-xr-x 2 www-data root 4096 2011-04-18 03:04 htdocs
5)ps auxwww | grep -i apache
root@myserver:/home# ps auxwww | grep -i apache
root 15121 0.0 0.4 5408 2544 ? Ss 16:55 0:00 /usr/sbin/apache2 -k start
www-data 15122 0.0 0.3 5180 1760 ? S 16:55 0:00 /usr/sbin/apache2 -k start
www-data 15123 0.0 0.5 227020 2788 ? Sl 16:55 0:00 /usr/sbin/apache2 -k start
www-data 15124 0.0 0.5 227020 2864 ? Sl 16:55 0:00 /usr/sbin/apache2 -k start
root 29133 0.0 0.1 3320 680 pts/0 R+ 16:58 0:00 grep --color=auto -i apache
6) ls -al /home/我的用户名/htdocs/
root@myserver:/# ls -al /home/myusername/htdocs/
total 20
drwxr-xr-x 2 www-data root 4096 2011-04-18 03:04 .
drw-r--r-- 4 myusername myusername 4096 2011-04-18 02:13 ..
-rw-r--r-- 1 root root 69 2011-04-18 02:14 index.html
我目前没有在我的用户文件夹中的 Web 根目录 (htdocs) 文件夹中使用任何 .htaccess 文件。
我不知道哪里出了问题,我花了 12 多个小时试图修复它,但毫无进展。如果您有任何建议,我愿意倾听……
答案1
使您的 /home/username 和 /home 具有权限 755
编辑:我会在这里添加内容,以便更容易阅读
您发布了这个:
drwxr-xr-x 2 www-data root 4096 2011-04-18 03:04 .
drw-r--r-- 4 myusername myusername 4096 2011-04-18 02:13 ..
如您所见,/home/myusername 文件夹具有 rw、r、r。您需要为该文件夹和 /home 文件夹指定“x”
chmod o+x /home
chmod o+x /home/myusername
答案2
(这更像是一个调试建议,因为我认为 Pratik 已经用 +x 回答了这个问题)
您提到的错误是文件系统权限错误,因此,除非您的 apache 配置文件重定向/别名到文件系统中的某些受限制位置,否则您的问题就出在 /home/myusername/htdocs 目录或 index.html 文件的权限上。
为了查看您的 apache 用户被拒绝的地方,请运行以下命令;
su -s /bin/bash apache
然后尝试
cd /home/myusername/htdocs
答案3
小心有关权限的错误建议。通常,您不应该将 755 放在 /home/username 目录中。
正确的权限记录在 httpd.conf 文件中,我将在此处粘贴相关部分:
# This usually means that ~userid (/home/username for the lay person)
# must have permissions of 711
注意:建议在 ~userid 上使用 711,请避免在 /home/username ( ~userid ) 上使用 755!!!!!!!!,
#~userid/public_html must have permissions"
# of 755"
~userid/public_html 可以赋予 755,但是如果你将 755 赋予你的 ~userid 文件夹,那么系统上的每个人都可以访问你的主文件夹并读取你的文件以及执行主文件夹中的文件,这在多用户系统上通常是一种非常糟糕的做法。711 可以避免向组和其他用户授予读取权限
答案4
我总是先将您的配置复制到您的主目录,然后执行“apt-get purge apache2”。
然后重新安装并执行“diff -y oldfile newfile”以查看更改。如果奇怪的是它不是配置更改,那么它就是您的 Web 根目录的权限更改。
除非您有大量虚拟主机,否则它只会花费几分钟。