Apache2: 'AH01630: klien ditolak oleh konfigurasi server'

429

Saya mendapatkan kesalahan ini ketika mencoba mengakses localhost melalui browser.

AH01630: client denied by server configuration

Saya memeriksa izin folder situs saya menggunakan:

sudo chmod 777 -R *

Ini file konfigurasi saya:

<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>

Hazem Hagrass
sumber
1
Apakah Anda menggunakan Apache 2.4 baru? Jalur mana yang memberikan kesalahan itu?
aadel
12
Sepertinya Anda perlu memperbarui konfigurasi Anda. Silakan lihat di sini: httpd.apache.org/docs/2.4/upgrading.html#run-time
aadel
7
chmod 777adalah kebiasaan yang sangat buruk, bahkan jika (seharusnya) hanya digunakan dalam contoh.
Antonis Christofides
3
chmod 777 tidak pernah jawabannya.
Aaron McMillin

Jawaban:

770

Jika Anda menggunakan Apache 2.4

Anda harus memeriksa izin dan menolak aturan

Lihat http://httpd.apache.org/docs/2.4/upgrading.html#access

Pada 2.2, kontrol akses berdasarkan nama host klien, alamat IP, dan karakteristik lain dari permintaan klien dilakukan menggunakan arahan Order, Allow, Deny, dan Satisfy.

Pada 2.4, kontrol akses tersebut dilakukan dengan cara yang sama seperti pemeriksaan otorisasi lainnya, menggunakan mod_authz_host modul baru.

Arahan baru Diperlukan :

2.2 konfigurasi:

Order allow,deny
Allow from all

2.4 konfigurasi:

Require all granted

Juga jangan lupa untuk me-restart server apache setelah perubahan ini ( # service httpd restart)

Jayakumar Bellie
sumber
2
Karya OSX 10.10 Yosemite menggunakan Apache 2.4
Matthew Herbst
2
Konfigurasi apa (yaitu, di mana "Memerlukan semua yang diberikan" pergi? Dalam beberapa file .conf?)
Alexis
1
Direktori @Alexis (atau lokasi). Lihat tangkapan layar di jawaban berikutnya.
pencekik
2
Dalam kasus saya, saya memiliki kesalahan dalam DocumentRootdan <Directory>jalur.
Roman Grinyov
4
Satu hal yang perlu diperhatikan: jika Anda merujuk konfigurasi secara online, kemungkinan mereka telah menggunakan keduanya Order allow,deny ...dan Require all granted. Itu tidak akan bekerja. Hanya perlu salah satunya tergantung pada versi Anda. Itulah yang menghentikan saya dari menyelesaikan masalah saya pada awalnya.
Wisnu Narang
299

Untuk semua direktori, tulis Require all grantedalih-alihAllow from all Sesuatu seperti

Memperbarui

Jika hal di atas tidak berhasil maka hapus juga baris yang disebutkan di bawah ini:

Pesanan mengizinkan, menolak

valera5505
sumber
14
Bekerja untuk saya setelah saya menghapus Order allow,denygaris juga.
kasperd
Perhatian: saat menggunakan HTTPS , mengkonfigurasi VirtualHost untuk port 443 , saya harus meniru konfigurasi yang sama <Location /media> Require all granted </Location>pada default-ssl.confuntuk CSS saya untuk dimuat. (Masalah saya adalah bahwa halaman login dapat diakses, tetapi tidak ada CSS atau file media lainnya dimuat ...)
yuric
1
Karya OSX 10.10 Yosemite menggunakan Apache 2.4
Matthew Herbst
7
Apakah saya satu-satunya yang BENCI ketika seseorang merusak konfigurasi Apache tanpa ada output di log. (Hai anak laki-laki, Allow from Alltelah pensiun karena .... alasan ...)
Warren P
Terima kasih - menghapus "Orde diizinkan, tolak" membantu
srvy
34

Periksa kembali apakah jalur DocumentRoot sudah benar. Itu bisa menyebabkan kesalahan ini.

Tim
sumber
3
Lebih khusus lagi, saya menemukan ini adalah masalah saya karena saya tidak memiliki garis miring dalam deklarasi DocumentRoot saya, tetapi memang menggunakan satu di <Directory>blok. Saya juga punya beberapa perbedaan kasus. Setelah saya membuat dua nilai salinan karbon satu sama lain (tanpa garis miring), itu bekerja dengan sempurna.
Adam Tuttle
Jika itu masalahnya (ya, juga terjadi di sini ....) Anda dapat menemukan garis follwing di apache/logs/error.log:AH00112: Warning: DocumentRoot [E:/xampp/htdocs/website/frontend/web] does not exist
Piemol
Tidak percaya saya dapat menemukan jawaban untuk kesalahan ketik saya juga :-) Terima kasih telah mengemukakannya, masalah saya adalah jalur yang tidak valid di file conf saya.
Taher
21

