Giải pháp là trên tài liệu Apache 2.2 trên chỉ thị Virtualhost :
Cú pháp: ... (...) Addr có thể là:
- Địa chỉ IP của máy chủ ảo;
- Một tên miền đủ điều kiện cho địa chỉ IP của máy chủ ảo (không được khuyến nghị);
- Ký tự * , chỉ được sử dụng kết hợp với NameVirtualhost * để khớp với tất cả các địa chỉ IP; hoặc là
- Chuỗi _default_ , chỉ được sử dụng với lưu trữ ảo IP để bắt các địa chỉ IP chưa từng có.
Có hai cách xử lý Virtualhost tồn tại, Virtualhosting dựa trên tên và Virtualhosting dựa trên IP.
Với các máy chủ ảo dựa trên tên được đặt tên, bạn có một danh sách các máy chủ ảo, mỗi máy chủ quản lý một hoặc một số tên miền và mỗi tên miền được liên kết với một cặp listening IP:port
. *
là một giá trị đặc biệt có nghĩa là tất cả các IP trên máy chủ này . Virtualhost mặc định là cái được khai báo đầu tiên trong danh sách này cho mỗi địa chỉ nghe đã cho.
Với Virtualhosts dựa trên IP, lệnh ServerName
của Virtualhost không được sử dụng, thông tin quan trọng là IP nghe (và cổng) và Virtualhost mặc định là cái đầu tiên khớp với IP xử lý yêu cầu đến ..
Vì vậy, với một cấu hình virtualhosting có tên:
<Virtualhost *:80> with ServerName foo.com
có nghĩa là "trên tất cả các IP được quản lý trên máy chủ này", "trên cổng 80", "nếu tiêu đề máy chủ yêu cầu là foo.com" Tôi sẽ sử dụng virtualhost này
<Virtualhost *:*> with Servername foo.com
có nghĩa là "trên tất cả các IP được quản lý trên máy chủ này", "trên tất cả các cổng", "nếu tiêu đề máy chủ yêu cầu là foo.com" Tôi sẽ sử dụng virtualhost này
<Virtualhost 10.0.0.2:*> with Servername foo.com
có nghĩa là "cho yêu cầu đến từ giao diện mạng 10.0.0.2 của tôi", "trên tất cả các cổng", "nếu tiêu đề máy chủ yêu cầu là foo.com" Tôi sẽ sử dụng virtualhost này
<Virtualhost _default_:*> with Servername foo.com
: không nên được sử dụng với virtualhosting dựa trên tên
Và trên một Virtualhosting dựa trên IP:
<Virtualhost 10.0.0.2:*>
có nghĩa là "Tôi sẽ sử dụng virtualhost này cho yêu cầu đến trên giao diện 10.0.0.2 của tôi"
<Virtualhost _default_:443>
có nghĩa là "Tôi sẽ sử dụng virtualhost này cho tất cả các giao diện mạng khác trên máy chủ của tôi để yêu cầu đến cổng 443"
<Virtualhost _default_:*>
có nghĩa là "Tôi sẽ sử dụng virtualhost này cho tất cả các giao diện mạng khác trên máy chủ của tôi, nếu nó không phù hợp với quy tắc trước đó và nếu tiêu đề máy chủ yêu cầu không được khớp với một virtualhost dựa trên có tên"
Vì vậy, đó là tất cả về việc xác định một Virtualhost bắt tất cả. Tài liệu cho biết thêm:
Khi sử dụng lưu trữ ảo dựa trên IP, tên đặc biệt _default_
có thể được chỉ định trong trường hợp máy chủ ảo này sẽ khớp với bất kỳ địa chỉ IP nào không được liệt kê rõ ràng trong một máy chủ ảo khác. Trong trường hợp không có bất kỳ _default_
máy chủ ảo nào , cấu hình máy chủ "chính", bao gồm tất cả các định nghĩa bên ngoài bất kỳ phần Virtualhost nào, được sử dụng khi không có kết quả trùng khớp IP. (Nhưng lưu ý rằng bất kỳ địa chỉ IP nào khớp với chỉ thị NameVirtualhost sẽ không sử dụng cấu hình máy chủ "chính" cũng như _default_
máy chủ ảo. Xem tài liệu lưu trữ ảo dựa trên tên để biết thêm chi tiết.)
Vì vậy, sau tất cả mọi thứ, mọi thứ trở nên khá "rõ ràng" rằng việc trộn các máy chủ ảo dựa trên IP và tên có thể trở thành một mớ hỗn độn. Với Virtualhosting dựa trên tên 2.2 2.2 chỉ được sử dụng nếu NameVirtualhost <something>
được sử dụng.
Nhưng với phiên bản Apache 2.4 mới, mọi thứ thực sự dễ hiểu hơn, không cần NameVirtualhost
khai báo. Lệnh NameVirtualhost không còn có tác dụng gì ngoài việc phát ra cảnh báo. Bất kỳ kết hợp địa chỉ / cổng nào xuất hiện trong nhiều máy chủ ảo đều được coi là máy chủ ảo dựa trên tên . Không có mặc dù phức tạp hơn, ngay cả các tài liệu bây giờ đơn giản hơn:
- Ký tự *, hoạt động như một ký tự đại diện và khớp với bất kỳ địa chỉ IP nào.
- Chuỗi
_default_
, là bí danh cho *
Vì vậy, với apache 2.4, câu trả lời là, điều tương tự .