Mendeklarasikan beberapa port untuk VirtualHosts yang sama

35

Deklarasikan beberapa port untuk VirtualHosts yang sama:

SSLStrictSNIVHostCheck off
# Apache setup which will listen for and accept SSL connections on port 443.
Listen 443
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:443

<VirtualHost *:443>
  ServerName domain.localhost
  DocumentRoot "/Users/<my_user_name>/Sites/domain/public"
  <Directory "/Users/<my_user_name>/Sites/domain/public">
    Order allow,deny
    Allow from all
  </Directory>

  # SSL Configuration
  SSLEngine on
  ...
</VirtualHost>

Bagaimana saya bisa mendeklarasikan port baru ('dengarkan', ServerName, ...) untuk 'domain.localhost'?

Jika saya menambahkan kode berikut, apache berfungsi (terlalu banyak) juga untuk semua subdomain lain dari 'domain.localhost' (subdomain1.domain.localhost, subdomain2.domain.localhost, ...):

<VirtualHost *:80>
  ServerName pjtmain.localhost:80
  DocumentRoot "/Users/Toto85/Sites/pjtmain/public"
  RackEnv development
  <Directory "/Users/Toto85/Sites/pjtmain/public">
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
pengguna65567
sumber
3
Hanya untuk diperhatikan. Anda tidak dapat bergabung dengan https dan host virtual non-https menjadi satu. <VirtualHost *: 80 *: 443>. 80 Tidak dapat memiliki "SSLEngine on". Anda harus memiliki 2 deklarasi VirtualHost terpisah untuk SSL dan non-SSL.
Gacek

Jawaban:

63

Pertanyaannya agak ambigu, tetapi saya akan mencoba membantu.

Jika Anda ingin virtualhost yang sama mendengarkan di beberapa port, maka Anda melakukan ini:

Listen 80
NameVirtualHost *:80

Listen 8080    
NameVirtualHost *:8080

<VirtualHost *:80 *:8080>
  ServerName some.domain.name
  ServerAlias some.other.domain.name
  ....
</VirtualHost>

Secara umum Anda tidak mendefinisikan beberapa VirtualHost berbasis nama dari nama domain yang sama, kecuali jika Anda perlu menggunakan protokol yang berbeda.

Untuk virtualhost berbasis nama SSL Anda harus ekstra hati-hati: menurut definisi tidak boleh ada banyak sertifikat pada IP yang sama: Port, jadi, untuk menghindari kesalahan sertifikat, harus berupa sertifikat wilcard, yang mencakup semua nama domain yang dilayani.


sumber
2
+1 tetapi beberapa koreksi kecil: Sertifikat SSL tidak terikat dengan alamat IP tetapi dengan nama umum (CN) yang harus sama dengan nama host . Juga dengan ekstensi SNI, dimungkinkan untuk memiliki beberapa host virtual dengan sertifikat berbeda pada alamat IP yang sama. ( en.wikipedia.org/wiki/Server_Name_Indication )
Daniel Rikowski
3
+1 juga, untuk SSL seharusnya <VirtualHost *: 80 *: 443>
fedmich