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


429

브라우저를 통해 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>


1
새로운 Apache 2.4를 사용하고 있습니까? 어느 경로에서 오류가 발생합니까?
aadel

12
구성을 업데이트해야합니다. 여기를보세요 : httpd.apache.org/docs/2.4/upgrading.html#run-time
aadel


7
chmod 777예제에서 사용되는 경우에도 매우 나쁜 습관입니다.
Antonis Christofides

3
chmod 777은 결코 답이 아닙니다.
Aaron McMillin

답변:


770

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를 사용하여 다른 권한 확인과 동일한 방식으로 수행됩니다.

새로운 지침되고 필요 :

2.2 구성 :

Order allow,deny
Allow from all

2.4 구성 :

Require all granted

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


2
Apache 2.4를 사용하는 OSX 10.10 Yosemite의 작품
Matthew Herbst

2
의 구성 무엇 (? 즉, 일부의 .conf 파일에서 이동 "모든 허가 필요"않는 경우)
알렉시스

1
@Alexis 디렉토리 (또는 위치). 다음 답변에서 스크린 샷을 참조하십시오.
strangeman

2
내 경우에는 오류 DocumentRoot<Directory>경로가 있습니다.
로마 Grinyov

4
한 가지 알아 두어야 할 사항 : 온라인에서 구성을 참조하는 경우 두 가지를 모두 사용했을 가능성이 있습니다 Order allow,deny ... 와를Require all granted 있습니다. 작동하지 않습니다. 버전에 따라이 중 하나만 있으면됩니다. 그것이 처음에 문제를 해결하는 데 방해가 된 이유입니다.
비슈누 나랑

299

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

최신 정보

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

주문 허용, 거부


14
Order allow,deny라인을 제거하면 나를 위해 일했습니다 .
kasperd

주의 : 사용하는 동안 HTTPS 하는 구성 가상 호스트를 포트 443 , 나도 같은 CONFIGS을 복제했다 <Location /media> Require all granted </Location>default-ssl.conf내 CSS를로드 할 할. (내 문제는 로그인 페이지에 액세스 할 수 있지만 CSS 또는 다른 미디어 파일이로드되지
않았다는 것입니다

1
Apache 2.4를 사용하는 OSX 10.10 Yosemite의 작품
Matthew Herbst

7
누군가 로그에 출력없이 Apache 구성을 중단 할 때 나는 그것을 싫어하는 유일한 사람입니까? (이봐, 소년들, Allow from All.... 이유 때문에 은퇴했습니다.)
Warren P

감사합니다- "주문 허용, 거부"를 제거하는 데 도움이 됨
srvy

34

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


3
더 구체적으로 말하면, DocumentRoot 선언에 슬래시가 없지만 <Directory>블록 에서 하나를 사용했기 때문에 이것이 내 문제라는 것을 알았습니다 . 나는 또한 약간의 경우 차이가 있었다. 이 두 값을 서로 카본 카피로 만들면 (후행 슬래시없이) 완벽하게 작동했습니다.
Adam Tuttle

이 경우 (예, 여기에서도 발생했습니다 ....) 다음에서 다음과 같은 라인을 찾을 수 있습니다 apache/logs/error.log.AH00112: Warning: DocumentRoot [E:/xampp/htdocs/website/frontend/web] does not exist
Piemol

Cant는 오타 실수에 대한 답도 찾을 수 있다고 생각합니다.
Taher

21

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

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

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

11

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

이것은 macOS 용입니다.

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

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


1
몇 시간을 낭비한 후에도 문제가 해결되었습니다.
ever.wakeful

10

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

모든 권한 부여 필요

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


<Directory ...> ... </Directory>이전에 Apache 구성에서 이전에 정의되지 않은 디렉토리 경로를 사용하고 있었기 때문에 라인을 포함하여 나를 위해 일했습니다.
Don Wilson

4

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

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

source /etc/apache2/envvars

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

tail -f ${APACHE_LOG_DIR}/error.log

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

아마 이것을 확인하고 싶을 것입니다 : httpd.apache.org/docs/2.4/upgrading.html#access 그리고 이것을 : stackoverflow.com/questions/12759854/…
Shylo Hana

6
LogLevel debugVirtualHost에 추가 하면 "권장 거부 : 거부 됨"및 "<요구 사항> : 거부 됨"과 같은 행이 표시됩니다. 즉, "서버 구성으로 클라이언트 거부"보다 훨씬 유용합니다. 실제로 어떤 구성을 알려줍니다 !)
대런 쿡

