Bagaimana cara membuat subdomain di virtualhost berbasis nama?

27

Saya memiliki hosting berbasis nama, sebut saja my.address.com. Teman saya memiliki alamat 'polos' address.comdan memberi saya mesin virtual yang dapat saya akses melalui SSH.

Dia juga membuat beberapa sihir dengan port dan sekarang, setelah menginstal Apache, saya bisa mengakses /var/wwwmelalui my.address.com.

Jadi, pertanyaannya adalah, bagaimana saya bisa membuat subdomain seperti test.my.address.com?

Seharusnya ada sihir dengan Apache's Listen Directive , tapi aku tidak bisa mengetahuinya. Juga, saya tahu cara membuat situs yang tersedia secara lokal dengan Apache, tetapi tidak sama.

scythargon
sumber
Anda tidak perlu Listen, lihat Apaches virtual hosts: httpd.apache.org/docs/2.2/vhosts
Der Hochstapler
pertanyaan utama tetap - apa yang harus ditulis dalam direktif ServerName?
scythargon

Jawaban:

33

Untuk dapat membuat subdomain, Anda harus memastikan beberapa hal:

DNS

Jadi orang lain dapat mencapai test.my.address.com, mereka pertama-tama harus dapat menyelesaikan nama itu ke alamat IP mesin virtual Anda. Bagaimana itu bisa dilakukan?

Apa yang kemungkinan besar sudah dilakukan teman Anda, adalah membuat catatan A di address.comzona, yang menunjuk myke alamat IP VM Anda.

Sejauh ini baik. Tapi bagaimana dengan itu test.my? Mungkin belum ada entri.

Teman Anda bisa menambahkan *.myzona juga (dan arahkan ke alamat IP yang sama). Maka semua permintaan something.my.address.comakan dikirimkan ke VM Anda. Besar!

Host Virtual Apache

Setelah VM Anda dapat dihubungi, Apache harus tahu cara menangani permintaan tersebut. Di sinilah kami menggunakan fitur Virtual Hosts dari server HTTP Apache.

Saya biasanya berjalan di Debian, jadi saya akan menjelaskan ini dengan contoh konfigurasi di /etc/apache2/sites-available. Mari kita memiliki file di sana yang dipanggil test.my.address.comdan mengisinya dengan informasi.

<VirtualHost *:80>
        ServerName test.my.address.com
        ServerAdmin [email protected]

        DocumentRoot /var/www/test.my.address.com/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/test.my.address.com/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/test.my.address.com.error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/test.my.address.com.access.log combined
</VirtualHost>

The Pengaturan kunci di dalam file ini adalah ServerNamedirektif . Ini memberi tahu Apache nama server mana yang harus tersedia. Nama tambahan dapat diberikan dengan direktif ServerAlias .

Jika Anda menggunakan Debian juga, jangan lupa sudo a2ensite test.my.address.comsetelah Anda membuat file dan sudo invoke-rc.d apache2 restart.

Der Hochstapler
sumber
Terima kasih banyak! :) Saya membuat bagian saya, dan menulis email kepada teman tentang bagiannya. Terima kasih lagi :)
scythargon
@scythargon: Dengan senang hati. Kami di sini untuk membantu :)
Der Hochstapler
Sementara teman saya tidak menjawab pertanyaan saya, bisakah Anda, tolong? Apa yang saya pikirkan tentang cara kerjanya: http-request untuk test.my.address.compergi ke my.address.comdan kemudian server Apache saya di VM menanganinya. Tetapi Anda mengatakan bahwa DNS-server di address.com harus tahu test.mysebelum semua ini dan terlepas dari pengetahuan tentang my, mengapa?
scythargon
@scythargon: Untuk permintaan HTTP apa pun untuk mencapai server Anda, klien mana pun harus mencari tahu ke server mana permintaan harus dikirim. Jadi nama host harus valid. Kalau tidak, mereka hanya akan diberi tahu "nama itu tidak ada".
Der Hochstapler