development

Apache2 : 'AH01630 : 클라이언트가 서버 구성에 의해 거부되었습니다'

big-blog 2020. 2. 20. 23:29
반응형

Apache2 : 'AH01630 : 클라이언트가 서버 구성에 의해 거부되었습니다'


브라우저를 통해 localhost에 액세스하려고 할 때이 오류가 발생합니다.

AH01630: client denied by server configuration

다음을 사용하여 사이트 폴더 권한을 확인했습니다.

sudo chmod 777 -R *

내 구성 파일은 다음과 같습니다.

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /home/user-name/www/myproject
<Directory />
    Options FollowSymLinks
    AllowOverride all
    Allow from all
</Directory>

<Location />
  Allow from all
  Order Deny,Allow
</Location>

<Directory  /home/user-name/www/myproject/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride all
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride all
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>


Apache 2.4를 사용중인 경우

허용 및 거부 규칙을 확인해야합니다

http://httpd.apache.org/docs/2.4/upgrading.html#access를 확인하십시오 .

2.2에서는 클라이언트 호스트 이름, IP 주소 및 클라이언트 요청의 기타 특성을 기반으로하는 액세스 제어가 Order, Allow, Deny 및 Satisfy 지시문을 사용하여 수행되었습니다.

2.4에서 이러한 액세스 제어는 새 모듈 mod_authz_host를 사용하여 다른 권한 확인과 동일한 방식으로 수행됩니다.

새로운 지시문은 Require입니다 :

2.2 구성 :

Order allow,deny
Allow from all

2.4 구성 :

Require all granted

