Tôi có thể định nghĩa HTTP và HTTPS trong cùng một Virtualhost trong Apache conf không?


13

Tôi đã có một định nghĩa Virtualhost khá lớn mà tôi không muốn sao chép chỉ để trang web cũng sẽ chạy qua HTTPS.

Đây là những gì tôi muốn làm:

<VirtualHost *>
    ServerName example.com

    <If port=443>
        SSLEngine on
        SSLCertificateFile ...
        SSLCertificateKeyFile ...
        SSLCertificateChainFile ...
    </If>

    (other config)

</VirtualHost>

Có cách nào để làm việc này không?
Tôi có thiếu một số phương pháp khác không sao chép cấu hình không?

Câu trả lời:


12

Phiên bản ổn định hiện tại của Apache (2.2) không có tính năng đó, nhưng phiên bản 2.4 không có lệnh IF .

Bạn phải tạo hai Virtualhost ngay bây giờ, nhưng bạn có thể đặt một số nội dung thông qua các biến toàn cục hoặc môi trường apache và sử dụng nó trong cấu hình virtualhost của bạn (ví dụ như đặt tài liệu). Bằng cách này nếu bạn muốn thay đổi mà bạn có thể làm điều đó chỉ với một dòng sửa đổi.

Tất nhiên, bạn có thể sử dụng bao gồm để làm một cái gì đó như thế này:

<VirtualHost *:80>
        include /etc/apache2/vhost.conf.d/site1
</VirtualHost>

<VirtualHost *:443>
        include /etc/apache2/vhost.conf.d/site1
        include /etc/apache2/vhost.conf.d/site1-ssl
</VirtualHost>

ps: SNI sẽ là năm chính trước khi thích ứng IPv6. Tất cả các trình duyệt chính hỗ trợ nó đã giả sử bạn đang ở trên một hệ điều hành được hỗ trợ.

chỉnh sửa: vì fooquency đã phát hiện ra bạn không thể đặt SSLEngine On thành một khối If để câu trả lời của tôi sai.


8
Cố gắng đưa ra SSLEngine Onmột <If>ý chí SSLEngine not allowed here, vì vậy trường hợp sử dụng được đề xuất khi bắt đầu câu trả lời này thật đáng buồn dường như không thể thực hiện được. Điều này có vẻ là do yêu cầu "Chỉ các lệnh hỗ trợ bối cảnh thư mục mới có thể được sử dụng trong phần cấu hình này." (ref)SSLEngineserver config, virtual host (ref) , không phải thư mục.
fooquency

3

Không. Bạn có thể di chuyển hầu hết mọi thứ sang Cấu hình toàn cầu và kế thừa nó trong Virtualhost.


1
Thật không may, tôi có một vài Virtualhost, mỗi máy chủ có cấu hình khác nhau và hầu hết cần phải hoạt động trên HTTP và HTTPS.
Jake

1
Không có ích như câu trả lời này, đó là cách duy nhất đúng. Vui lòng di chuyển đến một máy chủ web không hút. :)
intgr

3

Điều này đã được trả lời trong một câu hỏi khác. Sử dụng một câu lệnh Bao gồm. Làm việc như một cơ duyên đối với tôi:

Phục vụ http (cổng 80) và https (cổng 443) trên cùng Virtualhost

# Acme Co
<VirtualHost 192.168.56.101:80>
        Include /usr/local/apache2/conf/main-acme.conf
</VirtualHost>

###* SSL
<VirtualHost 192.168.56.101:443>
        Include /usr/local/apache2/conf/main-acme.conf
        SSLEngine On
</VirtualHost>

2

Đối với máy chủ ảo SSL, bạn phải sử dụng cổng thứ hai

<VirtualHost *:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost *:4443>
    Servername def.com
</VirtualHost>

hoặc bạn phải sử dụng IP riêng

<VirtualHost 192.168.0.1:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost 192.168.0.2:443>
    Servername def.com
</VirtualHost>

Có một lời giải thích rất hay trong các tài liệu SSL của Apache http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

Tìm kiếm "Tại sao tôi không thể sử dụng SSL với các máy chủ ảo dựa trên tên / không dựa trên IP?"


2
Mặc dù vậy, hãy lưu ý điều này cho tương lai: en.wikipedia.org/wiki/Server_Name_Inication
mattdm

Trớ trêu thay, vào thời điểm SNI được chấp nhận rộng rãi đủ để được sử dụng an toàn cho phần lớn các trang web lưu trữ ảo, IPv6 có thể sẽ trở nên phổ biến đủ để khiến nó không liên quan.
jgoldschrafe

4
@jgoldschrafe Chào năm 2010, tương lai sẽ nói ở đây! Caniuse gần đây cho thấy các trình duyệt không SNI là <2% trên toàn thế giới. Từ thế giới đầu tiên, nó có lẽ ít hơn nhiều. IPv4 vẫn còn sống và tốt :)
kubanchot

2
@kubanchot Có tôi! :)
jgoldschrafe

@jgoldschrafe Ngay cả với IPv6, tôi vẫn sẽ ưu tiên SNI hơn việc gán các khối địa chỉ cho một máy, vì IP chủ yếu để định tuyến và việc quản lý theo cách đó dễ dàng hơn.
Bachsau
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.