내 로컬 Debian에 Apache를 설정했습니다.제시설치했지만 VirtualHost를 작동시킬 수 없습니다. 액세스가 http://localhost
제대로 작동하고 표시됩니다.효과가있다!페이지.
그러나 액세스하려고 하면 http://test
403 Forbidden 오류가 표시됩니다.
이 서버에 / 액세스할 수 있는 권한이 없습니다.
내 구성은 매우 일반적으로 보입니다.
<VirtualHost *:80>
DocumentRoot "/home/johndoe/web/test"
ServerName test
<Directory "/home/johndoe/web/test">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
답변1
머리말:
이런 일이 발생하는 데에는 여러 가지 이유가 있으며 이 질문은 Stack Exchange에서 여러 번 요청되었습니다. 그러나 제가 아는 한 답변 중 어느 것도 (직접적으로) 이 질문을 다루거나 부정확하거나 오래된 정보를 기반으로 한 것이 아닙니다.
이러한 (올바르게 허용된) 답변 중 다수는 DocumentRoot
구성된 디렉토리와 포함된 파일 및 디렉토리의 권한 또는 소유권을 www-data
.
그러나 최신 Debian 또는 Ubuntu의 로컬 설치(예: 기본 웹 개발 목적)에 대해 이야기할 때 이는 더 이상 필요하지 않을 수 있습니다.
로그를 살펴보겠습니다!
오류 페이지 자체에는 매우 일반적인 메시지만 포함되어 있으므로 자세한 내용은 오류 로그를 확인해야 합니다.
sudo tail -f /var/log/apache2/error.log
이 tail
명령은 파일의 마지막 10줄을 출력하며, 이 -f
옵션을 사용하면 로그가 커짐에 따라 출력이 업데이트됩니다.
로그는 우리에게 무엇을 말해주는가?
client denied by server configuration: /home/johndoe/web/test
이것은 쉽습니다. 설명대로Apache: 서버 구성에 의해 클라이언트가 거부되었습니다.Require all granted
설정으로 구성을 업데이트 하면 됩니다 . 그러면 다음과 같습니다.
<VirtualHost *:80>
DocumentRoot "/home/johndoe/web/test"
ServerName test
<Directory "/home/johndoe/web/test">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
다음 명령을 사용하여 Apache를 다시 시작하는 것을 잊지 마십시오.
sudo service apache2 restart
오류가 지속됩니다...
그러나 로그 메시지가 변경되었습니다.
Symbolic link not allowed or link target not accessible: /home/johndoe/web/test
이 질문은 여러 가지 원인이 있을 수 있으므로 약간 복잡합니다. 실제 원인을 찾으려면 심볼릭 링크가 포함된 대상을 사용하지 않고 대신 대상을 직접 가리키도록 구성을 업데이트하는 것이 좋습니다. 이는 /home/johndoe/web
기호 링크이므로 /media/johndoe/crypt1/web
이제 구성은 다음과 같습니다.
<VirtualHost *:80>
DocumentRoot "/media/johndoe/crypt1/web/test"
ServerName test
<Directory "/media/johndoe/crypt1/web/test">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
고정되어 있나요?
로그 메시지가 더 설명적인 메시지로 변경되었을 수 있습니다. 내 경우에는 다음과 같이 표시됩니다.
access to / denied (filesystem path '/media/johndoe/crypt1') because search permissions are missing on a component of the path
여기에 다른 메시지가 표시되고 이미 작동하는 솔루션이 있는 경우 여기에 의견을 남기고 적절한 토론에 링크하여 다른 사람들도 올바른 정보를 찾을 수 있도록 하면 좋을 것입니다.
지금?
메시지에서 알 수 있듯이 경로의 하나 이상의 구성 요소를 통과할 수 없기 때문에 Apache는 경로에 완전히 액세스할 수 없습니다. 어떤 구성 요소가 문제를 일으킬 수 있는지 확인하려면 다음을 수행할 수 있습니다.
namei -m /media/johndoe/crypt1/web/test/
이 namei
명령은 경로 구성 요소를 분리 및 인쇄하고 -m
옵션을 사용하여 명령과 같은 스타일로 각 구성 요소의 모드 비트를 표시합니다 ls -l
.
나에게 출력은 다음과 같습니다.
f: /media/johndoe/crypt1/web/test/
drwxr-xr-x /
drwxr-xr-x media
drwxr-x--- johndoe
drwxr-xr-x crypt1
drwxr-xr-x web
drwxr-xr-x test
johndoe
디렉토리가 여기서 문제를 일으키는 것 같습니다 . 따라서 권한을 수정하기 전에 chmod
좀 더 자세히 살펴보겠습니다.
ls -ld /media/johndoe/
ls
옵션이 포함된 명령은 -d
목록 형식으로 디렉토리 정보(내용이 아닌)를 인쇄 합니다 -l
.
나에게는 다음과 같습니다.
drwxr-x---+ 3 root root 4096 May 28 00:00 /media/johndoe/
보시 +
다시피 추가 표시가 있습니다.액세스 제어 목록참가하다.
내가 아무 것도 설정하지 않았는지 확인하면서 마침내 올바른 방향을 가리켰습니다.전방십자인대나 혼자서. 게다가 미디어 마운트 지점도 직접 설정하지 않았기 때문에;저는 Nautilus를 사용하여 드라이브를 암호화하고 마운트합니다.
이렇게 하면 트릭을 수행할 수 있습니다.
따라서 이제 Nautilus가 마운트 지점을 엉망으로 만드는 대신 수동으로 마운트합니다.
1) 이미 마운트되어 있는 경우 제거합니다.
sudo umount /media/johndoe/crypt1
2) 바로 아래에 마운트 지점을 만듭니다 /media
.
sudo mkdir /media/crypt1
3) 장치 매핑을 찾아 UUID를 찾습니다.
ls -l /dev/mapper/
4) 다음에 따라 장치를 설치하십시오.
sudo mount /dev/mapper/luks-<UUID> /media/crypt1
5) 이에 따라 Apache 구성 및/또는 기호 링크를 업데이트합니다. 예를 들면 다음과 같습니다.
ln -s /media/crypt1/web/ ~/web
노트:
부팅할 때마다 드라이브를 암호화하고 마운트해야 한다는 점을 기억하세요. Stack Exchange에는 많은 정보가 있지만 다음을 추천할 수 있습니다.