Apache 2.3 или более поздняя версия
С Apache 2.3 или более поздней версии вы можете сделать что-то вроде этого (протестировано):
<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 или более ранняя версия
Обновление: это не хорошее решение. См. ниже.
Вы должны сделать взлом, как это. Обратите внимание на то, [PT]
что означает «проход». Без этого фактическое перенаправление HTTP отправляется обратно клиенту, что, вероятно, не то, что вы хотите. [OR]
Вещь (которая выступает за «или») показывает , как сочетать несколько адресов.
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]
Вам нужно включить, mod_rewrite
что вы можете сделать в Debian / Ubuntu с помощью этой команды:
sudo a2enmod rewrite
Обратите внимание, что этот метод не полностью запрещает другим людям доступ к вашему тестовому сайту, поэтому вы, вероятно, захотите добавить некоторую защиту или просто выбрать более неясный префикс, чем next
.
Обновление метода mod_rewrite.
Есть несколько проблем с этим методом. Во-первых, Django не работает с двумя сайтами в одном и том же процессе, вам нужно следовать инструкциям в этом ответе .
Во-вторых, mod_rewrite не работает с POST
запросами ! Все POST
s молча изменяются на GET
и данные поста сбрасываются. Очень расстраивает! Поэтому я рекомендую вам использовать ...
версия iptables
Просто запустите серверы на двух разных портах. Этот включает в себя материал WSGI, чтобы иметь два отдельных сайта 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>
Затем вы можете использовать эту iptables
команду для маршрутизации запросов с вашего IP-адреса на порт 80 на порт 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
Измените -A
на, -D
чтобы удалить правило.
Обратите внимание, что в документах предполагается, что вам нужно добавить дополнительные команды Listen
и NameVirtualHost
команды, но я обнаружил, что они работают без них, и добавление их приводило к поломке (по крайней мере, в Ubuntu).