Xử lý mặc định cho các tên miền / tên miền phụ chưa từng có trong Apache


12

Tôi có một cấu hình Apache2 với nhiều Virtualhost. DNS của tôi được đặt để chấp nhận *.<domain>.<tld>trên nhiều tên miền. Mọi thứ đều hoạt động chính xác nhưng nếu tôi truy cập, something-random-here.example.comtôi dường như nhận được một Virtualhost không hợp lệ được chọn (tôi đoán là cái đầu tiên hoặc cuối cùng nó tìm thấy). Có cách nào để bảo Apache sử dụng các quy tắc nhất định nếu không có mục nào trong Virtualhost khớp với tên miền hoặc tên miền phụ không? Tôi muốn trả lại 404.

Câu trả lời:


12

Apache sử dụng virtualhost đầu tiên nếu không có tên phù hợp. Chỉ cần định cấu hình một Virtualhost mới là cái đầu tiên có tên ngẫu nhiên, hiển thị bất cứ thứ gì bạn thích - hoặc trả lại trang 404.


Cảm ơn nhưng bạn có thể vui lòng giải thích? Tôi không thể làm việc này.
Ryall

2
Các tập tin cấu hình apache2 của bạn được bố trí như thế nào? Hoặc bạn sử dụng hệ điều hành nào? Apache đọc cấu hình theo một thứ tự nhất định và Virtualhost đầu tiên mà nó nhìn thấy là cấu hình mặc định. Nó nhận được tất cả lưu lượng truy cập từ tên máy chủ không xác định. Vì vậy, nếu bạn có một tệp cấu hình duy nhất, Virtualhost đầu tiên là nó. Nếu bạn có nhiều cái, như trên hầu hết các linux, nó có thể là cái được gọi là 0default hoặc như vậy ...
Moritz Cả

Tôi đặt một số cấu hình mặc định trong ports.conf. Nó không hoạt động vì tôi đã cố khớp *: 80 khi tôi đang sử dụng <ip>: 80 trên các máy chủ ảo của mình. Thay vào đó tôi phải tạo một mục mặc định riêng cho từng IP và nó hoạt động ngay bây giờ.
Ryall

Cả tập tin v-host đầu tiên hoặc cuối cùng của tôi đều được sử dụng. Tôi nghĩ rằng apache đã thay đổi.
Cobolt

4

Wildcard bao gồm các tệp cấu hình trang web của bạn:

Include path/to/site/confs/*httpd.conf

Sắp xếp các tệp conf trang web của bạn để chúng được tải theo thứ tự dự kiến. Thí dụ...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

Vân vân...

Apache sẽ đọc chúng theo thứ tự. Sau đó, tạo một cái sẽ luôn tải lần cuối để bắt bất kỳ máy chủ ảo chưa từng có nào và trả về 404 thay vì tải một trang mặc định.

99-Catchall-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Hãy chắc chắn thay thế các cổng bằng bất kỳ cổng nào mà httpd của bạn lắng nghe. Hoặc nếu bạn có httpd lắng nghe trên các giao diện cụ thể, bạn sẽ cần thêm một mục thu hút cho từng giao diện, như vậy:

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Hi vọng điêu nay co ich. Tôi sử dụng phương pháp này để tải các trang web theo thứ tự tôi chỉ định và ngăn chặn các máy chủ ảo chưa từng có tải một trang web không mong muốn ngoài ý muốn.


không nên xóa "ServerAlias ​​*" khỏi quy tắc bắt tất cả?
Ahm3d cho biết

Tôi cho rằng nó sẽ không quan trọng. Nếu không có máy chủ ảo nào trước máy khai thác xử lý yêu cầu, chúng sẽ trả về phản hồi 404. Tôi không thấy lý do mà ServerAlias ​​* sẽ phải bị xóa, nhưng chúng có thể cụ thể không cần thiết.
Jason Slobotski

0

Như đã Moritz Bothđề cập, Apache2 sẽ sử dụng máy chủ ảo đầu tiên mà nó tìm thấy nếu nó không khớp với bất kỳ thứ gì bạn yêu cầu.

Khi bạn cài đặt Apache2 lần đầu tiên, có một trang web mặc định rằng bạn có thể sử dụng làm mẫu, sửa đổi hoặc xóa và tôi luôn tự hỏi 000-default.conf thực sự dùng để làm gì, vì chúng cũng có default.conf. Sau khi đọc những gì đã Moritz Bothnói, tất cả có ý nghĩa hơn bây giờ.

Những gì tôi đã làm cho máy chủ của mình là sao chép cấu hình cho tên máy chủ mặc định (trang web) sang tệp 000-default.conf và a2ensite 000-default.

Bây giờ, mỗi khi có một yêu cầu tên miền chưa từng có đối với trang web của tôi, nó sẽ phục vụ trang 000 mặc định, đây chỉ là một bản sao của trang mặc định thực tế của tôi.


1
Tôi cũng làm như vậy nhưng máy chủ không khớp / mặc định của tôi sẽ chuyển hướng đến trang web cấp cao nhất phù hợp cũng thay đổi URL được hiển thị thành đúng.
ivanivan

Đó là một ý tưởng thực sự tuyệt vời! Tôi đã không nghĩ về điều đó. Tôi chắc chắn sẽ triển khai trang web của mình như vậy :)
Nhà phát triển Newteq

Vì một số lý do, tôi dường như không thể chuyển ssl (trang mặc định) của mình để chuyển hướng. Tôi có <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> nhưng url vẫn giữ nguyên. Tôi đã làm tương tự cho phiên bản không ssl và nó chuyển hướng chính xác. Có ý kiến ​​gì không?
Nhà phát triển Newteq
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.