2.4에 필요한 파일을 업데이트했는데도 웹을 통한 파일에 대한 원격 액세스가 Apache 2.2에서는 작동하지만 2.4에서는 작동하지 않는 이유는 무엇입니까?

2.4에 필요한 파일을 업데이트했는데도 웹을 통한 파일에 대한 원격 액세스가 Apache 2.2에서는 작동하지만 2.4에서는 작동하지 않는 이유는 무엇입니까?

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

관련 정보