Câu trả lời:
Cảm ơn các câu trả lời khác. Tôi đã giải quyết nó bằng cách thêm một máy chủ ảo mặc định mà không có bất kỳ quyền. Toàn cầu DocumentRoot
và ServerName
các tùy chọn phải khớp với các tùy chọn được chỉ định trong máy chủ ảo.
/etc/httpd/conf/httpd.conf
...
ServerName <server-ip>:80
DocumentRoot "/var/www/html"
<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
...
/etc/httpd/conf.d/default.conf
<VirtualHost *:80>
ServerName <server-ip>
DocumentRoot /var/www/html
</VirtualHost>
Bằng cách này, tôi nhận được một tin nhắn Cấm 403 khi máy chủ được truy cập trực tiếp bởi ip, đó chính xác là những gì tôi muốn. Sẽ tốt hơn nữa nếu tôi không cần /var/www/html
một thư mục hiện có cho điều đó, nhưng Apache phàn nàn nếu tôi chỉ định một cái gì đó giống như /dev/null
thay vào đó.
Tôi không chắc bạn muốn làm điều đó. Nếu không có vhost mặc định trong cấu hình apache, vhost được xác định đầu tiên sẽ trở thành mặc định .
Tất cả những gì bạn thực sự cần làm là mặc định phục vụ một trang trống.
Có và không.
Bạn có thể bình luận hoặc loại bỏ DocumentRoot
chỉ thị, không có vấn đề. Nhưng điều đó không đạt được nhiều, bởi vì sau đó nó sẽ mặc định vào thư mục mặc định PREFIX/htdocs/
nơi PREFIX được đặt khi bạn xây dựng apache.
Khi bạn có Virtualhost, thiết lập tất cả các yêu cầu không được xử lý bởi máy chủ ảo được cấu hình rõ ràng sẽ được xử lý bởi virtualhost mặc định (thường là yêu cầu đầu tiên, nhưng httpd -S
sẽ cho bạn biết).
Bất kỳ tệp cấu hình Apache nào có phần mở rộng .conf
nằm trong /etc/httpd/conf.d/
sẽ được đưa vào như một phần của cấu hình Apache. Do đó, để tắt cấu hình trang "Chào mừng" mặc định, chúng ta cần đổi tên cấu hình của nó/etc/httpd/conf.d/welcome.conf:
Bước một di chuyển tệp chào mừng mặc định:
sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.backup
Bước thứ hai khởi động lại dịch vụ Appache2
sudo systemctl restart httpd
Trong /etc/httpd/conf/httpd.conf, nếu chỉ thị Nghe của bạn là
Listen 80
Điều đó có nghĩa là
*:80
Bạn đã xác định một cặp <listener>
+ <servename>
trong /etc/httpd/conf/httpd.conf và /etc/httpd/conf.d/default.conf giống nhau: *:80
+ <server-ip>
. Vì vậy, Apache chỉ đưa một tài khoản vào.
Vì vậy, cấu hình vhost của bạn không sử dụng.
/Etc/httpd/conf/httpd.conf của bạn đủ để chặn quyền truy cập vào thư mục / var / www / html của bạn.
Chỉ cần thêm:
<Directory /var/www/html>
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
Vui lòng đọc tới https://httpd.apache.org/docs/2.4/en/vhosts/name-basing.html#ache :
Cách máy chủ chọn máy chủ ảo dựa trên tên thích hợp
Điều quan trọng là phải nhận ra rằng bước đầu tiên trong độ phân giải máy chủ ảo dựa trên tên là độ phân giải dựa trên IP. Độ phân giải máy chủ ảo dựa trên tên chỉ chọn máy chủ ảo dựa trên tên phù hợp nhất sau khi thu hẹp các ứng cử viên vào trận đấu dựa trên IP tốt nhất. Việc sử dụng ký tự đại diện (*) cho địa chỉ IP trong tất cả các chỉ thị Virtualhost làm cho ánh xạ dựa trên IP này không liên quan.
Khi có yêu cầu, máy chủ sẽ tìm đối số phù hợp nhất (cụ thể nhất) dựa trên địa chỉ IP và cổng được sử dụng bởi yêu cầu. Nếu có nhiều hơn một máy chủ ảo chứa kết hợp cổng và địa chỉ phù hợp nhất này, Apache sẽ so sánh thêm các chỉ thị ServerName và ServerAlias với tên máy chủ có trong yêu cầu.
Nếu bạn bỏ qua lệnh ServerName từ bất kỳ máy chủ ảo dựa trên tên nào, máy chủ sẽ mặc định thành một tên miền đủ điều kiện (FQDN) có nguồn gốc từ tên máy chủ hệ thống. Tên máy chủ được đặt ngầm này có thể dẫn đến kết hợp máy chủ ảo phản trực quan và không được khuyến khích.
Vhost dựa trên tên mặc định cho kết hợp IP và cổng Nếu không tìm thấy ServerName hoặc ServerAlias phù hợp trong tập hợp các máy chủ ảo chứa kết hợp địa chỉ IP và cổng phù hợp cụ thể nhất, thì máy chủ ảo được liệt kê đầu tiên phù hợp sẽ được sử dụng.
Chỉ cần thay đổi cổng mặc định thành:
Listen 80
Listen 8080 # any fake port
và để lại * .80 trong Virtualhost
Hoạt động với tôi với Apache2 và Centos 7
Nhiều ví dụ bạn có thể tìm thấy trong tài liệu . Hãy xem biến _default_.
Để vô hiệu hóa trang này, chúng tôi phải đổi tên tệp /etc/httpd/conf.d/welcome.conf thành một cái gì đó khác hoặc bạn có thể chỉ cần xóa nó nếu bạn không cần nó.
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup
Đảm bảo rằng Apache được khởi động lại (với quyền root) bằng lệnh:
khởi động lại hệ thống httpd