Apache2 với SSL tôi có phải sao chép các khối Virtualhost không?


18

Trong Apache2 trên ubfox tôi có trang web của tôi nghe trên 80 và bây giờ tôi muốn thêm SSL. Có cách nào để kích hoạt SSLEngine cho cổng 443 để tôi không phải sao chép toàn bộ khối Virtualhost không?

Khi tôi làm điều này:

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
  SSLEngine On
  ... a bunch more lines...
</VirtualHost>

Nó đang bật SSLEngine cho cổng 80. Có cách nào để chỉ sử dụng một khối Virtualhost và chỉ bật SSLEngine cho cổng 443 không? Vì vậy, tôi có thể làm một cái gì đó như thế này?

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
   <IfPort 443>
      SSLEngine On
   </IfPort>
   ... a bunch of lines I don't want to copy into another VirutalHost block...
</VirtualHost>

Câu trả lời:


14

Bạn không thể tạo một vhost làm cả HTTP và HTTPS, vì chúng là các vhost riêng biệt phục vụ các giao thức riêng biệt. Thay vào đó, bạn nên đặt tất cả các cấu hình phổ biến vào một tệp riêng biệt, sau đó đưa tệp đó vào cả vhost SSL và không SSL cho miền.

Ví dụ tối thiểu:

# /etc/apache2/sites-available/example.com
<VirtualHost *:80>
  Include /etc/apache2/domains/example.com
</VirtualHost>

<VirtualHost 192.0.2.1:443>
  SSLEngine On
  SSLCertificateFile /etc/ssl/example.com_crt
  SSLCertificateKeyFile /etc/ssh/example.com_key

  Include /etc/apache2/domains/example.com
</VirtualHost>

# /etc/apache2/domains/example.com
ServerName example.com
ServerAlias www.example.com

ServerAdmin webmaster@example.com
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log

Bạn có thể cho tôi một ví dụ ngắn về các tập tin sẽ trông như thế nào? Nó có cần trình bao bọc Virtualhost không, hay tôi chỉ nên di chuyển tất cả các dòng đến nó mà không có trình bao bọc nào?
dar

1
Tôi đã thêm một ví dụ cho câu trả lời của tôi.
womble

1

Như tôi đã đề cập về một câu hỏi khác trên stackoverflow ( /programming/679383/do-i-have-to-d repeatate-the-virtualhost-divesives-for-port-80-and-443/52375167 # 52375167 ):

Một tùy chọn khác thay vì sử dụng Includelà sử dụng Macro(vì vậy bạn có thể giữ tất cả trong một tệp).

Đầu tiên kích hoạt mô-đun macro:

a2enmod macro

Sau đó đặt nội dung được chia sẻ của bạn vào một macro và usenó từ virtualhost của bạn:

<Macro SharedStuff>
   ServerName example.com
   ServerAdmin example@example.com
   <DocumentRoot /var/www/example>
      ...
   </DocumentRoot>
</Macro>

<VirtualHost *:80>
  Use SharedStuff
</VirtualHost>

<VirtualHost *:443>
  Use SharedStuff

  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  ...
</VirtualHost>

Macro cũng có thể lấy tham số và được xác định trong các tệp khác được bao gồm; vì vậy bạn có thể sử dụng chúng một chút giống như Hàm và lưu rất nhiều bản sao trên các tệp cấu hình Apache của bạn.

Xem tại đây để biết thêm chi tiết:

https://httpd.apache.org/docs/2.4/mod/mod_macro.html


0

Bạn có thể đặt cài đặt thư mục trong một <Directory>khối bên ngoài bất kỳ <VirtualHost>khối nào . Điều đó sẽ áp dụng chúng trên tất cả các máy chủ ảo, nhưng chỉ bên trong đường dẫn được chỉ định.

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.