Làm cách nào để tắt Virtualhost mặc định trong apache2?


10

Trong apache2 theo thiết kế, mọi yêu cầu http với Máy chủ không xác định sẽ được chuyển đến Virtualhost được tải đầu tiên. Có cách nào để vô hiệu hóa tính năng này? Nói cách khác, tôi muốn có một máy chủ web nơi người dùng chỉ có thể nhận được các định nghĩa Virtualhost được đặt tên rõ ràng. Bất kỳ tên máy chủ nào khác không được đề cập rõ ràng trong dòng ServerName hoặc ServerAlias ​​sẽ bị bỏ qua trong âm thầm.

Điều này có thể không?

Listen 80
NameVirtualHost *

<VirtualHost _default_:*>
# Anything matching this host should be silently ignored.
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

Cập nhật: Như được đề xuất bên dưới và các nơi khác, âm thầm bỏ qua một yêu cầu có thể không phải là một ý tưởng hay và có lẽ phá vỡ RFC cho HTTP. Tuy nhiên, do các máy chủ ảo được thiết kế để mô phỏng có nhiều máy chủ HTTP vật lý riêng biệt, nên cách tiếp cận bỏ qua im lặng dường như không hợp lý với tôi. Nó sẽ giống như lưu trữ ảo dựa trên IP và tường lửa một số IP (có lẽ không dành cho tất cả các máy khách).

Câu trả lời:


4

Tôi không chắc chắn rằng "thất bại âm thầm" là một ý tưởng tốt. Bạn nên cung cấp cho khách hàng ít nhất một số dấu hiệu về những gì đã xảy ra. Có lẽ bạn có thể gửi một lỗi "biến mất" http 410. Một cái gì đó như thế này nên thực hiện các mẹo:

RewriteRule ^.*$ - [G]

Ngoài ra, bạn sẽ có thể chỉ định một tài liệu lỗi 410 tùy chỉnh, có thể chỉ là một trang html trống.


Cuối cùng tôi cũng tự mình khám phá ra giải pháp này. Bạn nên thêm các dòng để tải mod_rewrite và "RewriteEngine On" lưu ý rằng chúng có thể không cần thiết. Họ đã cho tôi. :)
Harvey

2
Ngoài ra, vì chúng ta chỉ nói Cuốn hoặc Cấm và quan trọng hơn, "-" ngăn chặn sự thay thế, regex có thể đơn giản hơn nhiều:RewriteRule . - [F]
Harvey

17

Đây là một cách thay thế không liên quan đến quy tắc viết lại:

<VirtualHost _default_:*>
    <Location />
        Deny from all
        Options None
        ErrorDocument 403 Forbidden.
    </Location>
</VirtualHost>

2
Đây phải là giải pháp được chấp nhận. +1
Greg Schmit

Tôi không rõ ràng về giải pháp này. Tôi có một số tệp VHOST và tôi có tạo một tệp mới với tệp này không? Tôi đã thử điều đó và tôi đặt tên cho tệp 001.default.conf nhưng tôi vẫn chuyển hướng lại các tên miền phụ của mình.
Frantumn

@Frantumn Như đã lưu ý trong câu hỏi, "mọi yêu cầu http với Máy chủ không xác định sẽ được chuyển đến Virtualhost được tải đầu tiên ". Do đó, "mặc định" này <VirtualHost>phải được xác định trước trong cấu hình máy chủ. Chính xác tập tin nào phải ở phụ thuộc vào cấu hình của bạn. (Tuy nhiên, vấn đề "tên miền phụ được chuyển hướng" của bạn có thể là một vấn đề không liên quan.)
MrWhite

Huh. Khi sử dụng các tên miền khác trỏ đến máy chủ của tôi, nó không thực hiện 403, nó chỉ chọn virtualhost đầu tiên mà nó tìm thấy, mặc dù tên máy chủ không khớp
jjxtra

1

cái này làm việc cho tôi

<VirtualHost x.x.x.x:80 [x:x::x:x:x:x]:80>
  ServerName myactualservername.com
  ServerAlias *
  <Location />
    Deny from all
    Options None
    ErrorDocument 403 Forbidden.
  </Location>
</VirtualHost>

thay thế xxxx bằng ipv4 thực tế của bạn và ipv6
thay thế myactualservername.com bằng một trang web thực tế được phục vụ bởi máy

Tôi đang sử dụng máy chủ ảo dựa trên tên.
tín dụng cho giải pháp này được gửi tới
https://serverfault.com/a/82309/459796

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.