Saya membuat perubahan yang sama yang disarankan ravisorg ke OSX 10.10 Yosemite yang memutakhirkan Apache ke versi 2.4. Di bawah ini adalah perubahan yang ditambahkan ke http.conf.

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

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

Ini membuat saya benar-benar gila selama satu setengah hari, tetapi saya menemukan solusi jika semua solusi lain telah dicoba tidak berhasil.

Ini untuk macOS.

  • Buka Monitor aktivitas (pencarian sorotan untuk: aktivitas)
  • Dalam aktivitas monitor cari httpd yang merupakan layanan Apache
  • Pilih yang milik root dan klik X di kiri atas untuk menutupnya.

Pada saat itu saya segera berhenti mendapatkan 403 kesalahan dan semuanya mulai berfungsi seperti yang diharapkan. Yang aneh adalah saya bahkan tidak perlu me-restart apache itu hanya bekerja, saya kira itu me-restart sendiri ketika saya pergi ke localhost saya, saya jujur ​​tidak tahu tapi saya kira masalahnya adalah Apache tidak benar-benar me-restart ketika menggunakan apachectl me-restart, atau berhenti atau mulai. Semoga ini bisa membantu seseorang.

RAC
sumber
1
Setelah berjam-jam waktu terbuang inilah yang memecahkan masalah saya juga.
ever.wakeful
10

Masalahnya adalah di VirtualHost tetapi mungkin tidak

Wajibkan semua diberikan

Konfirmasikan konfigurasi Anda sudah benar, ini sampel yang benar masukkan deskripsi gambar di sini

Albert
sumber
Termasuk <Directory ...> ... </Directory>garis yang bekerja untuk saya karena saya menggunakan jalur direktori yang sebelumnya tidak ditentukan dalam konfigurasi Apache sebelumnya.
Don Wilson
4

Jika Anda mengekor log kesalahan dan memuat ulang halaman, Anda akan melihat beberapa informasi lebih lanjut tentang masalah yang sebenarnya.

Raih variabel lingkungan sehingga $ {APACHE_LOG_DIR} akan benar-benar berfungsi ...

source /etc/apache2/envvars

Kemudian buntut dan tonton ...

tail -f ${APACHE_LOG_DIR}/error.log
Shylo Hana
sumber
5
Ini adalah kesalahan dari log: 'AH01630: klien ditolak oleh konfigurasi server'
Hazem Hagrass
6
Jika Anda menambahkan LogLevel debugke VirtualHost, ini saran yang bagus, karena Anda akan melihat baris seperti "Wajib semua ditolak: ditolak", dan "<RequireAny>: ditolak" (yaitu jauh lebih berguna daripada hanya "klien ditolak oleh konfigurasi server", karena ini benar-benar memberitahu Anda konfigurasi mana !)
Darren Cook
4

Saya menyelesaikan diri saya setelah menghabiskan beberapa jam.

Saya menginstal Apache / 2.4.7 (Ubuntu) melalui buku pedoman di vagrant vm.

