Apache: ไคลเอ็นต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์


150

ฉันได้รับ

[อังคาร 24 เมษายน, 12:12:55 2012] [ข้อผิดพลาด] [ลูกค้า 127.0.0.1] ลูกค้าถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์: / labs / Projects / Nebula / bin /

โครงสร้างไดเรกทอรีของฉันดูเหมือน (ฉันใช้ Symfony 2 ควรเป็นโครงสร้างที่คล้ายกันสำหรับกรอบงานเว็บอื่น ๆ )

ป้อนคำอธิบายรูปภาพที่นี่

ฉันมีการตั้งค่า vhosts เช่น:

<VirtualHost nebula:80>
    DocumentRoot "/labs/Projects/Nebula/web/"
    ServerName nebula
    ErrorLog "/var/log/httpd/nebula-errors.log"
</VirtualHost>

<Directory "/labs/Projects/Nebula/">
    Options All
    AllowOverride All
    Order allow,deny
    Allow from 127.0.0 192.168.1 ::1 localhost
</Directory>

ฉันสงสัยว่าปัญหาคืออะไรและฉันจะแก้ไขได้อย่างไร


1
@JiewMeng: คุณน่าจะยอมรับคำตอบของฟิล ดูเหมือนว่าจะมีปัญหากับการติดตั้ง Apache ส่วนใหญ่วันนี้ (Apache 2.4) ขอบคุณ
dotancohen

คำตอบ:


396

Apache 2.4.3 (หรืออาจเร็วกว่านี้เล็กน้อย) เพิ่มคุณสมบัติความปลอดภัยใหม่ที่มักทำให้เกิดข้อผิดพลาดนี้ คุณจะเห็นข้อความบันทึกของฟอร์ม "ไคลเอนต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์" คุณลักษณะนี้ต้องการข้อมูลประจำตัวผู้ใช้ที่ได้รับอนุญาตในการเข้าถึงไดเรกทอรี ถูกเปิดใช้งานโดย DEFAULT ใน httpd.conf ที่มาพร้อมกับ Apache คุณสามารถดูการเปิดใช้งานคุณสมบัติได้ด้วยคำสั่ง

Require all denied

โดยทั่วไปจะบอกว่าจะปฏิเสธการเข้าถึงผู้ใช้ทั้งหมด ในการแก้ไขปัญหานี้ให้ลบคำสั่งที่ถูกปฏิเสธ (หรือดีกว่ามาก) เพิ่มคำสั่งต่อไปนี้ลงในไดเรกทอรีที่คุณต้องการให้สิทธิ์การเข้าถึง:

Require all granted

เช่นเดียวกับใน

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>

9
อาจต้องเพิ่มSatisfy AnyหลังจากRequire all granted
MarkHu

@ MarkHu - คุณสามารถอธิบายความจำเป็นที่เป็นไปได้Satisfy anyในบริบทนี้หรือไม่? ฉันถามเพราะฉันดึงผมออกมาที่นี่และเพิ่มสิ่งนี้มันทำให้ฉันทำงานได้ทุกอย่าง สิ่งที่แปลกเป็น app ได้ทำงานร่วมกับรายการ vhost 2.4.9ที่มีอยู่จนกว่าจะมีการปรับรุ่นอาปาเช่ที่ผ่านมาเพื่อ Weirder อีกครั้งคือมันทำงานได้ดีบนเซิร์ฟเวอร์อื่นที่มีแอพ / vhost และ Apache / PHP รุ่นเดียวกัน เซิร์ฟเวอร์ที่แตกต่างกัน - AWS Linux และ Ubuntu 14.10 ตามลำดับ แปลก ... ฉันเดาว่าฉันต้องเปรียบเทียบhttpd.confไฟล์ของแต่ละเซิร์ฟเวอร์เพื่อดูว่ามีความแตกต่างของการกำหนดค่าที่นั่นหรือไม่
Darragh Enright

ตรวจสอบhtaccessเส้นทางของคุณที่คุณพยายามเข้าถึงด้วย
Ujjwal Singh

