Apache2 dengan SSL apakah saya harus menyalin blok VirtualHost?

18

Di Apache2 di ubuntu saya mendengarkan situs saya di 80, dan sekarang saya ingin menambahkan SSL. Apakah ada cara untuk mengaktifkan SSLEngine untuk port 443 jadi saya tidak perlu menyalin seluruh blok VirtualHost?

Ketika saya melakukan ini:

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

Mengaktifkan SSLEngine untuk port 80. Apakah ada cara untuk menggunakan hanya satu blok VirtualHost, dan hanya menyalakan SSLEngine untuk port 443? Jadi saya bisa melakukan sesuatu seperti ini?

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>
sayang
sumber

Jawaban:

14

Anda tidak dapat membuat satu vhost melakukan HTTP dan HTTPS, karena vhost terpisah yang melayani protokol terpisah. Sebagai gantinya, Anda harus meletakkan semua konfigurasi umum ke dalam file yang terpisah, dan kemudian memasukkan file itu ke dalam vhost SSL dan non-SSL untuk domain.

Contoh minimal:

# /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 [email protected]
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log
womble
sumber
Bisakah Anda memberi saya contoh singkat tentang bagaimana seharusnya file itu? Apakah perlu pembungkus VirtualHost, atau haruskah saya memindahkan semua lini tanpa pembungkus?
dar
1
Saya telah menambahkan contoh untuk jawaban saya.
womble
1

Seperti yang saya sebutkan pada pertanyaan berbeda tentang stackoverflow ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ):

Pilihan lain daripada menggunakan Includeadalah menggunakan Macro(sehingga Anda dapat menyimpan semuanya dalam satu file).

Pertama-tama aktifkan modul makro:

a2enmod macro

Lalu, letakkan barang yang Anda bagikan di makro dan usedari virtualhost Anda:

<Macro SharedStuff>
   ServerName example.com
   ServerAdmin [email protected]
   <DocumentRoot /var/www/example>
      ...
   </DocumentRoot>
</Macro>

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

<VirtualHost *:443>
  Use SharedStuff

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

Macro juga dapat mengambil parameter, dan didefinisikan dalam file lain yang disertakan; jadi Anda dapat menggunakannya sedikit seperti Functions, dan menyimpan banyak duplikasi di file konfigurasi Apache Anda.

Lihat di sini untuk detail lebih lanjut:

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

Seb
sumber
0

Anda dapat menempatkan pengaturan direktori di <Directory>blok di luar <VirtualHost>blok apa pun . Itu akan menerapkannya di semua host virtual, tetapi hanya di dalam jalur yang ditentukan.

DanMan
sumber