File /etc/apache2/apache2.conf tidak memiliki <VirtualHost *:80>elemen secara default.

Saya melakukan dua perubahan untuk menyelesaikannya

  1. ditambahkan <VirtualHost *:80>
  2. ditambahkan
    Opsi Indeks IkutiSymLinks
    AllowOverride semua
    Perbolehkan dari semua

lalu akhirnya saya baru saja boot vm ..

Giri Babu
sumber
4

Adakah yang berpikir tentang itu wamp server default tidak termasuk httpd-vhosts.conffile. Pendekatan saya adalah menghapus catatan di bawah ini

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

dalam httpd.conffile. Itu semuanya.

Heier
sumber
+1 Ini bekerja untuk saya juga, tetapi mungkin solusi yang lebih baik adalah menyimpan conf/extra/httpd-vhosts.conffile dan menggantinya Require localdenganRequire all granted
Alex Pandrea
4

dalam hal ini,

Saya menggunakan macOS Mojave (Apache / 2.4.34). Ada masalah dalam pengaturan virtual host di file /etc/apache2/extra/httpd-vhosts.conf. setelah menambahkan tag direktori yang diperlukan masalah saya hilang.

Wajibkan semua diberikan

Semoga struktur pengaturan host virtual penuh akan menyelamatkan Anda.

<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>

yang harus Anda lakukan mengganti MainProjectFolderName dengan ProjectFolderName Anda yang sebenarnya.

sh6210
sumber
2

Ini membuatku gila. Akhirnya menemukan apa masalahnya: Saya menggunakan jalur langsung untuk log kesalahan dan mereka salah.

Mengapa Apache memberikan pesan kesalahan yang kabur (dan salah)? Alih-alih menggunakan pesan kesalahan yang benar dan berguna seperti: Path untuk direktif ErrorLog "/wrong/path/and/filename.log" tidak valid.

Lagi pula, untuk memperbaiki pastikan arahan log kesalahan Anda terlihat seperti ini:

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

Jika Anda menggunakan Apache 2.4 di WampServer di OS windows.

Anda perlu membuka file https-vhosts.conf di notepad.

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

Jika Anda tidak dapat menemukan file di atas. periksa tangkapan layar di bawah ini Wampserver apacche 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>

Dalam kode di atas Ganti

Require local

dengan

Require all granted

Dan simpan itu. Mulai ulang layanan Apache dan coba lagi.

Dev titik koma
sumber
2

Bagi saya, saya benar-benar memperbarui aturan Perbolehkan dan Tolak berdasarkan standar 2.4.

Require all granted

Namun, ini masih menyebabkan saya menerima kesalahan AH01630 yang sama. Saya menemukan utas lainnya dan disarankan menginstal ulang apache2. Entah bagaimana ini berhasil! Jika ada yang peduli untuk menjelaskan mengapa, itu akan sangat membantu.

Kredit ke: AH01630: klien ditolak oleh konfigurasi server tetapi mengharuskan semua yang diberikan diatur (Apache 2.4, CentOs)

NewNewGreg
sumber
1

Jika Anda memiliki host https maka jangan lupa untuk membuat Require all grantedperubahan untuk ssl config juga.

Juga, terkadang berguna untuk memeriksa izin sebagai pengguna apache:

# 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
Putnik
sumber
1

Untuk Wamp 3 (Apache 2.4), selain menempatkan server online seperti yang dijelaskan dalam jawaban lain, dalam file Virtual Hosts conf/extra/httpd-vhosts.conf
Anda mungkin perlu mengganti

Require local

dengan

Require all granted



Ini berlaku jika httpd.confAnda miliki

Include conf/extra/httpd-vhosts.conf
Alex Pandrea
sumber
1

Saat menggunakan Ubuntu, periksa apakah modul CGI diaktifkan. Jika tidak:

sudo a2enmod cgi
hfmanson
sumber
Modul CGI perlu diaktifkan. Program akhirnya berhasil.
Steve R.
1