สภาพแวดล้อมของฉันไม่ทำงานจนกว่าฉันจะตัดสินใจเลือก @MarkHu เพื่อตอบสนองทุกวิธีการแก้ปัญหา ขอบคุณ !!!
Neonigma

แม้หลังจากเปลี่ยนเป็นต้องได้รับอนุญาตทั้งหมดก็แสดงข้อผิดพลาดการเข้าถึงถูกปฏิเสธ
Deepak

10

ตกลงฉันใช้ไวยากรณ์ผิดฉันควรจะใช้

Allow from 127.0.0.1
Allow from ::1
...

1
สำหรับ apache> 2.4 อันนี้ไม่สามารถทำงานให้ฉันได้ แต่มันทำงานเมื่อรวมกับRequire all grantedตามที่แนะนำโดย @ Phil-L
Mugoma J. Okomba

5

ใน Apache 2.4 ไวยากรณ์การอนุมัติการเข้าถึงเก่าได้รับการคัดค้านและถูกแทนที่ด้วยระบบใหม่ที่ใช้ต้อง

สิ่งที่คุณต้องการนั้นเป็นดังนี้:

<Directory "/labs/Projects/Nebula/">
  Options All
  AllowOverride All
  <RequireAny>
    Require local
    Require ip 192.168.1
  </RequireAny>
</Directory>

ซึ่งจะช่วยให้การเชื่อมต่อที่มาทั้งจากพื้นที่ท้องถิ่นหรือจากที่อยู่ IP ที่ขึ้นต้นด้วย "192.168.1"

นอกจากนี้ยังมีโมดูลใหม่ที่ทำให้ Apache 2.4 รู้จักไวยากรณ์เก่าหากคุณไม่ต้องการอัปเดตการกำหนดค่าของคุณทันที:

sudo a2enmod access_compat

1

คุณลองเปลี่ยน "Allow from 127.0.0 192.168.1 :: 1 localhost" เป็น "Allow from all" หากวิธีนี้ช่วยแก้ไขปัญหาของคุณคุณจะต้องมีข้อ จำกัด น้อยลงเกี่ยวกับตำแหน่งที่สามารถขอเนื้อหาได้


1

นี่คือไฟล์โฮสต์เสมือน symfony 1.4 ของฉันบนเดเบียนซึ่งใช้งานได้ดี

  <Directory /var/www/sf_project/web/>
    Options All Indexes FollowSymLinks    
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

หากคุณไม่ต้องการ จำกัด การเข้าถึงช่วง IP เฉพาะเช่น localhost ให้ใช้สิ่งนี้:

Allow from 127.0.0.0/8

mod_authz_hostเป็นผู้รับผิดชอบสำหรับการกรองช่วง IP คุณสามารถค้นหาสิ่งที่มีรายละเอียดในนั้น

แต่ปัญหาอาจเกี่ยวข้องกับการตั้งค่าผิดพลาดใน "apache2.conf" ของคุณ

Apache ใช้ระบบปฏิบัติการใดอยู่


1

หากคุณกำลังมี

Allow from All

ใน httpd.conf จากนั้นให้แน่ใจว่าเรามี

index.php

เหมือนในบรรทัดด้านล่างใน httpd.conf

DirectoryIndex index.html index.php

1

ฉันมีปัญหานี้โดยใช้ Vesta CP และสำหรับฉันแล้วเคล็ดลับคือลบ. htaccess และพยายามเข้าถึงไฟล์ใด ๆ อีกครั้ง

นั่นเป็นผลมาจากการสร้างไฟล์. htaccess อีกครั้งจากนั้นฉันก็สามารถเข้าถึงไฟล์ของฉันได้



-3

รหัสนี้เหมาะสำหรับฉัน ..

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

หวังว่านี่จะช่วยผู้อื่น


1
สิ่งนี้ไม่ควรถูกเพิ่มเข้าไปในการตั้งค่าของ Apache
Ricky Mutschlechner

วิธีนี้ช่วยให้ Apache สามารถเข้าถึงไฟล์ทุกไฟล์ในคอมพิวเตอร์ แย่มากสำหรับความปลอดภัย
CoderGuy123
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.