Virtualhost cho tên miền phụ ký tự đại diện và tên miền phụ tĩnh


78

Tôi có một tình huống kỳ lạ, nơi tôi muốn có các URL app1.example.com, example.com*.example.com tất cả sử dụng một máy chủ ảo khác nhau. Đây là những gì tôi có (loại trừ example.comvì nó chỉ làm cho nó lộn xộn hơn).

<VirtualHost *>
  ServerName app1.example.com
  ServerAlias app1.example.com

  DocumentRoot = /var/www/app1
  # Other configuration for this app here

</VirtualHost>

<VirtualHost *>
  ServerName wildcard.example.com
  ServerAlias *.example.com

  DocumentRoot = /var/www/wildcard
  # other configuration for this app here

</VirtualHost>

Vấn đề là chúng xung đột. Bên nào được liệt kê trước sẽ thắng. Làm cách nào để lưu trữ cả máy chủ ảo ký tự đại diện và máy chủ cụ thể?

Lưu ý: Tôi không chỉ thay đổi DocumentRoottrong cấu hình, vì vậy việc sử dụng mod_rewriteđể thay đổi biến DocumentRoot không khắc phục được sự cố.

Câu trả lời:


161
<VirtualHost *:80>
  DocumentRoot /var/www/app1
  ServerName app1.example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/example
  ServerName example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/wildcard
  ServerName other.example.com
  ServerAlias *.example.com
</VirtualHost>

Nên làm việc. Mục nhập đầu tiên sẽ trở thành mục nhập mặc định nếu bạn không nhận được kết quả phù hợp rõ ràng. Vì vậy, nếu bạn có app.otherexample.com trỏ đến nó, nó sẽ bị bắt là app1.example.com.


1
Chỉ là một câu hỏi, NameVirtualHost *:80làm gì?
Pedro Moreira

Lệnh này cho phép các máy chủ ảo dựa trên tên và sẽ yêu cầu apache lắng nghe tất cả các ip (*) trên cổng 80. Tài liệu Apache 2.2: httpd.apache.org/docs/2.2/en/vhosts/name-based.html
Andreas Hinderberger

3
Xóa NameVirtualHost *:80: AH00548: NameVirtualHost không có hiệu lực và sẽ bị xóa trong bản phát hành tiếp theo
nerdoc

Thẻ hoang dã không làm việc cho tôi, bạn có biết tại sao không?
ericn

1
NameVirtualHost *:80là quan trọng đối với apache 2.2, không cần apache 2.4, tôi không biết tại sao.
Leo Lee

18

Các ký tự đại diện chỉ có thể được sử dụng trong ServerAliasthay vì ServerName. Điều gì đó đã khiến tôi bối rối.

Đối với trường hợp sử dụng của bạn, những điều sau đây là đủ

<VirtualHost *:80>
    ServerAlias *.example.com
    VirtualDocumentRoot /var/www/%1/
</VirtualHost>

1

Điều này cũng hoạt động cho https cần một giải pháp để tạo các thư mục dự án chính là nó. vì chrome không thích non ssl nữa được sử dụng ssl miễn phí. Lưu ý: Máy chủ Web của tôi là Wamp64 trên Windows 10 nên tôi sẽ không sử dụng cấu hình này do các biến trừ khi bạn sử dụng wamp.

<VirtualHost *:443>
ServerAdmin test@test.com
ServerName test.com
ServerAlias *.test.com

SSLEngine On
SSLCertificateFile "conf/key/certificatecom.crt"
SSLCertificateKeyFile "conf/key/privatecom.key"

VirtualDocumentRoot "${INSTALL_DIR}/www/subdomains/%1/"

DocumentRoot "${INSTALL_DIR}/www/subdomains"
<Directory "${INSTALL_DIR}/www/subdomains/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>

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.