Apache: máy khách bị từ chối bởi cấu hình máy chủ


150

Tôi đang nhận được

[Thứ ba ngày 24 tháng 4 12:12:55 2012] [lỗi] [máy khách 127.0.0.1] máy khách bị từ chối bởi cấu hình máy chủ: / labs / Project / Nebula / bin /

Cấu trúc thư mục của tôi trông giống như (Tôi đang sử dụng Symfony 2, nên có cấu trúc tương tự cho các khung web khác)

nhập mô tả hình ảnh ở đây

Tôi có thiết lập vhost như:

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

Tôi tự hỏi vấn đề là gì và làm cách nào để khắc phục nó?


1
@JiewMeng: Có lẽ bạn nên chấp nhận câu trả lời của Phil. Nó dường như là vấn đề với hầu hết các cài đặt Apache hiện nay (Apache 2.4). Cảm ơn.
dotancohen

Câu trả lời:


396

Apache 2.4.3 (hoặc có thể sớm hơn một chút) đã thêm một tính năng bảo mật mới thường dẫn đến lỗi này. Bạn cũng sẽ thấy một thông báo nhật ký có dạng "máy khách bị từ chối bởi cấu hình máy chủ". Tính năng này yêu cầu danh tính người dùng được ủy quyền để truy cập vào một thư mục. Nó được bật bởi DEFAULT trong httpd.conf gửi cùng với Apache. Bạn có thể thấy việc kích hoạt tính năng với chỉ thị

Require all denied

Điều này về cơ bản nói để từ chối truy cập cho tất cả người dùng. Để khắc phục sự cố này, hãy xóa chỉ thị bị từ chối (hoặc tốt hơn nhiều) thêm chỉ thị sau vào các thư mục bạn muốn cấp quyền truy cập vào:

Require all granted

như trong

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

9
cũng có thể cần phải thêm Satisfy AnysauRequire all granted
MarkHu

@MarkHu - bạn có thể giải thích sự cần thiết có thể có Satisfy anytrong bối cảnh này không? Tôi đang hỏi bởi vì tôi đang kéo tóc ra đây, và thêm điều này nó đã làm mọi thứ cho tôi. Điều kỳ lạ là ứng dụng đã hoạt động với mục nhập vhost hiện tại cho đến khi nâng cấp gần đây lên Apache 2.4.9. Weirder một lần nữa, là nó hoạt động tốt trên một máy chủ khác có cùng phiên bản ứng dụng / vhost và Apache / PHP. Các máy chủ khác nhau - AWS Linux và Ubuntu 14.10 tương ứng. Lạ thật ... Tôi đoán tôi cần so sánh httpd.confcác tệp của mỗi máy chủ để xem có sự khác biệt về cấu hình ở đó không ...
Darragh Enright

Ngoài ra, hãy kiểm tra htaccesstại đường bạn đang cố truy cập
Ujjwal Singh

Môi trường của tôi không hoạt động cho đến khi tôi quyết định sử dụng giải pháp @MarkHu Thỏa mãn bất kỳ. Cảm ơn!!!
Sơ đồ

ngay cả sau khi thay đổi để yêu cầu tất cả được cấp, nó vẫn hiển thị cùng một lỗi Truy cập bị từ chối.
Deepak

10

OK Tôi đang sử dụng sai cú pháp, tôi nên sử dụng

Allow from 127.0.0.1
Allow from ::1
...

1
Đối với apache> 2.4 điều này một mình không thể làm việc cho tôi. Nhưng nó hoạt động khi được kết hợp với Require all granted, như được đề xuất bởi @ Phil-L
Mugoma J. Okomba

5

Trong Apache 2.4, cú pháp ủy quyền truy cập cũ đã không được chấp nhận và được thay thế bằng một hệ thống mới bằng Yêu cầu .

Những gì bạn muốn sau đó là một cái gì đó như sau:

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

Điều này sẽ cho phép kết nối có nguồn gốc hoặc từ các máy chủ địa phương hoặc từ địa chỉ IP bắt đầu bằng "192.168.1".

Ngoài ra còn có một mô-đun mới có sẵn giúp Apache 2.4 nhận ra cú pháp cũ nếu bạn không muốn cập nhật cấu hình của mình ngay lập tức:

sudo a2enmod access_compat

1

Bạn có thể thử thay đổi "Cho phép từ 127.0.0 192.168.1 :: 1 localhost" thành "Cho phép từ tất cả". Nếu điều đó khắc phục vấn đề của bạn, bạn cần hạn chế ít hơn về nơi có thể yêu cầu nội dung


1

Đây là tệp lưu trữ ảo symfony 1.4 của tôi trên debian, hoạt động tốt.

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

Nếu bạn không hạn chế quyền truy cập vào một phạm vi ip cụ thể, ví dụ: localhost, hãy sử dụng điều này:

Allow from 127.0.0.0/8

Các mod_authz_host có trách nhiệm lọc dãy ip. Bạn có thể tra cứu những điều chi tiết trong đó.

Nhưng có lẽ vấn đề có thể liên quan đến một số loại cấu hình sai trong "apache2.conf" của bạn.

Trên hệ điều hành nào là apache đang chạy?


1

nếu bạn đang có

Allow from All

trong httpd.conf sau đó đảm bảo chúng tôi có

index.php

như trong dòng dưới đây trong httpd.conf

DirectoryIndex index.html index.php

1

Tôi gặp vấn đề này khi sử dụng Vesta CP và đối với tôi, thủ thuật đã xóa .htaccess và thử truy cập lại vào bất kỳ tệp nào.

Điều đó dẫn đến việc tái tạo tệp .htaccess và sau đó tôi có thể truy cập vào các tệp của mình.


0

Trong trường hợp của tôi, chìa khóa là:

AllowOverride All

trong định nghĩa vhost. Tôi hi vọng nó giúp ích cho ai đó.


-3

Mã này làm việc cho tôi ..

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

Hy vọng điều này sẽ giúp những người khác


1
Điều này tuyệt đối không nên được khuyến khích để thêm vào một cấu hình apache.
Ricky Mutschlechner 2/11/2015

Điều này cho phép apache truy cập mọi tệp trên máy tính. Rất tệ cho an ninh.
Deleet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.