Apakah mungkin untuk mengkonfigurasi Apache untuk host virtual berbeda berdasarkan IP sumber ? (Yaitu antarmuka yang sama, nama host yang sama, tetapi dua host virtual yang berbeda, dengan konten yang berbeda, berdasarkan IP sumber .)
Motivasi untuk ini adalah agar alamat IP saya dapat mengakses situs dengan semestinya, tetapi semua orang mendapat halaman holding. Solusi konvensional tampaknya menggunakan mod_rewrite untuk mengarahkan pengunjung ke halaman terpisah dalam dokumen yang sama, tetapi saya ingin menggunakan dokumen yang sama sekali berbeda untuk halaman holding.
apache-2.2
ip
virtualhost
ithinkihaveacat
sumber
sumber
Jawaban:
Saya tidak tahu apakah itu mungkin (tanpa mod_rewrite, tetap) di tingkat Apache.
Ini ide lain. Bagaimana jika Anda mengatur dua host virtual Apache dan kemudian menggunakan iptables untuk secara transparan meneruskan pengunjung untuk memperbaiki host virtual? Sesuatu seperti
Atau yang serupa. :)
sumber
Itu tidak akan benar-benar menjadi tuan rumah virtual yang berbeda. Tetapi menggunakan sesuatu seperti mod_rewrite atau mod_alias Anda dapat menayangkan konten dari folder apa pun yang telah Anda setel izin yang sesuai. Hanya ada satu dokumen, tetapi Anda dapat secara efektif mengubahnya dengan cepat.
Salah satu cara untuk melakukannya mungkin:
Harap perhatikan bahwa mungkin akan sedikit lebih bersih untuk menangani ini dengan subdomain dev.
sumber
Apache 2.3 atau lebih baru
Dengan Apache 2.3 atau yang lebih baru Anda dapat melakukan sesuatu seperti ini (diuji):
Apache 2.2 atau sebelumnya
Pembaruan: Ini bukan solusi yang baik. Lihat di bawah.
Anda harus melakukan peretasan seperti ini. Perhatikan
[PT]
yang merupakan singkatan dari "passthrough". Tanpa itu, pengalihan HTTP yang sebenarnya dikirim kembali ke klien, yang mungkin bukan yang Anda inginkan. The[OR]
hal (yang merupakan singkatan dari "atau") menunjukkan bagaimana untuk mencocokkan beberapa alamat.Anda harus mengaktifkan
mod_rewrite
yang dapat Anda lakukan pada Debian / Ubuntu dengan perintah ini:Perhatikan bahwa metode ini tidak sepenuhnya melarang orang lain mengakses situs pengujian Anda, jadi Anda mungkin ingin menambahkan beberapa keamanan, atau hanya memilih awalan yang lebih tidak jelas daripada
next
.Pembaruan pada metode mod_rewrite.
Ada beberapa masalah dengan metode ini. Pertama, Django tidak bekerja dengan dua situs dalam proses yang sama seperti ini, Anda harus mengikuti instruksi dalam jawaban ini .
Kedua mod_rewrite tidak berfungsi dengan
POST
permintaan ! SemuaPOST
s diam-diam diubah keGET
dan data posting dibuang. Sangat membuat frustrasi! Karena itu saya sarankan Anda menggunakan ...versi iptables
Cukup jalankan server pada dua port yang berbeda. Yang ini termasuk hal-hal WSGI untuk memiliki dua situs Django terpisah.
Kemudian Anda dapat menggunakan
iptables
perintah ini untuk merutekan permintaan dari alamat ip Anda di port 80 ke port 1222:Ubah
-A
ke-D
untuk menghapus aturan.Perhatikan bahwa dokumen menyarankan Anda perlu menambahkan tambahan
Listen
danNameVirtualHost
perintah, tetapi saya benar-benar menemukan bahwa itu berfungsi tanpa mereka, dan menambahkan mereka membuatnya rusak (setidaknya di ubuntu).sumber
Alias cannot occur within <Directory/Location/Files> section
perbaikan? Saya sangat membutuhkan ini: $AFAIK, satu-satunya cara untuk melakukan ini adalah dengan menghubungkan lokasi dalam root dokumen ke konten Anda di luar root dokumen, kemudian menulis ulang permintaan itu.
sumber
Seperti kata @Timmmm, tetapi mengoreksi pernyataan ipmatch (perhatikan '10 .10.10.10 '): ServerName www.example.com
Karena jika tidak maka akan muncul kesalahan:
sumber