我正在尝试在我的 Kubuntu 13.04 笔记本电脑上设置 apache 服务器。我已经安装了 apache2 包sudo a2enmod userdir; sudo service apache2 restart
,但是当我访问 时http://localhost/~user
,它仍然显示如下内容:
Forbidden
You don't have permission to access /~user on this server.
Apache/2.2.22 (Ubuntu) Server at localhost Port 80
的结果tail /var/log/apache2/access.log
127.0.0.1 - - [02/Aug/2013:16:22:01 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:16:22:02 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:35:30 +0200] "GET /~kaiyin HTTP/1.1" 403 501 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:35:30 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:35:30 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:36:26 +0200] "GET /favicon.ico HTTP/1.1" 404 499 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:17:36:26 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:21:05:17 +0200] "GET /~kaiyin HTTP/1.1" 403 501 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:21:05:17 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
127.0.0.1 - - [02/Aug/2013:21:05:17 +0200] "GET /favicon.ico HTTP/1.1" 404 498 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36"
的结果tail /var/log/apache2/error.log
[Fri Aug 02 21:05:17 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:05:17 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:06:54 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:06:54 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:06:59 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /~kaiyin denied
[Fri Aug 02 21:06:59 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:06:59 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:07:17 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /~kaiyin denied
[Fri Aug 02 21:07:17 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
[Fri Aug 02 21:07:17 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
答案1
这些public_html
目录需要具有如下权限,以便运行 Apache 的用户可以访问它:
$ chmod -R 755 ~/public_html
还是不行?
如果您查看 Apache 错误日志,您可能会看到如下行:
[Fri Aug 02 21:06:59 2013] [错误] [客户端 127.0.0.1] (13)权限被拒绝:访问 /~kaiyin 被拒绝
这表明 Apache 没有权限导航到本示例中的用户目录 (~kaiyin)。
如何解决这个问题?
您需要确保为 Apache 所属的组设置读取 + 执行位,或者在用户目录上设置其他读取 + 执行位,以便 Apache 可以访问public_html
下面的文件夹。
例子
/home
|-- [drwxr-x---] /home/sam
/home/sam
|-- [drwxr-xr-x] /home/sam/public_html
参考
答案2
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride All
Options MultiViews Indexes SymLinksIfOwnerMatch
<Limit GET POST OPTIONS>
# Apache <= 2.2:
#Order allow,deny
#Allow from all
# Apache >= 2.4:
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
# Apache <= 2.2:
#Order deny,allow
#Deny from all
# Apache >= 2.4:
Require all denied
</LimitExcept>
</Directory>
</IfModule>
确保您在 中的设置正确/etc/apache2/mods-enabled/userdir.conf
。在 chmodding 我的 public_html 后,我的权限被拒绝,然后决定检查userdir.conf
.我注意到有针对早期 apache 版本和更新版本的设置。我知道我正在运行最新版本,因此启用了较新的设置,现在一切正常
答案3
您还可以使用/etc/hosts
文件来消除临时 URL 的需要。如果主题或插件(如果有的话)中有完整 URL 的引用,则该网站将不会以正确的格式显示内容。
答案4
很可能文件夹没有 search( x
) 权限或文件没有 read( r
) 权限
namei -ml /home/joe/public_html/index.html
f: /home/joe/public_html/index.html
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-x--- joe joe joe
drwxrwxr-x joe joe public_html
-rwxr-xr-x joe joe index.html
Apache 需要搜索并读取从根目录 ( /
) 开始的所有文件夹index.html
(即必须具有r
&x
权限)。如果您从上面注意到,/home/joe
不允许other
用户阅读 ( r
) 或搜索 ( x
)。
解决方案一:
将 apache2 用户(在我的例子中www-data
)添加到登录的用户组中。通过这种方式www-data
可以访问用户的所有内容/home/joe
。
就我而言,apache2 在名为 的用户下运行www-data
。所以我们需要将www-data
用户添加到组中joe
adduser www-data joe
此外,下面的所有文件都public_html
必须具有rx
该组的权限。
chmod -R g+rw /home/joe/public_html
这不太安全,因为/home/joe
apache 服务器可以访问下面的任何文件。如果 apache2 admin 不小心将配置更改为 accesssome_private_folder
而不是public_html
,其他人可以轻松访问这些。
解决方案2:
允许任意other
搜索( x
)/home/joe
chmod o+x /home/joe
此外,下面的所有文件都public_html
必须具有访问others
权限rx
。
chmod -R o+rw /home/joe/public_html