Apache 2.3 lub nowszy
Z Apache 2.3 lub nowszym możesz najwyraźniej zrobić coś takiego (przetestowane):
<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 lub wcześniejszy
Aktualizacja: To nie jest dobre rozwiązanie. Patrz poniżej.
Musisz zrobić taki hack. Zwróć uwagę na [PT]
skrót „passsthrough”. Bez tego rzeczywiste przekierowanie HTTP jest wysyłane z powrotem do klienta, co prawdopodobnie nie jest tym, czego chcesz. [OR]
Rzeczą (co oznacza „lub”) pokazuje, jak dopasować wiele adresów.
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]
Musisz włączyć to, mod_rewrite
co możesz zrobić na Debian / Ubuntu za pomocą tego polecenia:
sudo a2enmod rewrite
Pamiętaj, że ta metoda nie całkowicie blokuje dostęp do Twojej witryny testowej innym osobom, więc prawdopodobnie będziesz chciał dodać pewne zabezpieczenia lub po prostu wybrać bardziej niejasny przedrostek niż next
.
Zaktualizuj metodę mod_rewrite.
Istnieje kilka problemów z tą metodą. Po pierwsze, Django nie działa z dwiema stronami w tym samym procesie jak ten, musisz postępować zgodnie z instrukcjami w tej odpowiedzi .
Po drugie mod_rewrite nie działa z POST
żądaniami ! Wszystkie POST
s są dyskretnie zmieniane na, GET
a dane wpisu są odrzucane. Bardzo frustrujące! Dlatego polecam użyć ...
wersja iptables
Po prostu uruchom serwery na dwóch różnych portach. Ten zawiera WSGI, aby mieć dwie osobne strony django.
<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>
Następnie możesz użyć tego iptables
polecenia, aby skierować żądania z adresu IP na porcie 80 do portu 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
Zmień, -A
aby -D
usunąć regułę.
Zauważ, że dokumenty sugerują, że musisz dodać dodatkowe polecenia Listen
i NameVirtualHost
polecenia, ale faktycznie odkryłem, że działa bez nich, a dodanie ich spowodowało, że się zepsuł (przynajmniej w Ubuntu).