또한 이러한 변경 후 아파치 서버를 다시 시작하는 것을 잊지 마십시오 ( # service httpd restart)


모든 디렉토리에 대해 Require all granted대신 쓰기Allow from all 같은 것

최신 정보

위의 방법으로 문제가 해결되지 않으면 아래 언급 된 행을 제거하십시오.

주문 허용, 거부


DocumentRoot 경로가 올바른지 다시 확인하십시오. 이 오류가 발생할 수 있습니다.


ravisorg가 Apache를 2.4 버전으로 업그레이드하는 OSX 10.10 Yosemite에 제안한 것과 동일한 내용을 변경했습니다. 다음은 http.conf에 추가 된 변경 사항입니다.

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<Directory /Volumes/Data/Data/USER/Sites/>
    AllowOverride none
    Require all granted
</Directory>

이로 인해 하루 반 동안 견딜 수 없었지만 다른 모든 솔루션이 성공적으로 시도되지 않으면 해결책을 찾았습니다.

이것은 macOS 용입니다.

  • 활동 모니터로 이동 (스포트라이트 검색 : 활동)
  • 활동 모니터에서 Apache 서비스 인 httpd를 검색하십시오.
  • 루트에 속하는 것을 선택하고 왼쪽 상단의 X를 클릭하여 닫습니다.

그 시점에서 나는 즉시 403 오류가 발생하지 않고 모든 것이 예상대로 작동하기 시작했습니다. 이상한 것은 아파치를 다시 시작하지 않아도 방금 작동했습니다. 내 로컬 호스트에 갔을 때 자체적으로 다시 시작된 것 같습니다. 솔직히 모르겠지만 문제는 apachectl restart를 사용할 때 Apache가 실제로 다시 시작되지 않는다는 것입니다. 중지하거나 시작하십시오. 이것이 누군가를 돕기를 바랍니다.


문제는 VirtualHost에 있지만 아마도 그렇지 않습니다.

모든 권한 부여 필요

구성 이 올바른지 확인 하십시오. 올바른 샘플이 있습니다.여기에 이미지 설명을 입력하십시오


오류 로그에 꼬리를 붙이고 페이지를 다시로드하면 정확한 문제에 대한 추가 정보가 표시됩니다.

$ {APACHE_LOG_DIR}이 실제로 작동하도록 환경 변수를 가져옵니다 ...

source /etc/apache2/envvars

그런 다음 꼬리를보고 ...

tail -f ${APACHE_LOG_DIR}/error.log

몇 시간을 보낸 후 스스로를 해결했습니다.

vagrant vm의 coookbook을 통해 Apache / 2.4.7 (Ubuntu)을 설치했습니다.

/etc/apache2/apache2.conf 파일에는 <VirtualHost *:80>기본적으로 요소 가 없습니다 .

나는 그것을 끝내기 위해 두 가지 변경을했다.

  1. 추가 <VirtualHost *:80>
  2. 추가
    옵션 색인 FollowSymLinks
    AllowOverride all 모두에서
    허용

마지막으로 방금 vm.을 부팅했습니다.


누구든지 그 wamp 서버 기본값이 httpd-vhosts.conf파일을 포함하지 않는다고 생각 했습니까 ? 내 접근 방식은 아래 메모를 제거하는 것입니다

 conf
  # Virtual hosts
  Include conf/extra/httpd-vhosts.conf

에서 httpd.conf파일. 그게 다야.


나의 경우에는,

macOS Mojave (Apache / 2.4.34)를 사용하고 있습니다. /etc/apache2/extra/httpd-vhosts.conf 파일의 가상 호스트 설정에 문제가있었습니다. 필요한 디렉토리 태그를 추가 한 후 내 문제가 사라졌습니다.

모든 권한 부여 필요

전체 가상 호스트 설정 구조가 절약되기를 바랍니다.

<VirtualHost *:80>
    DocumentRoot "/Users/vagabond/Sites/MainProjectFolderName/public/"
    ServerName project.loc

    <Directory /Users/vagabond/Sites/MainProjectFolderName/public/>
        Require all granted
    </Directory>

    ErrorLog "/Users/vagabond/Sites/logs/MainProjectFolderName.loc-error_log"
    CustomLog "/Users/vagabond/Sites/logs/MainProjectFolderName.loc-access_log" common
</VirtualHost>

MainProjectFolderName을 정확한 ProjectFolderName으로 바꾸십시오.


이것은 나를 미치게했다. 마지막으로 문제가 무엇인지 알아 냈습니다. 오류 로그에 직접 경로를 사용하고 있었고 잘못되었습니다.

Apache가 왜 모호하고 잘못된 오류 메시지를 표시합니까? 대신 다음과 같은 정확하고 유용한 오류 메시지를 사용하십시오. ErrorLog 지시문의 경로 "/wrong/path/and/filename.log"가 잘못되었습니다.

어쨌든, 수정하려면 오류 로그 지시문이 다음과 같아야합니다.

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Windows OS의 WampServer에서 Apache 2.4를 사용중인 경우

당신은 열 필요가 HTTPS-vhosts.conf의 메모장에서 파일을.

C:\wamp64\bin\apache\apache2.4.37\conf\extra\https-vhosts.conf 

위의 파일을 찾을 수없는 경우 아래 스크린 샷을 확인하십시오Wampserver Apache 2.4 httpd-vhosts

 <VirtualHost *:80>
     ServerName localhost
     DocumentRoot c:/wamp64/www
     <Directory  "c:/wamp64/www/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

위의 코드에서 바꾸기

Require local

Require all granted

그리고 저장하십시오. Apache 서비스를 다시 시작한 후 다시 시도하십시오.


https 호스트가 있다면 Require all grantedssl 구성도 변경 하는 것을 잊지 마십시오 .

또한 때때로 아파치 사용자로서 권한을 확인하는 것이 유용합니다.

# ps -eFH | grep http # get the username used by httpd
...
apache   18837  2692  0 119996 9328   9 10:33 ?        00:00:00     /usr/sbin/httpd -DFOREGROUND
# su -s/bin/bash apache # switch to that user
bash-4.2$ whoami
apache
bash-4.2$ cd /home
bash-4.2$ ls
bash-4.2$ cd mysite.com
bash-4.2$ ls
bash-4.2$ cat file-which-does-not-work.txt

Wamp 3 (Apache 2.4)의 경우 다른 답변에 설명 된대로 서버를 온라인 상태로 두는 것 외에 가상 호스트 파일 conf/extra/httpd-vhosts.conf
에서 교체해야 할 수도 있습니다.

Require local

Require all granted



httpd.conf당신이 가지고있는 경우에 적용됩니다

Include conf/extra/httpd-vhosts.conf

사용자 별 구성이 포함되어 있는지 확인하십시오!

이 페이지에 나와있는 다른 답변이 없다면 몇 시간 동안 실수를 한 후에 나왔던 것입니다.

Sitesmy 지정된 사용자 별 구성을 사용 UserDir했습니다 /private/etc/apache2/extra/httpd-userdir.conf. 그러나 엔드 포인트에 대한 액세스가 금지되었습니다 http://localhost/~jwork/.

/var/log/apache2/error_log대한 액세스 /Users/jwork/Sites/가 차단되고 있음을 알 수있었습니다 . 그러나를 통해 DocumentRoot에 액세스 할 수있었습니다 http://localhost/. 이것은 ~jwork사용자 를 볼 수있는 권한이 없음을 나타냅니다 . 그러나 지금까지 내가 말할 수있는대로 ps aux | egrep '(apache|httpd)'lsof -i :80아파치가 출마했다, jwork뭔가 분명히 내 사용자 구성을 작성하지 그래서, 사용자.

이라는 사용자 jwork에게 다음과 같은 구성 파일이 있습니다.

/private/etc/apache2/users/jwork.conf

<Directory "/Users/jwork/Sites/">
    Require all granted
</Directory>

이 구성은 완벽하게 유효합니다. 그러나 사용자 구성이 포함되지 않은 것으로 나타났습니다.

/private/etc/apache2/extra/httpd-userdir.conf

## Note how it's commented out by default.
## Just remove the comment to enable your user conf.
#Include /private/etc/apache2/users/*.conf

이것은 userdir conf 파일의 기본 경로이지만 아래에서 볼 수 있듯이에서 구성 할 수 있습니다 httpd.conf. 다음 라인이 사용 가능한지 확인하십시오.

/private/etc/apache2/httpd.conf

Include /private/etc/apache2/extra/httpd-userdir.conf

# ...

LoadModule userdir_module libexec/apache2/mod_userdir.so

다른 답변에서 언급 된 누락 OrderAllow지시문 외에도 지시문의 일치하지 않는 정규 표현식 DirectoryMatch으로도이 오류가 발생할 수 있습니다.

요청 된 경로가 /home/user-foo1bar/www/myproject/다음과 일치하면 일치하지 않습니다.

<DirectoryMatch "/home/user-[a-z]+/www/myproject/">
...
</DirectoryMatch>

따라서 유효한 액세스 구성이라도이 오류가 발생할 수 있습니다.


하나의 모호한 (방금 처리 한) 가능한 원인은 서버 파일 시스템의 루트에있는 경로에 쓰는 기본 구성 파일 (.htaccess 아님)의 내부 mod_rewrite 규칙입니다. 당신이이 말 /media귀하의 사이트에 디렉토리를, 당신은 다음과 같이 재 작성 :

RewriteRule /some_image.png /media/some_other_location.png

/media서버 루트에 디렉토리 가있는 경우 , 파일 시스템 루트가 mod_rewrite에 의해 먼저 검사되므로 존재 여부에 대해 사이트 디렉토리에있는 것이 아니라 다시 쓰기를 시도합니다 (액세스 거부 오류 발생). 경로의 첫 번째 디렉토리 중 사이트 디렉토리 앞에 있습니다.


문제는 지시문이 <디렉토리> 아래에 있지 않을 수 있습니다

https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html#requiredirectives

지시문은 <Directory>, <Files> 또는 <Location> 섹션과 .htaccess 파일 내에서 참조되어 서버의 특정 부분에 대한 액세스를 제어 할 수 있습니다. 클라이언트 호스트 이름 또는 IP 주소를 기반으로 액세스를 제어 할 수 있습니다.


누군가에게 도움이 될만한 다른 것을 얻었습니다. PHP 5.6 => 7.0에서 업그레이드 한 후 동일한 오류 메시지가 표시되었습니다. 우리는 PHP 업로드 설정을 변경했으며, 복사 한 후에 변경하는 것을 잊었습니다. 당시 이미지를 업로드하지 않았지만 Silverstripe (CMS)는 해당 오류를 저장하고 던지는 것을 거부했습니다. 이미지 업로드 크기가 증가했으며 곧바로 작동했습니다.


Ubuntu를 사용할 때 CGI 모듈이 활성화되어 있는지 확인하십시오. 그렇지 않은 경우 :

sudo a2enmod cgi

이 오류가 발생하여 위와 같이 도움이되지 않은 사람들은 error.log의 문제 폴더가 실제로 서버에 있는지 확인하십시오. Django가 광산을 잘못된 곳에서 자동으로 생성했습니다 (정적 루트로 엉망이되었습니다 manage.py collectstatic). 왜 오류의 이름을 올바르게 지정할 수 없는지 모릅니다.


이것이 나와 같이 인터넷 검색을 도와주는 사람이라면이 오류 메시지가 내 서버의 SVG 파일에 액세스하려고합니다 (예 : https://example.com/images/file.svg) . 다른 파일 형식은 정상적으로 보였고 SVG 만 실패했습니다.

나는 /etc/httpdconf 파일을 require all denied찾아서 모든 유형의 구성을 확인했지만 어떤 구성 이이 효과를 가지고 있는지 찾을 수 없었습니다.

VirtualHost 구성에서 LogLevel을 디버깅하도록 설정했으며 '모두 거부 필요'가 있음을 지정하는 mod_authz_core 로깅을 볼 수 있습니다.

[Mon Jun 10 13:09:54.321022 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of Require all denied: denied
[Mon Jun 10 13:09:54.321038 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of <RequireAny>: denied
[Mon Jun 10 13:09:54.321082 2019] [authz_core:error] [pid 23459:tid 140576341206784] [client 127.0.0.1:54626] AH01630: client denied by server configuration: /home/blah/htdocs/images/file.svg

블라인드 테스트를 통해 파일을 웹 루트의 루트로 옮긴 다음 https://example.com/file.svg 에서 액세스 할 수 있다는 것을 알았 으므로 'images'폴더에서만 실패했습니다. 이로 인해 이미지 폴더에 .htaccess 파일이 생겼습니다.

Zen Cart 1.5는 다음과 같은 images / .htaccess 파일과 함께 제공됩니다.

# deny *everything*
 <FilesMatch ".*">
   <IfModule mod_authz_core.c>
     Require all denied
   </IfModule>
   <IfModule !mod_authz_core.c>
     Order Allow,Deny
     Deny from all
   </IfModule>
 </FilesMatch>

 # but now allow just *certain* necessary files:
 <FilesMatch "(?i).*\.(jpe?g|gif|webp|png|swf)$" >
   <IfModule mod_authz_core.c>
     Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
     Order Allow,Deny
     Allow from all
   </IfModule>
 </FilesMatch>

이것은 매우 성가신 일 이며 다른 사람들이 파일 시스템의 모든 수준에서 .htaccess 파일을 확인하여 이러한 종류의 톰 바보가 발생하는 경우 액세스하는 데 문제가있는 파일로 연결되도록 상기시켜 줄 수 있기를 바랍니다.


실제로 디렉토리 액세스를 : 80 항목에 추가 하여이 문제를 해결했습니다.

 <Directory "c:/whatever-directory-you-use/">
    AllowOverride All
    Require all granted
</Directory>

모든 사람이 나에게 모든 '보안'을 갖기 전에 특정 상황에서 이것은 보안 문제가 아닙니다.

원격 리소스를 사용하는 경우 CURL 요청이 HTTPS / TLS를 통해 전달되는지 확인하는 것이 좋습니다.이 디렉토리 항목은 443 포트로 전달됩니다.

참고 URL : https://stackoverflow.com/questions/18392741/apache2-ah01630-client-denied-by-server-configuration



반응형