Apache 2.2에서 2.4로 마이그레이션 중인데 더 이상 문서 루트에 없는 파일에 액세스할 수 없습니다. 이는 고전적인 앨리어싱 문제입니다. 이 문제에 대해 상충되는 게시물을 많이 읽었고 공식 Apache 문서에서 제안한 대로 별칭 사용을 변경했지만 여전히 작동하지 않습니다. 문제를 해결하기 위해 로깅 수준을 가장 장황하게 설정했습니다. 즉, /etc/apache2/sites-enabled/000-default.conf 및 /etc/apache2.conf에서 디버깅을 수행했습니다.
두 컴퓨터의 /var/tmp에 있는 foo.txt에 액세스하려는 웹 페이지가 있습니다. 2.2를 사용하면 잘 액세스할 수 있지만 2.4를 사용하는 이 서버에서는 요청한 URL을 찾을 수 없습니다.라는 오류가 발생합니다. 폴더에 액세스하기 위해 2.2에서는 /etc/apache2/sites-enabled/default.conf, 2.4에서는 000-default.conf의 별칭을 사용하고 있으며 디렉터리 블록에 폴더를 정의했습니다.
나는 이것을 2.4의 000-default.conf에서 사용합니다:
''' <VirtualHost *:8000> ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/tmp/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
Header set Access-Control-Allow-Origin "*"
</Directory>
Alias /Dummy/ /var/tmp/
LogLevel debug
'''
나는 문제가 권한일지도 모른다고 생각했습니다. 왜냐하면 그것은 일반적으로 문제이기 때문입니다. 2.2 시스템에서는 폴더에 루트만 있고 잘 작동합니다(ls -all -d /var/tmp).
drwxrwxrwt 6 루트 루트 2200 10월 24일 16:41 /var/tmp
그리고 (ls -all /var/tmp/foo.txt):
-rw-r--r-- 1 루트 루트 805 10월 24일 16:42 foo.txt
내가 액세스하려는 폴더의 파일로 이동합니다.
2.4 시스템에서는 작동하지 않았기 때문에 폴더에 대해 다음을 시도했습니다.
drwxrwxrwt 9 www-data www-data 1440 10월 24일 16:44 /var/tmp
해당 폴더에서 액세스하려는 파일은 다음과 같습니다.
-rw-r--r-- 1 www-data www-data 836 10월 24일 16:45 foo.txt
첫 번째 예제는 2.2에서 제대로 실행되지만 두 번째 예제는 2.4에서 실패하여 다음과 같은 결과가 나타납니다.
찾을 수 없습니다. 요청한 URL을 이 서버에서 찾을 수 없습니다.
/var/log/apache2/access.log에서 다음을 얻습니다.
IP 주소 - - [24/Oct/2020:16:47:02 -0400] "GET /Dummy/foo.txt HTTP/1.1" 404 497 "-" "Mozilla/5.0(Windows NT 6.0) AppleWebKit/537.36(KHTML) ), Gecko 등) Chrome/49.0.2623.112 Safari/537.36"
/var/log/apache2/error.log에서 다음을 얻습니다.
''' [Sat Oct 24 16:52:01.154485 2020] [authz_core:debug] [pid 32675] mod_authz_core.c(820): [클라이언트 IP 주소: 34306] AH01626: 전체 권한 부여가 필요한 인증 결과: 허용됨
[Sat Oct 24 16:52:01.155003 2020] [authz_core:debug] [pid 32675] mod_authz_core.c(820): [클라이언트 IP 주소:34306] AH01626: 인증 결과: 승인됨
[2020년 10월 24일 토요일 16:52:01.155659] [core:info] [pid 32675] [클라이언트 IP 주소:34306] AH00128: 파일이 존재하지 않습니다: /var/tmp/foo.txt '''
내가 사용하는 URL은 다음과 같습니다.
http://IP 주소:8000/Dummy/foo.txt
별칭에 후행 /를 유지하려고 시도했지만 찾을 수 없다는 대신 권한 오류가 발생하여 후행 /를 복원했습니다. 구성 파일이 변경될 때마다 apache2를 다시 시작합니다.
예, 대상 파일이 존재합니다. 아직 기본 .htaccess 파일을 건드리지 않았습니다.
이 문제를 어떻게 해결할 수 있나요? ? ?
답변1
나는 당신이 apache 2.4로 변경할 뿐만 아니라 apache 2.4가 systemd에 의해 실행되고 apache2.service systemd 파일에 포함되어 있는 의미를 포함하고 있다고 생각합니다. 이는 시스템과 별도로 자체적 PrivateTmp=true
으로 갖게 됩니다 (참조/tmp
/var/tmp
시스템 실행(5)).
아파치가 보는 것은 /var/tmp
실제로 존재합니다/var/tmp/systemd-private-<long hash>-apache2.service-f00WPn/tmp
해결 방법은 지시문을 비활성화하거나 파일을 다른 폴더에 배치하는 것입니다. 파일이 다른 데몬에 의해 생성된 경우 JoinsNamespaceOf=
지시문을 사용하여 두 데몬이 동일한 /tmp
파일을 공유하도록 할 수 있습니다./var/tmp