Bisakah saya mendefinisikan HTTP dan HTTPS di VirtualHost yang sama di conf Apache?


13

Saya punya definisi VirtualHost yang cukup besar yang tidak ingin saya duplikat sehingga situs tersebut juga akan berjalan di atas HTTPS.

Inilah yang ingin saya lakukan:

<VirtualHost *>
    ServerName example.com

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

    (other config)

</VirtualHost>

Apakah ada cara untuk melakukan ini?
Apakah saya kehilangan beberapa metode lain untuk tidak menduplikasi konfigurasi?

Jawaban:


12

Versi stabil Apache saat ini (2.2) tidak memiliki fitur itu, tetapi 2.4 memang memiliki arahan IF .

Anda harus membuat dua VirtualHosts untuk saat ini, tetapi Anda dapat mengatur beberapa hal melalui variabel global lingkungan atau apache dan menggunakannya dalam konfigurasi virtualhost Anda (mengatur rootroot misalnya). Dengan cara ini jika Anda ingin mengubahnya Anda dapat melakukannya hanya dengan satu baris modifikasi.

Tentu saja, Anda dapat menggunakan include untuk melakukan sesuatu seperti ini:

<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 akan utama tahun sebelum adaptasi IPv6. Semua browser mainstream mendukungnya dengan anggapan Anda menggunakan OS yang didukung.

sunting: seperti fooquency melihat Anda tidak dapat menempatkan SSLEngine Aktif ke blok Jika jadi jawaban saya salah.


8
Mencoba untuk menempatkan SSLEngine Ondalam <If>akan memberikan SSLEngine not allowed here, sehingga penggunaan-kasus disarankan pada awal jawaban ini sayangnya tidak tampak mungkin. Ini tampaknya karena persyaratan bahwa "Hanya arahan yang mendukung konteks direktori dapat digunakan dalam bagian konfigurasi ini." (ref) dan SSLEnginemerupakan server config, virtual host (ref) , tidak direktori.
fooquency

3

Tidak. Anda dapat memindahkan sebagian besar hal ke konfigurasi Global dan mewarisinya di VirtualHost.


1
Sayangnya saya punya beberapa VirtualHosts, masing-masing dengan konfigurasi yang berbeda dan paling perlu untuk bekerja melalui HTTP dan HTTPS.
Jake

1
Tidak membantu seperti jawaban ini, itu satu-satunya jawaban yang benar. Silakan pindah ke server web yang tidak payah. :)
intgr


2

Untuk host virtual SSL, Anda juga harus menggunakan porta ala kedua

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

atau Anda harus menggunakan IP terpisah

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

Ada actaully penjelasan yang sangat bagus di dokumentasi Apache SSL http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

Telusuri "Mengapa saya tidak bisa menggunakan SSL dengan host virtual berbasis nama / non-IP?"


2
Waspadai hal ini untuk masa depan, meskipun: en.wikipedia.org/wiki/Server_Name_Indication
mattdm

Ironisnya, pada saat SNI diterima secara luas sehingga dapat digunakan dengan aman untuk sebagian besar situs hosting virtual, IPv6 mungkin sudah cukup umum untuk menjadikannya tidak relevan.
jgoldschrafe

4
@ jgoldschrafe Hai 2010, ini masa depan yang berbicara di sini! Caniuse baru- baru ini menunjukkan browser non-SNI <2% di seluruh dunia. Dari dunia pertama mungkin jauh lebih sedikit. IPv4 masih hidup dan baik-baik saja :)
kubanczyk

2
@kubanczyk Paham aku! :)
jgoldschrafe

@jgoldschrafe Bahkan dengan IPv6 saya masih akan lebih dulu SNI lebih dari menetapkan blok alamat ke satu mesin, karena IP terutama untuk routing dan lebih mudah untuk mengelola cara itu.
Bachsau
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.