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 오류 로그를 보면 다음과 같은 줄을 볼 수 있습니다.
[2013년 8월 2일 금요일 21:06:59] [오류] [클라이언트 127.0.0.1] (13) 권한 거부됨: /~kaiyin에 대한 액세스가 거부되었습니다.
이는 이 예에서 Apache가 사용자 디렉터리(~kaiyin)로 이동할 수 있는 권한이 없음을 나타냅니다.
이 문제를 어떻게 해결하나요?
public_html
Apache가 속한 그룹에 대해 읽기+실행 비트가 설정되어 있는지 확인하거나 Apache가 아래 폴더에 액세스할 수 있도록 사용자 디렉터리에 다른 읽기+실행 비트가 설정되어 있는지 확인해야 합니다 .
예
/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
. public_html을 chmodding한 후 권한이 거부된 후 확인하기로 결정했습니다 userdir.conf
. 이전 Apache 버전과 최신 버전에 대한 설정이 있음을 확인했습니다. 최신 버전을 실행하고 있다는 것을 알고 있으므로 최신 설정을 활성화했으며 이제 모든 것이 잘 작동합니다.
답변3
/etc/hosts
파일을 사용하면 임시 URL이 필요하지 않게 될 수도 있습니다 . 테마나 플러그인(있는 경우)에 전체 URL에 대한 참조가 있는 경우 웹사이트는 콘텐츠를 올바른 형식으로 표시하지 않습니다.
답변4
폴더에 검색( ) 권한이 없거나 파일에 읽기( ) 권한이 x
없을 가능성이 높습니다.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
해결 방법 1:
www-data
로그인한 사용자 그룹에 apache2 사용자(내 경우에는)를 추가합니다 . 이렇게 하면 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 관리자가 실수 some_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