Apache 2.3 atau lebih baru
Dengan Apache 2.3 atau yang lebih baru Anda dapat melakukan sesuatu seperti ini (diuji):
<VirtualHost *:80>
ServerName www.example.com
<If "-R '10.10.10.10'">
# The next version of the website...
Alias /favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website-new/main/wsgi.py
</If>
<Else>
# The standard version (e.g. holding page).
Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py
</Else>
# and so on...
</VirtualHost>
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.
Alias /next/favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /next/static/ /home/ubuntu/static/
WSGIScriptAlias /next /home/ubuntu/website-new/main/wsgi.py
Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py
# Rewrite for our IP.
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^80\.4\.170\.209$ [OR]
RewriteCond %{REMOTE_ADDR} ^94\.193\.52\.157$
RewriteRule ^/(.*) /next/$1 [PT]
Anda harus mengaktifkan mod_rewrite
yang dapat Anda lakukan pada Debian / Ubuntu dengan perintah ini:
sudo a2enmod rewrite
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 ! Semua POST
s diam-diam diubah ke GET
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.
<VirtualHost *:80>
ServerName www.example.com
Alias /favicon.ico /home/ubuntu/alpha/favicon.ico
Alias /static/ /home/ubuntu/alpha/static/
WSGIDaemonProcess alpha_wsgi user=www-data group=www-data
WSGIScriptAlias / /home/ubuntu/alpha/alpha/wsgi.py
WSGIProcessGroup alpha_wsgi
ServerAdmin info@example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:1222>
ServerName www.example.com
Alias /favicon.ico /home/ubuntu/main/favicon.ico
Alias /static/ /home/ubuntu/main/static/
WSGIDaemonProcess main_wsgi user=www-data group=www-data
WSGIScriptAlias / /home/ubuntu/main/main/wsgi.py
WSGIProcessGroup main_wsgi
ServerAdmin info@example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Kemudian Anda dapat menggunakan iptables
perintah ini untuk merutekan permintaan dari alamat ip Anda di port 80 ke port 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
Ubah -A
ke -D
untuk menghapus aturan.
Perhatikan bahwa dokumen menyarankan Anda perlu menambahkan tambahan Listen
dan NameVirtualHost
perintah, tetapi saya benar-benar menemukan bahwa itu berfungsi tanpa mereka, dan menambahkan mereka membuatnya rusak (setidaknya di ubuntu).