Pastikan bahwa konfigurasi khusus pengguna disertakan!

Jika tidak ada jawaban lain pada halaman ini untuk Anda bekerja, inilah yang saya temukan setelah berjam-jam berkeliaran.

Saya menggunakan konfigurasi khusus pengguna, dengan yang Sitesditentukan sebagai UserDirin saya /private/etc/apache2/extra/httpd-userdir.conf. Namun, saya dilarang akses ke titik akhir http://localhost/~jwork/.

Saya bisa melihat /var/log/apache2/error_logbahwa akses ke /Users/jwork/Sites/sedang diblokir. Namun, saya diizinkan untuk mengakses DocumentRoot, via http://localhost/. Ini menyarankan bahwa saya tidak memiliki hak untuk melihat ~jworkpengguna. Tapi sejauh yang saya tahu ps aux | egrep '(apache|httpd)'dan lsof -i :80, Apache berjalan untuk jworkpengguna, jadi ada sesuatu yang jelas tidak menulis dengan konfigurasi pengguna saya.

Diberi nama pengguna jwork, inilah file konfigurasi saya:

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

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

Konfigurasi ini sangat valid. Namun, saya menemukan bahwa konfigurasi pengguna saya tidak dimasukkan:

/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

Perhatikan bahwa ini adalah jalur default ke file conf userdir, tetapi seperti yang akan Anda lihat di bawah, ini dapat dikonfigurasi dalam httpd.conf. Pastikan baris berikut diaktifkan:

/private/etc/apache2/httpd.conf

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

# ...

LoadModule userdir_module libexec/apache2/mod_userdir.so
Jamie Birch
sumber
1

Bagi mereka yang terjebak pada kesalahan ini seperti saya dan tidak ada yang membantu dari atas: periksa apakah folder masalah dari error.log benar-benar ada di server Anda. Milik saya dihasilkan secara otomatis oleh Django di tempat yang salah (berantakan dengan root statis, lalu manage.py collectstatic). Tidak tahu mengapa orang tidak dapat menyebutkan kesalahan dengan benar.

Dmitry
sumber
Terima kasih telah mengingatkan saya untuk menggunakan otak saya, memperbaiki masalah saya. +1 haha
orangecaterpillar
0

Di samping tidak ada Orderdan Allowarahan yang disebutkan dalam jawaban lain, sadari bahwa ekspresi reguler yang tidak sesuai dengan DirectoryMatcharahan juga dapat menyebabkan kesalahan ini.

Jika jalur yang diminta adalah /home/user-foo1bar/www/myproject/pencocokan folloing tidak akan cocok

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

dengan demikian, bahkan konfigurasi akses yang valid dapat menyebabkan kesalahan ini.

coba-tangkap-akhirnya
sumber
0

Satu yang tidak jelas (yang baru saja mengatasinya), namun mungkin, penyebabnya adalah aturan internal mod_rewrite, dalam file konfigurasi utama (bukan .htaccess) yang menulis ke jalur yang ada di akar sistem file server. Katakanlah Anda memiliki /mediadirektori di situs Anda, dan Anda menulis ulang sesuatu seperti ini:

RewriteRule /some_image.png /media/some_other_location.png

Jika Anda memiliki /mediadirektori di root server Anda, penulisan ulang akan dicoba untuk itu (mengakibatkan kesalahan akses ditolak) daripada yang ada di direktori situs Anda, karena root sistem file diperiksa terlebih dahulu oleh mod_rewrite, untuk keberadaan direktori pertama di jalur, sebelum direktori situs Anda.

Nigel B. Peck
sumber
0

Saya mendapat satu lagi yang mungkin berguna bagi seseorang. Menerima pesan kesalahan yang sama setelah memutakhirkan dari PHP 5.6 => 7.0. Kami telah mengubah pengaturan unggah PHP, dan lupa untuk mengubahnya setelah disalin. Meskipun saya tidak mengunggah gambar pada saat itu, Silverstripe (CMS kami) menolak untuk menyimpan dan melempar kesalahan itu. Meningkatkan ukuran unggahan gambar dan langsung bekerja.