4

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

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

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

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

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

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


4

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

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

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


+1 이것은 저에게도 효과가 있었지만 더 나은 해결책은 conf/extra/httpd-vhosts.conf파일 을 유지 하고 대체하는 것 Require local입니다.Require all granted
Alex Pandrea

4

나의 경우에는,

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으로 바꾸십시오.


2

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

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

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

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

2

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 서비스를 다시 시작한 후 다시 시도하십시오.


2

나를 위해 실제로 2.4 표준에 따라 허용 및 거부 규칙을 업데이트했습니다.

Require all granted

그러나 여전히 동일한 AH01630 오류가 발생합니다. 다른 스레드를 발견하고 apache2를 다시 설치하도록 제안했습니다. 어떻게 든 이것이 효과가있었습니다! 누군가 이유를 설명하고 싶다면 도움이 될 것입니다.

크레딧 : AH01630 : 서버 구성에 의해 클라이언트가 거부되었지만 모든 권한 부여가 설정되어 있어야합니다 (Apache 2.4, CentOs)


1

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

1

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

Require local

Require all granted



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

Include conf/extra/httpd-vhosts.conf

1

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

sudo a2enmod cgi

CGI 모듈을 활성화해야합니다. 프로그램이 마침내 작동했습니다.
Steve R.

1

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

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

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

1

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


내 뇌를 사용하도록 상기시켜 주셔서 감사합니다. +1 haha
orangecaterpillar

0

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

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

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

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


0

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

RewriteRule /some_image.png /media/some_other_location.png

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



0

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


0

이것이 내가했던 것처럼 인터넷 검색에 도움이되는 경우 https://example.com/images/file.svg 와 같은 서버의 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 파일을 확인하여 이러한 종류의 톰 바보가 발생하는 경우 액세스하는 데 문제가있는 파일로 이어질 수 있기를 바랍니다.


0

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

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

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

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


0

이 "버그"는 실제로 Apache 2.4의 새로운 정상적인 동작입니다. 필자의 경우 이름이 "."으로 시작하는 모든 폴더 또는 파일에 대한 액세스를 거부하는 매우 구체적인 규칙이 있으므로 이러한 이상한 이름이 필요한 특정 공용 폴더에 대해 예외를 설정해야했습니다.

레코드의 특정 재 작성 규칙은 다음과 같습니다.

RewriteRule "(?!\.trusted)(^|/)\." - [F]

이 규칙 [F]은 "."로 시작하는 모든 것을 생략합니다. 그러나 .trusted정규식 "?!"의 마술 덕분에 부정.


0

이 스레드는 언급 된 오류를 검색 할 때 가장 먼저 나타나는 것이기 때문에이 오류에 대한 다른 가능한 원인을 추가하고 싶습니다. mod_evasive활성 상태 일 수 있으며 클라이언트 가이 오류를보고있는 클라이언트는 단순히mod_evasive.conf

이는 이전에 문제가 없었고 다른 변경 사항이없는 클라이언트에 대해 갑자기이 오류가 발생하는 경우 조사 할 가치가있는 원인입니다.

( mod_evasive원인 인 경우 클라이언트가 일시적으로 사이트 액세스 시도를 중단하면 오류가 저절로 사라지지만 너무 엄격한 제한을 구성했다는 신호일 수 있습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.