Andrew MacNaughton
sumber
0

Dalam hal ini membantu siapa pun yang mencari Google seperti saya, saya memiliki pesan kesalahan ini mencoba mengakses file SVG di server saya, misalnya https://example.com/images/file.svg . Jenis file lain tampak baik-baik saja, hanya SVG yang gagal.

Saya mencari-cari /etc/httpdfile conf dan memeriksa setiap require all deniedjenis konfigurasi, dan tidak dapat menemukan konfigurasi apa yang memiliki efek ini.

Saya mengaktifkan LogLevel untuk men-debug dalam konfigurasi VirtualHost dan dapat melihat mod_authz_core logging yang menetapkan ada efek 'Tuntut semua ditolak':

[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

Melalui pengujian buta saya memindahkan file ke root web root, dan menemukan saya kemudian dapat mengaksesnya di https://example.com/file.svg .. jadi hanya gagal di folder 'gambar'. Ini membawa saya ke file .htaccess di folder gambar yang saya tidak tahu ada di sana.

Ternyata Zen Cart 1.5 dilengkapi dengan file gambar / .htaccess yang memiliki:

# 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>

Ini sangat menjengkelkan dan saya harap ini bisa mengingatkan orang lain untuk memeriksa file .htaccess di setiap tingkat sistem file yang mengarah ke file yang Anda mengalami kesulitan mengakses jika ada semacam kebodohan yang terjadi.

Neek
sumber
0

Saya benar-benar menyelesaikan yang ini dengan menambahkan akses direktori ke entri: 80.

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

Sebelum semua orang 'keamanan' pada saya, dalam keadaan khusus saya ini bukan masalah keamanan.

Jika Anda menggunakan sumber daya jarak jauh, saya akan merekomendasikan untuk memastikan permintaan CURL Anda berjalan melalui HTTPS / TLS, kemudian entri direktori ini berjalan pada port 443.

AdheneManx
sumber
0

"Bug" ini sebenarnya adalah perilaku normal baru dari Apache 2.4. Dalam kasus saya, saya memiliki aturan yang sangat spesifik untuk menolak akses ke folder atau file apa pun dengan nama yang dimulai dengan ".", Jadi saya harus menetapkan pengecualian untuk folder publik tertentu yang memerlukan nama aneh tersebut.

Sebagai catatan, aturan penulisan ulang khusus saya adalah:

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

Aturan ini [F] menghapus semua yang dimulai dengan "." tapi .trusted, berkat keajaiban regex "?!" penyangkalan.

develCuy
sumber
0

Karena utas ini adalah hal pertama yang muncul ketika mencari kesalahan yang disebutkan, saya ingin menambahkan kemungkinan penyebab kesalahan ini: Anda mungkin telah mod_evasiveaktif dan klien yang melihat kesalahan ini hanya telah melewati batas yang dikonfigurasikan dalammod_evasive.conf

Ini terutama merupakan penyebab yang perlu diselidiki jika Anda tiba-tiba mendapatkan kesalahan ini untuk klien yang tidak memiliki masalah sebelumnya dan tidak ada yang lain yang berubah.

(jika mod_evasivepenyebabnya maka kesalahan akan hilang dengan sendirinya jika klien sementara berhenti mencoba mengakses situs; namun itu mungkin merupakan tanda bahwa Anda telah mengkonfigurasi batas terlalu ketat)

Arthur
sumber
0

Bagi saya, semua solusi yang diusulkan tidak akan berfungsi. Ini dapat membantu, jika Anda menggunakan cgi, fastcig atau fpm sebagai proxy Anda harus menambahkan lokasi di vhost Anda untuk menghindari masalah ini. Hal ini memungkinkan 404 untuk menjadi proksi melalui.

<Location />
require all granted
</Location>
Jean
sumber